- 集合对象的编码可以是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函数,从字典中删除所有键为给定元素的键值对 |