企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 2.7.6 集合对象(set) 集合对象的编码(encoding)可以是`intset`、 `hashtable` 当集合对象同时满足以下两个条件时,使用intset编码,否则使用hashtable编码: - 集合对象保存的元素都是整数值 - 元素数量小于512个(可以通过`set-max-intset-entries`设置) ---- ```c redis> SADD numbers 1 2 3 (integer) 3 ``` 如果numbers键使用的是intset编码,则其值对象如下所示: ``` redisObject type: REDIS_SET encoding: REDIS_ENCODING_INTSET ptr -> intset: { encoding: INTSET_ENC_NT16, length: 3, content: { 1, 3, 5 } } ... ``` 如果numbers键使用的是hashtable编码,则其值对象如下所示: ``` redisObject type: REDIS_SET encoding: REDIS_ENCODING_HT ptr -> dict: { (stringObject: 1)-> NULL, (stringObject: 2)-> NULL, (stringObject: 3)-> NULL, } ... ``` ---- 集合命令的实现: 命令 | intset的实现 | hashtable的实现 ---- | ---- | ---- SAdd | 调用intsetAdd函数,将新元素添加到整数集合里面 | 调用dictAdd函数,以新元素为键,NULL为值,将键值对添加到字典里 SCard | 调用intsetLen函数,返回整数集合所包含的元素数量 | 调用dictSize函数,返回字典所包含的键值对数量 SIsMember | 调用intsetFind函数,返回是否能在整数集合中查找到给定元素 | 调用dictFind函数,返回是否能在字典中查找到给定元素 SRandMember | 调用intsetRandom函数,从整数集合中随机返回一个元素 | 调用dictGetRandomKey函数,从字典中随机返回一个字典的键 SPop | 调用intsetRandom函数,随机取出一个元素返回,之后删除该元素 | 调用dictGetRandomKey函数,随机取出一个字典键返回,之后删除该字典键 SRem | 调用intsetRemove函数,从整数集合中删除所有给定的元素 | 调用dictDelete函数,从字典中删除所有键为给定键的元素