Skip to content

Latest commit

 

History

History
22 lines (20 loc) · 2.39 KB

File metadata and controls

22 lines (20 loc) · 2.39 KB

REDIS5 集合对象

集合对象的构成

  • 集合对象的编码可以是intset或者hashtable
  • intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面
  • hashtable 编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值则全部被设置为NULL

编码的转换

  • 当集合对象可以同时满足以下两个条件,对象使用intset编码
    • 集合对象保存的所有元素都是整数值
    • 集合对象保存的元素数量不超过512个
  • 不能满足这两个条件的集合对象需要使用hashtable编码

集合命令的实现

命令 intset编码的实现方法 hashtable编码实现方式
SADD 调用intsetAdd函数 调用dictAdd,以新元素为键,NULL为值,将键值对添加到字典里面
SCARD 调用intsetLen函数,返回整数集合所包含的元素数量,这个数量就是集合对象所包含的元素数量 调用dictSize函数,返回字典所包含的键值对数量,这个数量就是集合对象所包含的元素数量
SISMEMBER 调用intsetFind函数,在整数集合中查找给定的元素,如果找到了说明元素存在于集合,没找到说明元素不存在于集合 调用dictFind函数,在字典的键中查找给定元素,如果找到了说明元素存在于集合,没找到则说明元素不存在于集合
SMEMBERS 遍历整个整数集合,使用intsetGet函数返回集合元素 遍历整个字典,使用dictGetKey函数返回字典的键作为集合元素
SRANDMEMBER 调用intsetRandom函数,从整数集合中随机返回一个元素 调用dictGetRandomKey函数,从字典中随机返回一个字典键
SPOP 调用intsetRandom函数,从整数集合中随机取出一个元素,再将这个随机元素返回给客户以后,调用intsetRemove函数,将随机元素从整数集合中删除掉 调用dictGetRandomKey函数,从字典中随机取出一个字典键,再将这个随机字典键的值返回给客户之,调用dictDelete函数,从字典中删除随机字典键所对应的键值对
SREM 调用intsetRemove函数,从整数集合中删除所有给定的元素 调用dictDelete函数,从字典中删除所有键为给定元素的键值对