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

相关推荐
齐生14 天前
iOS 知识点 - 渲染机制、动画、卡顿小集合
笔记
JavaGuide4 天前
字节二面:Redis 能做消息队列吗?怎么实现?
redis·后端
漫霂4 天前
基于redis实现登录校验
redis·后端
程序员小崔日记4 天前
一篇文章彻底搞懂 MySQL 和 Redis:原理、区别、项目用法全解析(建议收藏)
redis·mysql·项目实战
用户962377954484 天前
VulnHub DC-1 靶机渗透测试笔记
笔记·测试
读书笔记4 天前
CentOS 7 安装 redis-6.2.6.tar.gz 详细步骤(从源码编译到启动配置)
redis
焗猪扒饭5 天前
redis stream用作消息队列极速入门
redis·后端·go
齐生15 天前
iOS 知识点 - IAP 是怎样的?
笔记
tingshuo29176 天前
D006 【模板】并查集
笔记