set
前言
set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中 key 理解为集合的名字。Redis 的 set 是 string 类型的无序集合。set 元素最大可以包含(2 的 32 次方)个元素。set 的是通过 hash table 实现的,所以添加、删除和查找的复杂度都是 O(1)。hash table 会随
着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经在 sorted set 中使用了。关于 set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现 sns中的好友推荐和 blog 的 tag 功能。
sadd、srem spop smove scard srandmember and sismember
127.0.0.1:6379> sadd myset2 hello
(integer) 1
127.0.0.1:6379> sadd myset1 wrold
(integer) 1
127.0.0.1:6379> sadd myset2 wrold
(integer) 1
127.0.0.1:6379> sadd myset2 wrold
(integer) 0
127.0.0.1:6379> smembers myset2
1) "hello"
2) "wrold"
127.0.0.1:6379> srem myset2 hello
(integer) 1
127.0.0.1:6379> smembers myset2
1) "wrold"
127.0.0.1:6379> spop myset2
"wrold"
127.0.0.1:6379> smembers myset2
(empty array)
127.0.0.1:6379> sadd myset2 one
(integer) 1
127.0.0.1:6379> sadd myset2 tow
(integer) 1
127.0.0.1:6379> sadd myset2 three
(integer) 1
127.0.0.1:6379> smembers myset2
1) "three"
2) "tow"
3) "one"
127.0.0.1:6379> sadd myset3 four
(integer) 1
127.0.0.1:6379> sadd myset3 five
(integer) 1
127.0.0.1:6379> smove myset2 myset3 one
(integer) 1
127.0.0.1:6379> smembers myset2
1) "three"
2) "tow"
127.0.0.1:6379> smembers myset3
1) "five"
2) "four"
3) "one"
127.0.0.1:6379> scard myset2
(integer) 2
127.0.0.1:6379> sismember myset2 tow
(integer) 1
127.0.0.1:6379>
sdiff sdiffstore sinter sinterstore sunion and sunionstore
127.0.0.1:6379> sdiff myset6 myset7
1) "three"
2) "one"
3) "tow"
127.0.0.1:6379> smembers myset6
1) "three"
2) "four"
3) "tow"
4) "one"
127.0.0.1:6379> smembers myset7
1) "six"
2) "five"
3) "four"
127.0.0.1:6379> sunion myset6 myset7
1) "one"
2) "tow"
3) "three"
4) "six"
5) "five"
6) "four"
127.0.0.1:6379> sinter myset6 myset7
1) "four"
127.0.0.1:6379>
zset
前言
当元素被添加到集合中时,一个元素到 score 的映射被添加到 hash table 中,所以给定一个元素获取 score 的开销是 O(1),另一个 score 到元素的映射被添加到 skip list,并按照 score 排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是 O(log(N))和 skip list 的开销一致,redis 的 skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set 最经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为 score 存储,对象的 id
当元素存储。
zadd zrem zincrby zscore zcard and zcount
127.0.0.1:6379> zadd myzset2 1 one
(integer) 1
127.0.0.1:6379> zadd myzset2 2 two
(integer) 1
127.0.0.1:6379> zadd myzset2 3 three
127.0.0.1:6379> zcount myz 3 4
(integer) 2
127.0.0.1:6379> zscore myz two
"5"
127.0.0.1:6379> zcard myz
(integer) 3
incrby myzset 1 two
"3"
ZRANk ZREVRANk ZRANGE ZREVRANGE
参考https://blog.csdn.net/chengqiuming/article/details/79184784
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129735.html