redis的set类型!!!!
一、概述
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
二、相关命令
1、增加元素
命令原型:SADD key member [member ...]
时间复杂度:O(N)
命令描述:时间复杂度中的N表示操作的成员数量。如果在插入的过程用,参数中有的成员在Set中已经存在,该成员将被忽略,而其它成员仍将会被正常插入。如果执行该命令之前,该Key并不存在,该命令将会创建一个新的Set,此后再将参数中的成员陆续插入。如果该Key的Value不是Set类型,该命令将返回相关的错误信息。
返回值:本次操作实际插入的成员数量。
2、获得集合中元素个数
命令原型:SCARD key
时间复杂度:O(1)
命令描述:获取Set中成员的数量。
返回值:返回Set中成员的数量,如果该Key并不存在,返回0。
3、判断元素是否在集合中
命令原型:SISMEMBER key member
时间复杂度:O(1)
命令描述:判断参数中指定成员是否已经存在于与Key相关联的Set集合中。
返回值:1表示已经存在,0表示不存在,或该Key本身并不存在。
4、获得集合中的所有元素
命令原型:SMEMBERS key
时间复杂度:O(N)
命令描述:时间复杂度中的N表示Set中已经存在的成员数量。获取与该Key关联的Set中所有的成员。
返回值:返回Set中所有的成员。
5、从集合中弹出一个元素
命令原型:SPOP key
时间复杂度:O(1)
命令描述:随机的移除并返回Set中的某一成员。 由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的头部或者尾部。
返回值:返回移除的成员,如果该Key并不存在,则返回nil。
6、删除元素
命令原型:SREM key member [member ...]
时间复杂度:O(N)
命令描述:时间复杂度中的N表示被删除的成员数量。从与Key关联的Set中删除参数中指定的成员,不存在的参数成员将被忽略,如果该Key并不存在,将视为空Set处理。
返回值:从Set中实际移除的成员数量,如果没有则返回0。
7、随机获得集合中的元素
命令原型:SRANDMEMBER key [count]
时间复杂度:O(1)
命令描述:和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。还可以传递count参数来一次随机获得多个元素,根据count的正负不同,具体表现也不同。当count 为正数时,SRANDMEMBER 会随机从集合里获得count个不重复的元素。如果count的值大于集合中的元素个数,则SRANDMEMBER 会返回集合中的全部元素。当count为负数时,SRANDMEMBER 会随机从集合里获得|count|个的元素,这些元素有可能相同。
返回值:返回随机位置的成员,如果Key不存在则返回nil。
8、将元素从一个集合转到另一个集合
命令原型:SMOVE source destination member
时间复杂度:O(1)
命令描述:原子性的将参数中的成员从source键移入到destination键所关联的Set中。因此在某一时刻,该成员或者出现在source中,或者出现在destination中。如果该成员在source中并不存在,该命令将不会再执行任何操作并返回0,否则,该成员将从source移入到destination。如果此时该成员已经在destination中存在,那么该命令仅是将该成员从source中移出。如果和Key关联的Value不是Set,将返回相关的错误信息。
返回值:1表示正常移动,0表示source中并不包含参数成员。
9、集合间差集运算
命令原型:SDIFF key [key ...]
时间复杂度:O(N)
命令描述:时间复杂度中的N表示所有Sets中成员的总数量。返回参数中第一个Key所关联的Set和其后所有Keys所关联的Sets中成员的差异。如果Key不存在,则视为空Set。
返回值:差异结果成员的集合。
10、集合间差集运算并将结果存储
命令原型:SDIFFSTORE destination key [key ...]
时间复杂度:O(N)
命令描述:该命令和SDIFF命令在功能上完全相同,两者之间唯一的差别是SDIFF返回差异的结果成员,而该命令将差异成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。
返回值:返回差异成员的数量。
11、集合间交集运算
命令原型:SINTER key [key ...]
时间复杂度:O(N*M)
命令描述:时间复杂度中的N表示最小Set中元素的数量,M则表示参数中Sets的数量。该命令将返回参数中所有Keys关联的Sets中成员的交集。因此如果参数中任何一个Key关联的Set为空,或某一Key不存在,那么该命令的结果将为空集。
返回值:交集结果成员的集合。
12、集合间交集运算并将结果存储
命令原型:SINTERSTORE destination key [key ...]
时间复杂度:O(N*M)
命令描述:命令和SINTER命令在功能上完全相同,两者之间唯一的差别是SINTER返回交集的结果成员,而该命令将交集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。
返回值:返回交集成员的数量。
13、集合间并集运算
命令原型:SUNION key [key ...]
时间复杂度:O(N)
命令描述:时间复杂度中的N表示所有Sets中成员的总数量。该命令将返回参数中所有Keys关联的Sets中成员的并集。
返回值:并集结果成员的集合。
14、集合间并集运算并将结果存储
命令原型:SUNIONSTORE destination key [key ...]
时间复杂度:O(N)
命令描述:该命令和SUNION命令在功能上完全相同,两者之间唯一的差别是SUNION返回并集的结果成员,而该命令将并集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。
返回值:返回并集成员的数量。
转载至 https://www.cnblogs.com/xiaoxi/p/6950508.html
redis的set类型!!!!的更多相关文章
- 深入浅出Redis04使用Redis数据库(lists类型)
一 lists类型及操作 List是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字. Redis的list类型其实就是一个每个子元素都是sring类 ...
- 【redis】03list类型
list类型 redis的list类型是一个链表结构,他的主要功能是push.pop.获取一个范围的所有值等等一些操作, 咱们push什么意思,push是不是相当于咱们php里面的array_push ...
- redis的lists类型
List是一个链表结构 , 主要功能是push . pop .获取一个范围的所有值等等 , 操作中key理解为链表的名字 . redis 的 list类型其实就是一个每个子元素都是string类型的双 ...
- redis的set类型
1.简单描述 redis的set类型是string类型数值的无序集合.set元素最大可以包含2的32次方减1个元素.由于set类型是通过hash table实现(旧版本是这样,新版本不确定是不是改用了 ...
- redis的list类型
1.简单介绍 redis的list类型其实就是一个每个元素都是string类型的双向链表.所以lpush.rpush.lpop和rpop命令的时间复杂度是O(1),list会记录链表的长度,所以lle ...
- redis数据类型-字符串类型
Redis数据类型 字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.你可以用其存储用户的邮箱.JSON化的对象甚至是一张图片.一个字符串类型键允许存储的 ...
- 使用Redis数据库(String类型)
一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set 设置Key对应的值为String 类型的value. 例子:向 Redis数据库中插入一条数据类型为S ...
- 第二百九十七节,python操作redis缓存-List类型,可以理解为列表
python操作redis缓存-List类型,可以理解为列表,是可以有重复元素的列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name ...
- 第二百九十五节,python操作redis缓存-字符串类型
python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...
- [redis] redis 对string类型数据操作
package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.j ...
随机推荐
- 自定义ListView android
定义一个实体类,作为ListView的适配器的适配类型.其中name为水果名称.imageId为水果的图片(图片资源可以随便弄几个占用) public class Fruit { private St ...
- 分享一下在aspx页面弹框的设置代码
public static class MessageBox { /// <summary> /// 显示消息提示对话框 /// </summary> /// <para ...
- python笔记:#007#变量
变量的基本使用 程序就是用来处理数据的,而变量就是用来存储数据的 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 ...
- 关于C#中程序功能实现,对代码选择的思考
body { background-color: rgb(60,60,60) } 接触C#语言只有短短几天时间,想要写出什么高大上的深入性研究文章,估计也是满篇的猜想和一些没有逻辑的推断.截至目前而言 ...
- jQuery事件处理了解一下
>>> JQuery 事件处理 一.事件绑定方式 1.事件绑定的快捷方式: 缺点:绑定的事件,无法取消 $("button:eq(0)").dblclick(fu ...
- AbstractQueuedSynchronizer原理及代码分析
一.AQS简介 AbstractQueuedSynchronizer(AQS)是java.util.concurrent并发包下最基本的同步器,其它同步器实现,如ReentrantLock类,Reen ...
- Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
我们已经在前面几章介绍了低分辨率定时器和高精度定时器的实现原理,内核为了方便其它子系统,在时间子系统中提供了一些用于延时或调度的API,例如msleep,hrtimer_nanosleep等等,这些A ...
- 数据结构 之 并查集(Disjoint Set)
一.并查集的概念: 首先,为了引出并查集,先介绍几个概念: 1.等价关系(Equivalent Relation) 自反性.对称性.传递性. 如果a和b存在等价关系,记 ...
- springMVC引入Validation详解
本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力.特别提及:非基本类型属性的valid,GET方法的处理,validation错误信息的统一re ...
- Idea的一些调试技巧
程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上.甚至说不是在调试代码,就是即将调试代码. :) 今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些 ...