redis学习笔记(五)—— set 数据类型

前言

集合类型 保存多个字符串类型的元素;

与list 列表不同,集合中 元素之间是无序的并且元素不允许重复。

redis除了支持集合内的增删查改之外,还支持多个集合取交集、并集、差集等操作。

基本命令

  • sadd

    sadd key member [member...]

将一个或多个元素添加到set中;无法添加重复的元素

返回值:本次添加成功的元素个数

  • smembers

    smembers key

获取一个 set 列表中的所有元素

  • scard

    scard key

获取一个 set 列表中的元素个数

  • srem

    srem key member [member...]

删除 set 列表中的一个或者多个元素

返回值:删除成功元素的个数

  • spop

    spop key [count]

从set 中删除并返回一个或多个元素。

set 内部元素是无序的,所以具体取出哪一个元素是未定义行为,可以当做随机的

  • srandmember

    srandmember key [count]

随机返回 set 中的一个或多个元素

  • sismember

    sismember key member

判断 set 当中是否存在元素 member

返回值:1表示存在,0表示不存在

  • sinter、sunion、sdiff

    sinter key [key...]
    sunion key [key...]
    sdiff key [key...]

sinter 对多个 set 取交集并返回

sunion 对多个 set 取并集并返回

sdiff 对多个 set 取差集并返回

  • sinterstore、sunionstore、sdiffstore

    sinterstore destination key [key...]
    sunionstore destination key [key...]
    sdiffstore destination key [key...]

sinter、sunion、sdiff 都是将结果返回;而sinterstore、sunionstore、sdiffstore则是将结果放到 destination 目标key对应的 set 当中

sinterstore、sunionstore、sdiffstore则是将结果放到 destination 目标key对应的 set 当中

外链图片转存中...(img-DOHDNcXe-1770885014525)

内部编码

Redis Set 的内部编码主要有 intset 和 hashtable 两种。当集合中全是整数且元素数量比较少时,Redis 会使用 intset(整数集合),它以连续内存存储所有元素,采用二分查找,虽然时间复杂度为 O(log n),但内存占用极低,非常适合小规模整数集合场景。

一旦集合中混入非整数元素,或者元素数量比较多,Redis 就会自动将其编码切换为 hashtable(哈希表)。hashtable 支持任意类型元素,读写都是 O(1) 级别,通用性强,但内存开销也更大。需要注意的是,这种编码转换是单向的,即使后续删到只剩少量整数,也不会退回 intset。

本篇文章到这里就结束了,感谢支持

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

相关推荐
Nontee6 小时前
MySQL 插入冲突了怎么办?两种处理方式入门笔记
数据库·笔记·mysql
浔溺6 小时前
al+大数据每日学习笔记26
笔记·学习
xx~t7 小时前
嵌入式——进程与线程1
linux·c语言·学习·嵌入式·进程与线程
老当益壮梁奶奶7 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
sel_98 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
zzm6288 小时前
《SIGIR 2018论文精读|深度学习点击序列模型:对搜索页面点击行为进行序列建模》
笔记·深度学习·推荐系统·论文精读
我命由我123458 小时前
UI 设计 7 种排列方式
xml·学习·ui·html·产品运营·产品经理·学习方法
常驻客栈9 小时前
B-深入理解计算机系统第3版之第8章:异常控制流
笔记·学习·常驻客栈·深入理解计算机系统·学习笔记‘’
lzhdim9 小时前
13、JavaScript事件循环机制 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
小杨不想秃头9 小时前
信息安全工程师考试
学习·网络安全