百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 常用数据类型之 set(集合)(redis set和list)

mhr18 2024-10-28 16:22 19 浏览 0 评论

Set 集合特性


Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,在集合中不能出现重复的数据,这点和 Java 中是一致的。


Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。


集合中最大的成员数为 - 1 (4294967295, 每个集合可存储40多亿个成员)。


Set 常用命令

set 数据类型的命令都是以 “s” 开头


操作

命令

例子

说明

添加

sadd

sadd key v1 v2 v3


删除指定元素

srem

srem key v1 v2

可以同时删除多个元素

随机删除元素

spop

spop key count

随机删除指定的元素(count 值可以为 0, 0 表示删除其中一个)

查看所有元素

smembers

smemberes key


判断元素是否存在

sismember

sismember key v1

如果返回1,就表示存在;如果返回0,就表示不存在

2个key的差集

sdiff

sdiff key1 key2

这个与位置关系。这是将 key1 中的每一项元素都与 key2 进行比较,在 key2 中不存在的就会被返回出来。

2个key的交集

sinter

sinter key1 key2

返回出在 key1 与 key2 中都存在的部分元素

2个key的并集

sunion

sunion key1 key2

将 key1 与 key2 合并,返回去除重复的部分元素

返回集合中的数量

scard

scard key1

返回 key1 的数量,即:集合的size

返回随机成员

srandmember

srandmember key1

随机返回一个成员

移动指定的值到另一个集合中

smove

smove key1 key2 v1

将 key1 中的成员 v1 移动到 key2 中,如果 key2 不存在,就会自动创建

将两个集合差集放入到一个新的集合中

sdiffstore

sdiffstore m1 m2 m3

把 m2 和 m3 的差集放进 m1

将两个集合交集放入到一个新的集合中

sinterstore

sinterstore m1 m2 m3

把 m2 和 m3 的交集放进 m1

将两个集合并集放入到一个新的集合中

sunionstore

sunionstore m1 m2 m3

把 m2 和 m3 的并集放进 m1


详细操作


基础操作(sadd、srem、smembers、sismember、scard)


127.0.0.1:6379> sadd myset member1                # 在 set 集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset member2 member3        # 继续在 set 集合中添加元素
(integer) 2
127.0.0.1:6379> smembers myset                    # 查看 set 集合中的元素
1) "member1"
2) "member3"
3) "member2"
127.0.0.1:6379> sismember myset member1           # 判断 set 集合中的元素是否存在
(integer) 1
127.0.0.1:6379> sismember myset member4
(integer) 0
127.0.0.1:6379> srem myset member1                # 删除 set 集合中的某一个元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "member3"
2) "member2"
127.0.0.1:6379> scard myset                       # 查看 set 集合的数量
(integer) 2
127.0.0.1:6379>



抽取随机成员(srandmember)


突然发现,这个命令可以用来做抽奖功能,将人员名称导入到 set 集合中,然后每次抽取一个成员出来,抽取出来了之后就移除这个成员,下次继续抽取。


127.0.0.1:6379> sadd nameList Tim Tom Tonny Pony Jack Jim Nike       # 添加成员变量
(integer) 7
127.0.0.1:6379> scard nameList
(integer) 7
127.0.0.1:6379> smembers nameList
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Jim"
5) "Nike"
6) "Pony"
7) "Jack"
127.0.0.1:6379> srandmember nameList                                 # 随机返回一个成员
"Tom"
127.0.0.1:6379> srandmember nameList
"Tim"
127.0.0.1:6379> srandmember nameList 3                               # 随机返回三个成员
1) "Jim"
2) "Jack"
3) "Nike"
127.0.0.1:6379> srandmember nameList 4                               # 随机返回四个成员
1) "Tonny"
2) "Jack"
3) "Pony"
4) "Nike"
127.0.0.1:6379> srandmember nameList 3                               # 验证随机返回三个成员
1) "Tom"
2) "Jack"
3) "Nike"
127.0.0.1:6379> srandmember nameList 3
1) "Tonny"
2) "Jim"
3) "Nike"
127.0.0.1:6379>



随机删除元素(spop)


127.0.0.1:6379> smembers nameList            # 检查成员
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Jim"
5) "Nike"
6) "Pony"
7) "Jack"
127.0.0.1:6379> spop nameList                # 随机删除其中一个元素
"Jim"
127.0.0.1:6379> smembers nameList            # 查看删除之后的元素
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Nike"
5) "Pony"
6) "Jack"
127.0.0.1:6379> spop nameList 3              # 随机删除 3 个元素
1) "Pony"
2) "Tom"
3) "Tim"
127.0.0.1:6379> smembers nameList
1) "Tonny"
2) "Nike"
3) "Jack"
127.0.0.1:6379>



将指定的值移动到另外一个 set 集合(smove)


127.0.0.1:6379> smembers nameList                    # 查看成员
1) "Tonny"
2) "Nike"
3) "Jack"
127.0.0.1:6379> smove nameList nameListBak Tonny     # 将 nameList 中的指定元素移到到 nameListBak  中 
(integer) 1
127.0.0.1:6379> smembers nameList                    # 查看 nameList 成员
1) "Nike"
2) "Jack"
127.0.0.1:6379> smembers nameListBak                 # 查看 nameListBak 成员
1) "Tonny"
127.0.0.1:6379>



差集、交集与并集操作(sdiff、sinter、sunion)


127.0.0.1:6379> sadd key1 a b c d e            # 添加 key1 
(integer) 5
127.0.0.1:6379> sadd key2 a c e                # 添加 key2
(integer) 3
127.0.0.1:6379> sdiff key1 key2                # key1 与 key2 的差集
1) "b"
2) "d"
127.0.0.1:6379> sinter key1 key2               # key1 与 key2 的交集
1) "e"
2) "c"
3) "a"
127.0.0.1:6379> sunion key1 key2               # key1 与 key2 的并集
1) "b"
2) "a"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379>

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: