Redis 中集合是通过哈希表实现的,其实就是一个值为null的hashmap,所以添加,删除,查找的复杂度都是 O(1),也可以通过计算hash来排重和判断一个数据是否在集合中。
相关常用命令 SADD KEY member1 member2 //向集合中添加一个或多个成员 SPOP KEY //移除并返回集合中的一个随机元素 SRem KEY member1 member2 //移除集合中一个或多个成员 SInter key1 key2 //返回给定集合的交集 SUnion key1 key2 //返回给定集合的并集 SDiff key1 key2 //返回给定集合的差集 Smembers Key //返回集合中所有member Sismember Key member //判断member是否在集合中 应用场景需要去重情景下的列表,也可以利用命令Sismember 判断member是否在集合中。
需要对多个集合进行交集,差集,并集操作的时候,比如可以求出共同关注,共同喜爱之类的功能。
Sorted SetRedis sorted set和Set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
Redis sorted set 内部使用了ziplist和SkipList两种实现,当同时满足元素数量小于128个和所有member的长度都小于64个字节的时候会采用ziplist,如果不满足则采用SkipList的编码方式。当然可以通过Redis配置zset-max-ziplist-entries 和 zset-max-ziplist-value来修改这两个条件。
关于ziplist和skiplist的介绍太多了,感兴趣的可以自行百度一下。 相关常用命令 ZAdd Key score1 member1 score2 member2 //向一个集合添加成员,如果成员存在就更新分数 ZCount Key min max //获取指定分数区号的成员数量,包括min和max ZRANGE Key start stop [WITHSCORES]//获取指定下标范围的有序成员列表 按照分数排序 ZREVRANGE Key start stop [WITHSCORES]//获取指定下标范围的有序成员列表 按照分数倒序