ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Redis 原理 - Set
[打印本页]
作者:
怀念夏天
时间:
2022-8-20 08:32
标题:
Redis 原理 - Set
Set数据结构
使用 intset
当同时满足下面两个条件时,使用 intset 存储数据
元素个数少于512个 (set-max-intset-entries: 512)
所有元素都是整数值
不满足上面的条件, 使用 hashtable
intset 图解
//intset 的编码方式
#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t))
typedef struct intset {
uint32_t encoding; // 编码方式
uint32_t length; // 集合包含的元素数量
int8_t contents[]; // 保存元素的数组
} intset;
复制代码
可以看到 intset 很简单, 基本和普通数组差不多
另外, 当使用 intset 编码时,数据是有序的。
intset 演示:
127.0.0.1:6379> SADD nums 5 8 1 9 0
(integer) 5
127.0.0.1:6379> OBJECT ENCODING nums
"intset"
127.0.0.1:6379> SMEMBERS nums
1) "0"
2) "1"
3) "5"
4) "8"
5) "9"
复制代码
hashtable 图解
请参阅我之前的文章
Redis 原理 - Hash
当使用 hashtable 编码时,数据是无序的。
hashtable 演示:
127.0.0.1:6379> SADD data a b c d e f
(integer) 6
127.0.0.1:6379> OBJECT ENCODING data
"hashtable"
127.0.0.1:6379> SMEMBERS data
1) "c"
2) "b"
3) "a"
4) "e"
5) "d"
6) "f"
复制代码
Set常用的命令
SADD key member 向set中添加一个或多个元素
SREM key member 移除set中的指定元素
SCARD key 返回set中元素的个数
SMEMBERS key 获取一个set中的所有成员
SISMEMBER key member 判断一个元素是否在set中
SINTER key1 key2 ... 取多个set的交集
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4