Redis 中 Set 数据结构详解

用法

Redis 中的 Set 是一个无序,不重复集合(里面的元素为字符串),支持常用的集合操作。

常见命令

1. 增

添加一个或多个元素到 set 中

SADD key member [ member ... ]
返回值: 添加成功的元素个数

将一个元素移到另一个 set 中

SMOVE source destination member
source(原来的 set),destination(移动到的 set),member (要移动的元素)
返回值: 1 --- 成功,0 --- 失败

2. 删

删除指定的元素

SREM key member [member ...]
返回值: 本次操作删除的元素个数。

随机删除元素

SPOP key [count](count表示要删除的个数)

返回值:返回删除的元素

3. 查

获取元素的个数

SCARD key

获取 set 中所有的元素

SMEMBERS key
返回值: 所有元素的列表。

判断当前的元素是否在集合中

SISMEMBER key member(你想要判断的成员)

返回值: 1 --- 存在, 0 --- 该元素不存在 / key不存在

4. 交集,并集,差集

获取 set 的交集中的元素

SINTER key [key ...]
返回值: 交集的元素。
SINTERSTORE destination key [key ...](把算好的交集放到指定的 destination 中)
返回值: 交集的元素个数

获取 set 的并集中的元素

SUNION key [key ...]

返回值:并集的元素。

SUNIONSTORE destination key [key ...](把算好的并集放到指定的 destination 中)
返回值: 并集 的元素个数

获取 set 的差集中的元素

SDIFF key [key ...]
返回值: 差集的元素。
SDIFFSTORE destination key [key ...](把算好的差集放到指定的 destination 中)
返回值: 差集元素的个数


内部编码

intset:当集合中的元素都是整数且数量较少时,Redis 使用 intset 结构。intset 是一个紧凑的整数数组,节省内存。

hashtable:当集合中的元素数量较多或类型多样时,Redis 会使用 hashtable 编码。hashtable 提供了快速的查找性能。


应用场景

标签系统:可以使用 Set 存储用户的标签,如兴趣爱好。通过集合运算,可以轻松实现标签交集、并集和差集的计算。

  1. 给用户添加标签

    sadd user:1:tags tag1 tag2 tag5
    sadd user:2:tags tag2 tag3 tag5

  2. 给标签添加用户

    sadd tag1:users user:1 user:3
    sadd tag2:users user:1 user:2 user:3

  3. 删除用户下的标签

    srem user:1:tags tag1 tag5

  4. 删除标签下的用户

    srem tag1:users user:1
    srem tag5:users user:1

  5. 计算用户的共同兴趣爱好

    sinter user:1:tags user:2:tags

唯一性检测:利用 Set 的无序且不重复特性,可以快速检测出数据集中的重复元素。

社交网络:在社交网络应用中,可以使用 Set 存储用户的好友列表或关注列表,并通过集合操作实现好友推荐等功能

相关推荐
时差95313 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式15 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟41 分钟前
MySQL日期类型选择建议
数据库·mysql
南宫生43 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
weixin_432702262 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
passer__jw7672 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
爱吃生蚝的于勒3 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~3 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio