高级程序员必须精通的redis,第四篇之——set(集合)(代码片段)

李子捌 李子捌     2022-12-03     422

关键词:

1、简介

Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。
Redis有5种基础数据结构,分别是:

  • string(字符串)
  • list(列表)
  • hash(字典)
  • set(集合)
  • zset(有序集合)

其中list、set、hash、zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则:

  • create if not exists:容器不存在则创建
  • drop if no elements:如果容器中没有元素,则立即删除容器,释放内存

本文讲述的是Redis的5种基础数据结构中的set(集合) 

2、set(集合)相关介绍

2.1 set(集合)的内部结构

Redis的set(集合)相当于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现了一个所有value为null的特殊字典。
集合中的最后一个元素被移除之后,数据结构被自动删除,内存被回收。

set结构 (1).png

2.2 set(集合)的使用场景

set(集合)由于其特殊去重复的功能,我们可以用来存储活动中中奖的用户的ID,这样可以保证一个用户不会中奖两次。

3、set(集合)相关指令

sadd -> 添加集合成员,key值集合名称,member值集合元素,元素不能重复

sadd key member [member …]

1127.0.0.1:6379> sadd name zhangsan
2(integer) 1
3127.0.0.1:6379> sadd name zhangsan        # 不能重复,重复返回0
4(integer) 0
5127.0.0.1:6379> sadd name lisi wangwu liumazi # 支持一次添加多个元素
6(integer) 3

smembers -> 查看集合中所有的元素,注意是无序的

smembers key

1127.0.0.1:6379> smembers name    # 无序输出集合中所有的元素
21) "lisi"
32) "wangwu"
43) "liumazi"
54) "zhangsan"

sismember -> 查询集合中是否包含某个元素

sismember key member

1127.0.0.1:6379> sismember name lisi  # 包含返回1
2(integer) 1
3127.0.0.1:6379> sismember name tianqi # 不包含返回0
4(integer) 0

scard -> 获取集合的长度

scard key

1127.0.0.1:6379> scard name
2(integer) 4

spop -> 弹出元素,count指弹出元素的个数

spop key [count]

1127.0.0.1:6379> spop name            # 默认弹出一个
2"wangwu"
3127.0.0.1:6379> spop name 3    
41) "lisi"
52) "zhangsan"
63) "liumazi"

redis系列第四篇之bitmap

参考技术ABitmap实际上并不是一种数据类型,而是定义在String类型上的面向位的操作。因为String是二进制安全的并且最大长度为512MB,所以String可以建立2^32个不同的位。位操作被分为两种:Bitmap最大的一个优点是当存储信息时可... 查看详情

好玩的es--第四篇之聚合查询和集群(代码片段)

好玩的ES--第四篇之聚合查询和集群聚合查询简介测试数据使用根据某个字段分组求最大值求最小值求平均值求和整合应用集群集群Cluster相关概念集群<cluster>节点<node>索引<Index>映射<Mapping>文档<Document>分片&l... 查看详情

dwr第四篇之对象传参

1.本示例在第一篇架构基础上添加代码2. 首先,在dwr.xml文件里添加对象转换器3. 编写Person实体类1packagecom.skyer.vo;23importjava.util.Arrays;45publicclassPerson{6privateStringname;7privateintage;8privateString[]hobby;910publicStr 查看详情

混合编程jni第四篇之引用和异常

系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客继续写JNI的知识点上篇基本上介绍了数据的转换以及方法签名的相关知识点,不懂的可以看看之前的文章建议循序渐进,不可冒进今天继续介绍JNI的知识点 除八... 查看详情

flink第四篇之flink的datastreamapi(算子解析)

参考技术A以上为Flink的运行模型,Flink的程序主要由三部分构成,分别为Source、Transformation、Sink。DataSource主要负责数据的读取,Transformation主要负责对属于的转换操作,Sink负责最终数据的输出。每个Flink程序都包含以下的若干流... 查看详情

混合编程jni第四篇之引用和异常(代码片段)

继续写JNI的知识点上篇基本上介绍了数据的转换以及方法签名的相关知识点,不懂的可以看看之前的文章建议循序渐进,不可冒进今天继续介绍JNI的知识点 除八种基本数据类型之外的都是引用数据类型;关于引用Java虚拟... 查看详情

linux从青铜到王者第二十四篇:linux网络基础第四篇之websocket协议(代码片段)

系列文章目录文章目录系列文章目录前言一、WebSocket简介二、WebSocket产生背景三、WebSocket实现原理四、WebSocket协议举例五、WebSocket使用1.WebSocket介绍2.WebSocketAPI3.WebSocket事件1.open2.Message3.Error4.Close4.WebSocket方法1.send()2.close()5.WebSocket... 查看详情

好玩的es--第四篇之聚合查询和集群(代码片段)

好玩的ES--第四篇之聚合查询和集群聚合查询简介测试数据使用根据某个字段分组求最大值求最小值求平均值求和整合应用集群集群Cluster相关概念集群<cluster>节点<node>索引<Index>映射<Mapping>文档<Document>分片&l... 查看详情

好玩的es--第四篇之聚合查询和集群(代码片段)

好玩的ES--第四篇之聚合查询和集群聚合查询简介测试数据使用根据某个字段分组求最大值求最小值求平均值求和整合应用集群集群Cluster相关概念集群<cluster>节点<node>索引<Index>映射<Mapping>文档<Document>分片&l... 查看详情

spring第四篇

在spring第三篇中介绍了bean元素属性在第四篇中介绍spring注入的方式 1set方法注入  建立一个User类创建私有的属性set get方法 重写toString方法代码如下:packagebean;publicclassUser{ privateStringname; privateintage; publicStringgetN... 查看详情

redis第四篇——缓存

这一篇和Redis本身关系不大,而是我们在日常将Redis作为缓存使用时会遇到的几个问题缓存穿透关键点:访问一个不存在的key。当请求一个不存在的key时,缓存就没用了,这样每次请求都直接打到我们后台的DB解决... 查看详情

jdk11|第四篇:增强api(代码片段)

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/O0xntC-JfeSBk-9x2QfwnA一、简介JDK9~11在语言语法方面有一个小改动,增加了相当数量的新API,这一节讲解下JDK1.8之后新增的一些API。二、增强API1.集合的增强api自Java9开始,Jd... 查看详情

第四篇javascript

一、正则表达式提示:此专题需要多轮复习反复的加深和理解正则表达式的两种用法:1)regexp.xxx(string);2)string.yyy(regexp);验证用户输入的手机号格式是否合法varregexp=/^1[3-8]d{9}$/;varinput="15012345678";console.log(regexp.test(input))正则表达式... 查看详情

深入理解ajax系列第四篇

前面的话  现代Web应用中频繁使用的一项功能就是表单数据的序列化,XMLHttpRequest2级为此定义了FormData类型。FormData为序列化表单以及创建与表单格式相同的数据提供了便利。本文将先介绍表单编码,然后过渡到表单序列化,... 查看详情

eclipse插件开发学习笔记pdf第一篇到第四篇免分下载开发基础核心技术高级进阶综合实例

<<Eclipse插件开发 学习笔记>>,本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识。包含SWT控件的使用、界面布局、事件处理等内容;第二... 查看详情

第四篇:文件处理(代码片段)

一、文件操作介绍计算机系统分为:计算机硬件,曹祖系统,应用程序三部分。我们用Python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是... 查看详情

音视频大合集第四篇;走近音视频(代码片段)

...,还有一部分面试内容就要完结了。10.19-24音视频中高级52部+面试10.25-26高级Android组件化强化实战(一二)10.27-11.3高级Android组件化强化实战(大厂架构演化20章)中间所有的 查看详情

redis第四篇——缓存

这一篇和Redis本身关系不大,而是我们在日常将Redis作为缓存使用时会遇到的几个问题缓存穿透关键点:访问一个不存在的key。当请求一个不存在的key时,缓存就没用了,这样每次请求都直接打到我们后台的DB解决... 查看详情