Redis数据类型(下篇)

5.Redis有序集合zset(sorted set)

本质就是在set的基础上,每个val值前面加了一个score分数值。

(1)向有序集合中添加多个(或者一个)元素和其对应的分数

127.0.0.1:6379> zadd zset1 100 a 90 b 80 c 70 d 60 e
(integer) 5

(2)按照元素的分数从小到大的顺序,返回索引strat到stop之间所有的元素

命令:zrange key start stop [withscores]

比如:

127.0.0.1:6379> zrange zset1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> zrange zset1 0 -1 withscores
 1) "e"
 2) "60"
 3) "d"
 4) "70"
 5) "c"
 6) "80"
 7) "b"
 8) "90"
 9) "a"
10) "100"

(3)按分值从大到小返回有序集合中指定范围内的元素。

命令:ZREVRANGE key start stop [WITHCORES]

127.0.0.1:6379> zrevrange zset1 0 -1 withscores
 1) "a"
 2) "100"
 3) "b"
 4) "90"
 5) "c"
 6) "80"
 7) "d"
 8) "70"
 9) "e"
10) "60"

(4)获取指定分数范围内的元素,limit的作用是返回限制,limit 开始下标 多少步 ;( 不包括

对应的命令:zrangebyscore key min max[wthscores][limit offset count]

127.0.0.1:6379> zrangebyscore zset1 60 90 withscores limit 1 2
1) "d"
2) "70"
3) "c"
4) "80"
127.0.0.1:6379> zrangebyscore zset1 (60 90 withscores
1) "d"
2) "70"
3) "c"
4) "80"
5) "b"
6) "90"


(5)zscore key member:获取元素的分数

127.0.0.1:6379> zscore zset1 e
"60"


(6)zcard key:获取集合中元素的数量

127.0.0.1:6379> zcard zset1
(integer) 5


(7)zrem key 某score下对应的value值:作用是删除元素

127.0.0.1:6379> zrem zset1 e
(integer) 1
127.0.0.1:6379> zrem zset1 e
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "70"
3) "c"
4) "80"
5) "b"
6) "90"
7) "a"
8) "100"


(8)zincrby key increment member:增加某个元素的分数

127.0.0.1:6379> zincrby zset1 20 a
"120"


(9)zcount key min max:获得指定分数范围内的元素个数

127.0.0.1:6379> zcount zset1 60 120
(integer) 4


(10)zmpop:从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对

127.0.0.1:6379> zmpop 1 zset1 min count 1
1) "zset1"
2) 1) 1) "d"
      2) "70"
127.0.0.1:6379> zmpop 1 zset1 min count 2
1) "zset1"
2) 1) 1) "c"
      2) "80"
   2) 1) "b"
      2) "90"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "a"
2) "120"


(11)zrank key values值:作用是获得下标值

127.0.0.1:6379> zrank zset1 a
(integer) 0


(12)zrevrank key values值:作用是逆序获得下标值

127.0.0.1:6379> zrevrank zset1 a
(integer) 0

6.Redis位图(bitmap)

说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型
位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
能干嘛? 用于状态统计 ,统计签到,考勤打卡等。
(1)setbit key offset value (setbit 键偏移位 只能零或者1)

127.0.0.1:6379> setbit bit1 1 1
(integer) 0
127.0.0.1:6379> setbit bit1 2 1
(integer) 0
127.0.0.1:6379> setbit bit1 3 1
(integer) 0

bitmap的偏移量是从零开始算的
(2)getbit key offset

127.0.0.1:6379> getbit bit1 2
(integer) 1
127.0.0.1:6379> getbit bit1 1
(integer) 1


(3)strlen统计字节数占用多少

127.0.0.1:6379> strlen bit1
(integer) 1


(4)bitcount 全部键里面含有1的有多少个?

127.0.0.1:6379> bitcount bit1 
(integer) 3


(5)bitop

BITOP 命令支持的位元操作包括 AND(与)、OR(或)、XOR(异或)和 NOT(非)。这些操作可以对多个二进制位字符串进行位运算,并将结果存储在目标键中。(下面的k3就是目标键

使用案例:

bitop的使用案例: 统计20230101 和 20230102两天都签到的用户(其中0和1都代表用户)

127.0.0.1:6379> hset uid:map 0 tom
(integer) 1
127.0.0.1:6379> hset uid:map 1 jack
(integer) 1
127.0.0.1:6379> hgetall uid:map
1) "0"
2) "tom"
3) "1"
4) "jack"
127.0.0.1:6379> setbit 20230101 0 1  //用户0在20230101签到了
(integer) 0
127.0.0.1:6379> setbit 20230101 1 1  //用户1在20230101签到了
(integer) 0
127.0.0.1:6379> setbit 20230101 2 1  //用户2在20230101签到了
(integer) 0
127.0.0.1:6379> setbit 20230101 3 1  //用户3在20230101签到了
(integer) 0
127.0.0.1:6379> setbit 20230102 0 1  //用户0在20230102签到了
(integer) 0
127.0.0.1:6379> setbit 20230102 2 1  //用户2在20230102签到了
(integer) 0
127.0.0.1:6379> bitcount 20230101
(integer) 4
127.0.0.1:6379> bitcount 20230102
(integer) 2
127.0.0.1:6379> bitop and k3 20230101 20230102
(integer) 1
127.0.0.1:6379> bitcount k3
(integer) 2

7.Redis基数统计(hyperloglog)

作用:统计某个网站的uv,统计某个文章的uv
什么是uv:uniquevisitor,独立访客,一般理解为客户端ip
需要去重考虑
比如:用户搜索网站关键词的数量、统计用户每天搜索不同词条个数
简介:去重复统计功能的基数估计算法就是hyperloglog,是一种数据集,去重复后的真实个数
基数统计 :用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算
一句话 就是去重脱水后的真实数据


(1)pfadd key element [element...]:添加指定元素到hyperloglog中。

127.0.0.1:6379> pfadd hll01 1 3 4 5 7 9
(integer) 1
127.0.0.1:6379> pfadd hll02 2 4 4 4 6 8 9
(integer) 1


(2)pfcount key [key...]:返回给定hyperloglog的基数估算值。

127.0.0.1:6379> pfcount hll01
(integer) 6
127.0.0.1:6379> pfcount hll02
(integer) 5


(3)pfmerge destkey sourcekey [sourcekey...]:将多个hyperloglog合并为一个hyperloglog

127.0.0.1:6379> pfmerge disresult hll01 hll02
OK
127.0.0.1:6379> pfcount disresult
(integer) 9

注意:Redis HyperLogLog
redis在2.8.9版本添加了hypeloglog结构。
Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的,并且是很小的
Redis 里面,每个HyperLogLog键只需要花费12kb内存,就可以计算接近264个不同元素的基数。 这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,运回输入的各个元素。

不能获取到元素的值:

127.0.0.1:6379> type hll01
string
127.0.0.1:6379> get hll01
"HYLL\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00A\xee\x84H#\x80SQ\x80Mt\x80L?\x80B\xd7\x80F\a"

8.Redis地理空间(geo)

获取某地经纬度的链接

(1)geoadd key 经度 纬度 member

添加经纬度:

127.0.0.1:6379> geoadd city 116.403963 39.915119  天安门  116.403963 39.915119 故宫
(integer) 2

(2)zrange key 0 -1 

遍历经纬度:

127.0.0.1:6379> type city
zset
127.0.0.1:6379> zrange city 0 -1
1) "\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8"
2) "\xe6\x95\x85\xe5\xae\xab"

 解决乱码的问题:

127.0.0.1:6379> quit
[root@bogon myredis]# redis-cli -a 111111 --raw
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> zrange city 0 -1
天安门
故宫

(3)获取经纬度:(一个获取的是经纬度,一个是base32编码的值)

127.0.0.1:6379> geopos city 天安门
116.40396326780319214
39.91511970338637383
127.0.0.1:6379> geohash city 天安门
wx4g0f6f2v0
127.0.0.1:6379> geohash city 天安门 故宫
wx4g0f6f2v0
wx4g0f6f2v0

(4)geodist key member1 member2:获取两地的距离

127.0.0.1:6379> geodist city 天安门 故宫 m
0.0000

(5)georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素

命令:GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc

WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
COUNT 限定返回的记录数。

例: 找出位于指定范围内的元素,中心点的是由给定的位置的元素决定的

127.0.0.1:6379> georadius city 116.418017 39.914402 10 km withdist withcoord count 10
天安门
1.2016
116.40396326780319214
39.91511970338637383
故宫
1.2016
116.40396326780319214
39.91511970338637383

9.Redis流(stream,了解)

专业的事情还要专业的人去做。redis做好缓存就行了。消息队列还是要其他的技术来实现。

127.0.0.1:6379> xadd mystream * id 1 name 张三
"1716474731315-0"
127.0.0.1:6379> xadd mystream * id 2 name 李四
"1716474746890-0"
127.0.0.1:6379> xrange mystream - +
1) 1) "1716474731315-0"
   2) 1) "id"
      2) "1"
      3) "name"
      4) "\xe5\xbc\xa0\xe4\xb8\x89"
2) 1) "1716474746890-0"
   2) 1) "id"
      2) "2"
      3) "name"
      4) "\xe6\x9d\x8e\xe5\x9b\x9b"
127.0.0.1:6379> xrange mystream - + count 1
1) 1) "1716474731315-0"
   2) 1) "id"
      2) "1"
      3) "name"
      4) "\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379> xrev mystream + 1
(error) ERR unknown command 'xrev', with args beginning with: 'mystream' '+' '1' 
127.0.0.1:6379> xrevrange mystream + 1
1) 1) "1716474746890-0"
   2) 1) "id"
      2) "2"
      3) "name"
      4) "\xe6\x9d\x8e\xe5\x9b\x9b"
2) 1) "1716474731315-0"
   2) 1) "id"
      2) "1"
      3) "name"
      4) "\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379> xdel mystream 1716474746890-0
(integer) 1
127.0.0.1:6379> xrange mystream - +
1) 1) "1716474731315-0"
   2) 1) "id"
      2) "1"
      3) "name"
      4) "\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379> xlen mystream
(integer) 1
127.0.0.1:6379> xadd mystream *  id 3 name aaa
"1716475078022-0"
127.0.0.1:6379> xadd mystream *  id 4 name bbb
"1716475087575-0"
127.0.0.1:6379> xrange mystream - +
1) 1) "1716474731315-0"
   2) 1) "id"
      2) "1"
      3) "name"
      4) "\xe5\xbc\xa0\xe4\xb8\x89"
2) 1) "1716475078022-0"
   2) 1) "id"
      2) "3"
      3) "name"
      4) "aaa"
3) 1) "1716475087575-0"
   2) 1) "id"
      2) "4"
      3) "name"
      4) "bbb"
127.0.0.1:6379> xtrim mystream maxlen 2
(integer) 1
127.0.0.1:6379> xrange mystream - +
1) 1) "1716475078022-0"
   2) 1) "id"
      2) "3"
      3) "name"
      4) "aaa"
2) 1) "1716475087575-0"
   2) 1) "id"
      2) "4"
      3) "name"
      4) "bbb"
127.0.0.1:6379> xtrim mystream minid 1716475078022-0
(integer) 0
127.0.0.1:6379> xrange mystream - +
1) 1) "1716475078022-0"
   2) 1) "id"
      2) "3"
      3) "name"
      4) "aaa"
2) 1) "1716475087575-0"
   2) 1) "id"
      2) "4"
      3) "name"
      4) "bbb"
127.0.0.1:6379> xtrim mystream minid 1716475087575-0
(integer) 1
127.0.0.1:6379> xrange mystream - +
1) 1) "1716475087575-0"
   2) 1) "id"
      2) "4"
      3) "name"
      4) "bbb"

xread的使用:

127.0.0.1:6379> xread count 2 streams mystream $
(nil)
127.0.0.1:6379> xread count 2 streams mystream 0-0
1) 1) "mystream"
   2) 1) 1) "1716475087575-0"
         2) 1) "id"
            2) "4"
            3) "name"
            4) "bbb"
      2) 1) "1716506602380-0"
         2) 1) "id"
            2) "3"
            3) "name"
            4) "aaa"
127.0.0.1:6379> xread count 4 streams mystream 0-0
1) 1) "mystream"
   2) 1) 1) "1716475087575-0"
         2) 1) "id"
            2) "4"
            3) "name"
            4) "bbb"
      2) 1) "1716506602380-0"
         2) 1) "id"
            2) "3"
            3) "name"
            4) "aaa"
      3) 1) "1716506887416-0"
         2) 1) "id"
            2) "5"
            3) "name"
            4) "ccc"
      4) 1) "1716506895152-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "ddd"

阻塞:

客户端1执行该命令。等待下一条消息

127.0.0.1:6379> xread count 1 block 0 streams mystream $

客户端2添加消息

127.0.0.1:6379> xadd mystream * id 6 name jjj
"1716507486434-0"

客户端1获得消息

127.0.0.1:6379> xread count 1 block 0 streams mystream $
1) 1) "mystream"
   2) 1) 1) "1716507486434-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "jjj"
(366.75s)

消费者相关的指令:
1.xgroup create key 消费组的名称  id   (id为$代表从尾部开始读     为0代表从头部开始读

创键消费者组:

127.0.0.1:6379> xgroup create mystream groupB 0
OK

2.XREADGROUP GROUP groupName consumerName [COUNT number] [BLOCK ms] STREAMS streamName [stream …] id [id …]消费组读取消息

读取所有的消息

127.0.0.1:6379> XREADGROUP GROUP groupA consumer1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) "1716475087575-0"
         2) 1) "id"
            2) "4"
            3) "name"
            4) "bbb"
      2) 1) "1716506602380-0"
         2) 1) "id"
            2) "3"
            3) "name"
            4) "aaa"
      3) 1) "1716506887416-0"
         2) 1) "id"
            2) "5"
            3) "name"
            4) "ccc"
      4) 1) "1716506895152-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "ddd"
      5) 1) "1716507486434-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "jjj"

注意:此时如果同一个消费组的消费者2再来读取消息,就不会读取到任何的消息,而其他的消费组可以读取消息

消费者2读取消息:

127.0.0.1:6379> XREADGROUP GROUP groupA consumer2 STREAMS mystream >
(nil)

groupB组读取消息:

127.0.0.1:6379> xreadgroup group groupB consummer1 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1716475087575-0"
         2) 1) "id"
            2) "4"
            3) "name"
            4) "bbb"
      2) 1) "1716506602380-0"
         2) 1) "id"
            2) "3"
            3) "name"
            4) "aaa"
      3) 1) "1716506887416-0"
         2) 1) "id"
            2) "5"
            3) "name"
            4) "ccc"
      4) 1) "1716506895152-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "ddd"
      5) 1) "1716507486434-0"
         2) 1) "id"
            2) "6"
            3) "name"
            4) "jjj"

但是消费组的目的是什么?

让组内的多个消费者共同分担读取消息,所以,我们通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的

让消费组C每次读取一条消息:

127.0.0.1:6379> xreadgroup group groupC consumer1 count 1 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1716475087575-0"
         2) 1) "id"
            2) "4"
            3) "name"
            4) "bbb"
127.0.0.1:6379> xreadgroup group groupC consumer2 count 1 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1716506602380-0"
         2) 1) "id"
            2) "3"
            3) "name"
            4) "aaa"

(3)xpending key group(已读但是未确认)

查看某个组已读未确认消息的清单

127.0.0.1:6379> xpending mystream groupC
1) (integer) 5
2) "1716475087575-0"   最小的id
3) "1716507486434-0"   最大的id
4) 1) 1) "consumer1"
      2) "1"
   2) 1) "consumer2"
      2) "1"
   3) 1) "consumer3"
      2) "1"
   4) 1) "consumer4"
      2) "1"
   5) 1) "consumer5"
      2) "1"

查看consumer2读了几条

127.0.0.1:6379> xpending mystream groupC - + 10 consumer2
1) 1) "1716506602380-0"
   2) "consumer2"
   3) (integer) 514126
   4) (integer) 1

4.xack key group id(哪一条消息已签收)

id为1716506602380-0的消息已签收:

127.0.0.1:6379> xack mystream groupC 1716506602380-0
(integer) 1

再查看groupC中已读未签收的信息,发现没有了consumer2:

127.0.0.1:6379> xpending mystream groupC
1) (integer) 4
2) "1716475087575-0"
3) "1716507486434-0"
4) 1) 1) "consumer1"
      2) "1"
   2) 1) "consumer3"
      2) "1"
   3) 1) "consumer4"
      2) "1"
   4) 1) "consumer5"
      2) "1"

5.xinfo stream key:打印stream/group/consumer的详细信息

127.0.0.1:6379> xinfo stream mystream
 1) "length"
 2) (integer) 5
 3) "radix-tree-keys"
 4) (integer) 1
 5) "radix-tree-nodes"
 6) (integer) 2
 7) "last-generated-id"
 8) "1716507486434-0"
 9) "max-deleted-entry-id"
10) "1716474746890-0"
11) "entries-added"
12) (integer) 8
13) "recorded-first-entry-id"
14) "1716475087575-0"
15) "groups"
16) (integer) 3
17) "first-entry"
18) 1) "1716475087575-0"
    2) 1) "id"
       2) "4"
       3) "name"
       4) "bbb"
19) "last-entry"
20) 1) "1716507486434-0"
    2) 1) "id"
       2) "6"
       3) "name"
       4) "jjj"

10.redis位域(bitfield,略)

了解即可,略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQl基础入门⑬.5

创建多表连接查询 表准备 CREATE TABLE 员工信息 (员工号 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,姓名 VARCHAR(50) NOT NULL,性别 ENUM(男, 女) NOT NULL,出生日期 DATE NOT NULL,部门 VARCHAR(50) NOT NULL,手机号码 VARCHAR(20) NOT NULL,-- 根据数据库不同&#x…

怎么做好企业短信服务呢?(文字短信XML接口示例)

企业短信服务已经成为各行各业都信赖的行业推广方式之一,并且短信行业也与时俱进的发展着,随之而来的就是市场上短信平台的数量也随之增多。那么怎么在鱼龙混杂的短信行业中选择适合自己的企业短信服务平台呢?企业短信服务平台又适用于哪些应…

合并两个有序链表和合并 K 个升序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 […

【C语言】字符串左旋(三种方法)

(方法3只给出思路参考) 问题 描述: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 分析 我们先来理解一下,什么叫“左旋”?其实是这…

html+CSS+js部分基础运用12

一、显示列表项的内容 编写javaScript代码实现用户登录时数据合法性校验功能,界面如图教材P338 第2题,效果如下图所示: 图1 显示列表项内容 二、日期的处理 实时显示当前时间及累计登录时间,如下图2所示。[提示window.setInt…

两款 IntelliJ IDEA 的 AI 编程插件

介绍两款 IntelliJ IDEA 的 AI 编程插件:通义灵码和 CodeGeeX。 通义灵码 这是由阿里推出的一个基于通义大模型的 AI 编码助手。 它提供了代码智能生成、研发智能问答等功能。通义灵码经过海量优秀开源代码数据训练,可以根据当前代码文件及跨文件的上下…

【Moveit】step或stl文件转urdf,并添加到机械臂上

【Moveit】step或stl文件转urdf,并添加到机械臂上 文章目录 【Moveit】step或stl文件转urdf,并添加到机械臂上1. 安装sw_urdf_exporter插件2. 导出urdf3. 将夹爪连接到机械臂上4. 使用moveit_setup_assistant配置功能包Reference ROS专门提供了一种机器人…

clion配置ssh隧道转发 实现远程主机功能

clion配置ssh隧道转发 clion自带的ssh配置只能配置主机和用户名的格式来实现ssh,因此如果需要通过中间设备来访问调试主机的话就无法使用了。 配置ssh隧道的方式有两种,一种是直接配置 ~/.ssh/config 配置文件,一种是使用跳板机工具。clion…

Java邮件客户端设计实现:使用JavaMail向QQ邮箱发邮件

目录 JavaMail 用JavaMail向qq邮箱发消息 ▐ 授权码的获取 JavaMail JavaMail 是一个用于发送和接收电子邮件的 Java API。它提供了一个平台无关和协议无关的框架,允许开发人员通过标准电子邮件协议(如 SMTP、POP3 和 IMAP)来创建、发送…

【TB作品】MSP430 G2553 单片机口袋板,电风扇模拟控制系统设计

功能 电风扇模拟控制系统设计 基本要求: 用LED/LCD 显示电风扇的工作状态 (1,2,3,4 四档风力), 显示风类:“自然风”、“常风”和“睡眠风”。 设计 “自然风”“常风”和“睡眠风” 三个风类键用于设置风类 设计一个“摇头”键用于控制电机摇头。 设计一个“定时”键&#x…

如何快速理解并掌握Java泛型的概念和使用方法

Java泛型(Generics)是Java SE 5引入的一种语言特性,旨在增强类型安全性和代码的重用性。泛型允许类、接口和方法操作对象的特定类型,同时在编译时进行类型检查。通过使用泛型,我们可以编写更通用、更灵活的代码&#x…

Linux用docker安装ElasticsearchSpringBoot整合ES

一. 部署Elasticsearch 1. docker查询docker容器中的es docker search elasticsearch 2. 安装(PS:查看自己的springBoot的版本号 对应的es版本安装) docker pull elasticsearch:7.6.23. 查看已安装的docker镜像 docker images4. 创建挂…

再论Web应用在医学研究中构建数据收集问卷(stremlit_survey包体验)

再论Web应用在医学研究中构建数据收集问卷(Streamlit_survey包体验) 概述 医学队列研究是临床研究的重要形式,这种研究通过收集临床诊疗过程中产生的数据而阐述疾病相关的因素。在临床数据收集过程中,Web APP体现出了一定的优势…

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for......

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for… 提示:在部署jar包到云服务器上之前,一定要在本地运行jar包,查看前端代码是否运行正常,若报错的话可以节省很多时间 方式:…

Linux命令篇(六):vi/vim专项

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝您生活愉快! 文章目录 一、什么是vim二…

弘君资本:如何看待股价波动?

在股票商场上股价的动摇无疑是投资者最为关怀的话题之一,面临股价的起伏不定投资者往往会感到迷茫和焦虑。对于怎么看待股价动摇,弘君资本下面就为我们具体介绍一下。 股价动摇是股市运转的常态,股市是国民经济的晴雨表,股票价格…

关于大模型是否开源的分析

引言 随着科技的迅速发展,大模型技术成为推动人工智能前沿的引擎,而开源与闭源之争成为这场技术风暴中的一道独特风景。特斯拉CEO马斯克的言论将开源的旗帜高高举起,宣示着技术的共享和合作的时代已经来临。然而,在数字化时代&am…

机器视觉检测--光源

一,环形光源 较为常见的LED光源之一,提供基本的照明作用。 随着光源距离产品的工作距离LWD变化而产生的亮度分布,如下图暖色表示亮;冷色表示暗。 同时该图示是针对特定一款大小的环形光源的数据(下同)。 二…

【二进制部署k8s-1.29.4】八、worker端安装kubelet和cotainerd

文章目录 简介 一.安装containerd1.1.安装containerd1.2.生成containerd配置文件并启动 二.安装kubelet并配置启动文件2.1.准备kubelet配置文件及证书2.2.安装kubelet2.3.配置启动脚步 三.将node节点加入集群注意事项 简介 本章节主要讲解安装containerd和kubelet,containerd主…

【Android】使用EventBus进行线程间通讯

EventBus 简介 EventBus:github EventBus是Android和Java的发布/订阅事件总线。 简化组件之间的通信 解耦事件发送者和接收者 在 Activities, Fragments, background threads中表现良好 避免复杂且容易出错的依赖关系和生命周期问题 Publisher使用post发出…