Redis集合类型的常用命令小结_Redis

集合类型介绍

集合类型也是体现redis一个比较高价值的一个类型了。因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算、交集运算、并集运算。

首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同。

     ①集合类型和列表类型还是都能存储2^32-1个字符串

     ②集合类型是无序的,列表类型是有序的

     ③集合类型是唯一的,列表类型的值是不唯一的

下面我们一起来看一下语法。

1、增加删除元素命令

sadd key member [member ...]
srem key member [member ...]

sadd命令是用来向集合中增加元素的,当然根据前面的学习经验,如果集合不存在,肯定是会自动创建的。但是这里有点需要注意的是,如果元素已存在,那么他会忽略而不会覆盖。返回值是成功加入元素的数量(忽略的元素不算)。

srem命令也是一样,删除元素,如果元素存在才会删除成功,返回值是成功删除的元素的个数。

2、获得集合中的所有元素

smembers key

3、判断元素是否在集合中

sismember key member

这个判断操作的时间复杂度是O(1),无论集合中的元素有多少,这个命令始终都很很快的返回结果。存在返回1,不存在或没有这个键的时候都返回0 。

4、集合间运算

sdiff key [key ...]
sinter key [key ...]
sunion key [key ...]

这三个命令才能使Redis大显身手!

我们先准备点测试数据。

127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sadd setC 3 4 5
(integer) 3
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>

(1)下面我们来介绍sdiff命令,这个命令实际上是差集运算。

集合A与集合B的差值运算表示为A-B,代表所有属于A且不属于B的元素构成的集合。这个命令同时支持传入多个键,意思是A与B先做差集运算,然后结果再与C做差集运算。

127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setC
1) "2"
127.0.0.1:6379> sdiff setA setB setC
1) "1"

(2)接下来我们介绍sinter命令,这个命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A∩B,即所有属于A且属于B的元素构成的集合。这个命令也同时支持传入多个键,也是一样,一步一步的做交集运算。

127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
127.0.0.1:6379> sinter setA setB setC
1) "3"

(3)最后我们介绍并集运算命令sunion。集合A与集合B的并集意思是既属于A也属于B的集合。同样支持多个键传入。

127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

5、获得集合中元素的个数

scard key
127.0.0.1:6379> scard setA
(integer) 3
127.0.0.1:6379> scard setB
(integer) 3

这条命令用来获取集合中元素的个数。同样集合不存在返回0 。

6、进行集合运算并将结果存储

sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]

这里在所有的集合命令之后加了个store,很清楚就是存储的意思了。destination就是目的地,也就是我们要存储的键名。

例:

127.0.0.1:6379> sunionstore setAll setA setB setC
(integer) 5
127.0.0.1:6379> smembers setAll
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

7、随机获得集合中的元素

srandmember key [count]

 

这个命令用来随机从集合中获取一个元素,count参数用来一词获取多个元素,根据count的正负有不同的意义。

     (1)当count为正数时,获取count个不重复的元素,如果count大于所有值的个数,则返回全部元素。

     (2)负值时,获得|count|个元素,但有可能相同。

其实这个随机并不是非常随机,因为实际上redis的集合用的是散列的存储结构,有兴趣的读者可以自己深入研究一下。

127.0.0.1:6379> srandmember setA 1
1) "1"
127.0.0.1:6379> srandmember setA 2
1) "3"
2) "2"
127.0.0.1:6379> SRANDMEMBER setA 5
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SRANDMEMBER setA -2
1) "3"
2) "3"

8、从集合中弹出一个元素

spop key

之前我们也看过lpop与rpop,那是从列表中弹出,但是集合是无序的,所以spop是随机弹出。 (弹出的元素被删除,不在原来的集合中)

127.0.0.1:6379> spop setA 1
1) "2"
127.0.0.1:6379> smembers setA
1) "1"
2) "3"

下面我们来举例一个集合的具体应用。

在我们文章存储的时候有个标签tag,这个我们在关系数据库的时候都需要使用中间表关联。但是在Redis中,我们可以很方便的处理。

对每篇文章,我们使用一个post:文章ID:tags的键,类型为集合,存储一篇文章所属的tags,这样本身关系型数据库我们需要关联文章表、标签表、中间关系表三个表的复杂操作,在Redis中就很好处理了。

有时候我们还需要获取指定标签的所有文章,我们还需要增加一类的键,即tag:标签名称:posts的集合类型键,存储每个标签的文章ID集合,这样我们每次想要获取所有属于某个标签的文章列表的时候也不用像关系数据库那样关联那么多表,而是直接通过键就可以直接获得了。

而在我们想要获取比如同时属于java和redis标签的文章时,我们只需要对tag:java:poststag:redis:posts做交集运算就OK了,是不是很方便呢?

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索redis
, 常用命令
, 集合命令
集合类型
redis set集合 命令、redis 集合 命令、redis 有序集合命令、redis 常用命令、redis常用命令总结,以便于您获取更多的相关知识。

时间: 2024-09-23 18:09:01

Redis集合类型的常用命令小结_Redis的相关文章

Redis有序集合类型的常用命令小结_Redis

一.有序集合类型 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已.Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作.集合的元素依然是不能够相同的,但是分数可以相同. 下面列举有序集合和类型和列表类型的相似处:       ①两者都是有序的(废话!)       ②两者都可以获得某一范围的元素 下面列举区别:       ①列表是链表实现的,靠近两边的数据读取极快,而元素过多后

Redis字符串类型的常用命令小结_Redis

Redis字符串类型 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value最多可以容纳的数据长度是512M. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号也可以替换成其他支持glob风格通配符格式,具体规则如下:      ?:匹配一个字符      *:匹配任意个(包括0个)字符      []

Redis中散列类型的常用命令小结_Redis

Redis散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套其他的数据类型.一个散列类型键可以包含至多2^32-1个字段. 除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套.比如集合类型的每个元素只能是字符串,不能是一个集合或者散列表等. 散列类型适合存储对象:使用对象类别和ID构成建名,使用字段表示对象的属性,而字段值存储属性值.例

redis常用命令小结_Redis

1.redis-benchmark redis基准信息,redis服务器性能检测 redis-benchmark -h localhost -p 6379 -c 100 -n 100000 100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 [root@Architect redis-1.2.6]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000 ====== PING ====

javascript中对Date类型的常用操作小结_基础知识

javascript中对Date类型的常用操作小结 /** 3. * 日期时间脚本库方法列表: 4. * (1)Date.isValiDate:日期合法性验证 5. * (2)Date.isValiTime:时间合法性验证 6. * (3)Date.isValiDateTime:日期和时间合法性验证 7. * (4)Date.prototype.isLeapYear:判断是否闰年 8. * (5)Date.prototype.format:日期格式化 9. * (6)Date.stringToD

MongoDB常用命令小结_MongoDB

MongoDB常用命令: 超级用户相关: use admin #增加或修改用户密码 db.addUser(ixigua,'pwd') #查看用户列表 db.system.users.find() #用户认证 db.auth(ixigua,'pwd') #删除用户 db.removeUser('mongodb') #查看所有用户 show users #查看所有数据库 show dbs #查看所有的collection show collections #查看各collection的状态 db.p

MySQL导入导出.sql文件及常用命令小结_Mysql

在MySQL Qurey Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令: mysql> source c:\\test.sql; 另附mysql常用命令: (一) 连接MYSQL: 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入mysql安装目录下的bin目录下,例如: D:/mysql/bin,再键入命令mysql -uroot -p,回车后提示你输密码,

MySQL数据库备份和还原的常用命令小结_Mysql

备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库. mysqldump ---add-drop-table -uusername -ppassword databasename > backupfile.sql 直接将MySQL数据库压缩备份 m

MySQL数据库管理常用命令小结_Mysql

MySQL数据库的管理对数据库来说是至关重要的一个环节,要想懂得MySQL数据库的管理必须从基础做起,只有先知道了数据库管理时使用的命令,实际操作起来就容易很多.下面就是MySQL数据库管理常用命令: 安装利用RPM包安装Mysql,设置TCP 3306端口的iptables. root密码管理设置root用户的密码mysqladmin -uroot password 'password'. 修改root用户的密码mysqladmin -uroot -p password 'password'.