建设网站平台哪里最好,医院互联网网站建设,用python做音乐网站,html5模板网站5.Redis有序集合zset(sorted set)
本质就是在set的基础上#xff0c;每个val值前面加了一个score分数值。
#xff08;1#xff09;向有序集合中添加多个#xff08;或者一个#xff09;元素和其对应的分数
127.0.0.1:6379 zadd zset1 100 a 90 b 80 c 70 d 60 e
(…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 withscores1) e2) 603) d4) 705) c6) 807) b8) 909) a
10) 100
3按分值从大到小返回有序集合中指定范围内的元素。
命令ZREVRANGE key start stop [WITHCORES]
127.0.0.1:6379 zrevrange zset1 0 -1 withscores1) a2) 1003) b4) 905) c6) 807) d8) 709) 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
5zscore key member获取元素的分数
127.0.0.1:6379 zscore zset1 e
60
6zcard key获取集合中元素的数量
127.0.0.1:6379 zcard zset1
(integer) 5
7zrem 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
8zincrby key increment member增加某个元素的分数
127.0.0.1:6379 zincrby zset1 20 a
120
9zcount key min max获得指定分数范围内的元素个数
127.0.0.1:6379 zcount zset1 60 120
(integer) 4
10zmpop从键名列表中的第一个非空排序集中弹出一个或多个元素它们是成员分数对
127.0.0.1:6379 zmpop 1 zset1 min count 1
1) zset1
2) 1) 1) d2) 70
127.0.0.1:6379 zmpop 1 zset1 min count 2
1) zset1
2) 1) 1) c2) 802) 1) b2) 90
127.0.0.1:6379 zrange zset1 0 -1 withscores
1) a
2) 120
11zrank key values值作用是获得下标值
127.0.0.1:6379 zrank zset1 a
(integer) 0
12zrevrank 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)能干嘛? 用于状态统计 ,统计签到考勤打卡等。 1setbit 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的偏移量是从零开始算的2getbit key offset
127.0.0.1:6379 getbit bit1 2
(integer) 1
127.0.0.1:6379 getbit bit1 1
(integer) 1
3strlen统计字节数占用多少
127.0.0.1:6379 strlen bit1
(integer) 1
4bitcount 全部键里面含有1的有多少个
127.0.0.1:6379 bitcount bit1
(integer) 3
5bitop
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什么是uvuniquevisitor,独立访客一般理解为客户端ip需要去重考虑 比如用户搜索网站关键词的数量、统计用户每天搜索不同词条个数简介去重复统计功能的基数估计算法就是hyperloglog是一种数据集去重复后的真实个数基数统计 用于统计一个集合中不重复的元素个数就是对集合去重复后剩余元素的计算一句话 就是去重脱水后的真实数据
1pfadd 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
2pfcount key [key...]返回给定hyperloglog的基数估算值。
127.0.0.1:6379 pfcount hll01
(integer) 6
127.0.0.1:6379 pfcount hll02
(integer) 5
3pfmerge 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 获取某地经纬度的链接
1geoadd key 经度 纬度 member
添加经纬度
127.0.0.1:6379 geoadd city 116.403963 39.915119 天安门 116.403963 39.915119 故宫
(integer) 2
2zrange 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
[rootbogon 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
4geodist key member1 member2获取两地的距离
127.0.0.1:6379 geodist city 天安门 故宫 m
0.0000
5georadius 以给定的经纬度为中心 返回键包含的位置元素当中 与中心的距离不超过给定最大距离的所有位置元素
命令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-02) 1) id2) 13) name4) \xe5\xbc\xa0\xe4\xb8\x89
2) 1) 1716474746890-02) 1) id2) 23) name4) \xe6\x9d\x8e\xe5\x9b\x9b
127.0.0.1:6379 xrange mystream - count 1
1) 1) 1716474731315-02) 1) id2) 13) name4) \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-02) 1) id2) 23) name4) \xe6\x9d\x8e\xe5\x9b\x9b
2) 1) 1716474731315-02) 1) id2) 13) name4) \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-02) 1) id2) 13) name4) \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-02) 1) id2) 13) name4) \xe5\xbc\xa0\xe4\xb8\x89
2) 1) 1716475078022-02) 1) id2) 33) name4) aaa
3) 1) 1716475087575-02) 1) id2) 43) name4) bbb
127.0.0.1:6379 xtrim mystream maxlen 2
(integer) 1
127.0.0.1:6379 xrange mystream -
1) 1) 1716475078022-02) 1) id2) 33) name4) aaa
2) 1) 1716475087575-02) 1) id2) 43) name4) bbb
127.0.0.1:6379 xtrim mystream minid 1716475078022-0
(integer) 0
127.0.0.1:6379 xrange mystream -
1) 1) 1716475078022-02) 1) id2) 33) name4) aaa
2) 1) 1716475087575-02) 1) id2) 43) name4) bbb
127.0.0.1:6379 xtrim mystream minid 1716475087575-0
(integer) 1
127.0.0.1:6379 xrange mystream -
1) 1) 1716475087575-02) 1) id2) 43) name4) 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) mystream2) 1) 1) 1716475087575-02) 1) id2) 43) name4) bbb2) 1) 1716506602380-02) 1) id2) 33) name4) aaa
127.0.0.1:6379 xread count 4 streams mystream 0-0
1) 1) mystream2) 1) 1) 1716475087575-02) 1) id2) 43) name4) bbb2) 1) 1716506602380-02) 1) id2) 33) name4) aaa3) 1) 1716506887416-02) 1) id2) 53) name4) ccc4) 1) 1716506895152-02) 1) id2) 63) name4) 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) mystream2) 1) 1) 1716507486434-02) 1) id2) 63) name4) 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) mystream2) 1) 1) 1716475087575-02) 1) id2) 43) name4) bbb2) 1) 1716506602380-02) 1) id2) 33) name4) aaa3) 1) 1716506887416-02) 1) id2) 53) name4) ccc4) 1) 1716506895152-02) 1) id2) 63) name4) ddd5) 1) 1716507486434-02) 1) id2) 63) name4) 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) mystream2) 1) 1) 1716475087575-02) 1) id2) 43) name4) bbb2) 1) 1716506602380-02) 1) id2) 33) name4) aaa3) 1) 1716506887416-02) 1) id2) 53) name4) ccc4) 1) 1716506895152-02) 1) id2) 63) name4) ddd5) 1) 1716507486434-02) 1) id2) 63) name4) jjj
但是消费组的目的是什么
让组内的多个消费者共同分担读取消息所以我们通常会让每个消费者读取部分消息从而实现消息读取负载在多个消费者间是均衡分布的
让消费组C每次读取一条消息
127.0.0.1:6379 xreadgroup group groupC consumer1 count 1 streams mystream
1) 1) mystream2) 1) 1) 1716475087575-02) 1) id2) 43) name4) bbb
127.0.0.1:6379 xreadgroup group groupC consumer2 count 1 streams mystream
1) 1) mystream2) 1) 1) 1716506602380-02) 1) id2) 33) name4) aaa
3xpending key group已读但是未确认
查看某个组已读未确认消息的清单
127.0.0.1:6379 xpending mystream groupC
1) (integer) 5
2) 1716475087575-0 最小的id
3) 1716507486434-0 最大的id
4) 1) 1) consumer12) 12) 1) consumer22) 13) 1) consumer32) 14) 1) consumer42) 15) 1) consumer52) 1
查看consumer2读了几条
127.0.0.1:6379 xpending mystream groupC - 10 consumer2
1) 1) 1716506602380-02) consumer23) (integer) 5141264) (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) consumer12) 12) 1) consumer32) 13) 1) consumer42) 14) 1) consumer52) 1
5.xinfo stream key打印stream/group/consumer的详细信息
127.0.0.1:6379 xinfo stream mystream1) length2) (integer) 53) radix-tree-keys4) (integer) 15) radix-tree-nodes6) (integer) 27) last-generated-id8) 1716507486434-09) 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-02) 1) id2) 43) name4) bbb
19) last-entry
20) 1) 1716507486434-02) 1) id2) 63) name4) jjj
10.redis位域bitfield略
了解即可略