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

相关推荐
sulikey1 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
unicorn311 小时前
学习学习学习
学习
XGeFei2 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
星恒随风3 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
暴躁小师兄数据学院4 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
tedcloud1235 小时前
cc-switch评测:多AI Coding Agent管理工具详解
数据库·人工智能·sql·学习·自动化
土狗TuGou5 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
胡图图不糊涂^_^6 小时前
测试BUG篇
学习·bug·测试
智者知已应修善业6 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机
我是一颗柠檬6 小时前
【Java后端技术亮点】热Key探测与本地缓存二级防护:Redis热点问题的终极解决方案
java·redis·后端·缓存·中间件