Redis 集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

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

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

集合的性质: 唯一性,无序性,确定性

注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素

但,因为集合的无序性,无法通过下标或范围来访问部分元素。因此想看元素,要么随机先一个,要么全选

使用场景 : 抽奖,点赞,标签,互相关注,好友推荐

sadd : 添加一个或者多个元素到集合中,成功返回新添加到集合的元素数量,已存在的会被忽略,不是集合类型返回错误

127.0.0.1:6379> sadd yhq name age sex name
(integer) 3
127.0.0.1:6379> sadd yhq id
(integer) 1

smembers : 返回集合所有元素 (sinter 单个集合)

127.0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
127.0.0.1:6379> sinter yhq
1) "id"
2) "age"
3) "sex"
4) "name"

scard : 返回集合元素数量,不存在返回0

127.0.0.1:6379> scard yhq
(integer) 4

sdiff : 返回多个集合的差集,差集结果基于前面的集合

127.0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
127.0.0.1:6379> smembers qhh
1) "id"
2) "name"
127.0.0.1:6379> sdiff yhq qhh
1) "age"
2) "sex"

sdiffstore : 将差集(差集结果基于前面的集合)存到指定集合,如果存在覆盖,返回集合元素个数

127.0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
127.0.0.1:6379> smembers qhh
1) "id"
2) "name"
127.0.0.1:6379> sdiffstore diffs yhq qhh
(integer) 2
127.0.0.1:6379> smembers diffs
1) "age"
2) "sex"

sinter : 返回指定集合的交集,不存在集合视为空集合,当有空集合时,结果也为空集(key不存在视为空,一个空全是空)

127.0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
127.0.0.1:6379> smembers qhh
1) "id"
2) "name"
127.0.0.1:6379> smembers yhqqhh
1) "age"
2) "id"
3) "name"
127.0.0.1:6379> sinter yhq qhh yhqqhh
1) "id"
2) "name"
127.0.0.1:6379> sinter yhq qhh yhqqhh a
(empty list or set)

sinterstore : 将交集存到一个集合,存在覆盖,返回集合个数

127.0.0.1:6379> sinterstore inters yhq qhh yhqqhh
(integer) 2
127.0.0.1:6379> smembers inters
1) "id"
2) "name"

sismember : 判断是否是集合元素,存在返回1,不存在或者不是返回0

127.0.0.1:6379> sismember yhq name
(integer) 1
127.0.0.1:6379> sismember yhq name1
(integer) 0

spop : 随机移除一个或多个元素,返回移除的元素,集合不存在或者空集合返回nil(srandmember返回随机元素,不对集合修改)[count 3.2+版本可以指定移除数量,count大于集合数返回整个集合]

127.0.0.1:6379> smembers yhq
1) "id"
2) "sex"
3) "name"
127.0.0.1:6379> spop yhq
"name"
127.0.0.1:6379> smembers yhq
1) "id"
2) "sex"

srandmember : 返回集合的随机元素(2.6+版本开始增加count)  如果count为正数,且小于集合基数,返回一个包含count的数组,数组中元素各不相同,如果count大于集合基数,返回整个集合,count为负数,返回一个数组,数组可能重复,长度为count绝对值  只提供key,返回一个元素,集合为空,返回nil,提供count返回一个数组,集合为空数组

127.0.0.1:6379> smembers yhq
1) "age"
2) "id"
3) "name"
4) "sex"
127.0.0.1:6379> srandmember yhq 2
1) "id"
2) "age"
127.0.0.1:6379> srandmember yhq 2
1) "id"
2) "name"
127.0.0.1:6379> srandmember yhq -3
1) "age"
2) "sex"
3) "age"

smove : 将m元素从一个a集合移到另一个b集合,如果a集合不存在m,命令不执行,返回0。否则m从a移到b,当b中以包含m时,命令仅是从a中移除m,ab不是集合类型,返回错误

127.0.0.1:6379> smembers qhh
1) "id"
2) "name"
127.0.0.1:6379> smove yhq qhh age
(integer) 1
127.0.0.1:6379> smembers qhh
1) "age"
2) "id"
3) "name"

srem : 从集合移除一个或者多个元素,不存在元素忽略,不是集合类型返回错误,集合不存在返回0,>=2.4可以移除多个元素

127.0.0.1:6379> smembers qhh
1) "age"
2) "id"
3) "sex"
4) "name"
127.0.0.1:6379> srem qhh age id
(integer) 2
127.0.0.1:6379> smembers qhh
1) "sex"
2) "name"

sunion : 返回集合并集

127.0.0.1:6379> smembers yhq
1) "age"
2) "id"
3) "name"
4) "sex"
127.0.0.1:6379> smembers qhh
1) "sex"
2) "name"
127.0.0.1:6379> smembers yhqqhh
1) "age"
2) "id"
3) "name"
127.0.0.1:6379> sunion yhq qhh yhqqhh
1) "age"
2) "id"
3) "name"
4) "sex"

sunionstore : 将集合并集存储到指定集合中,如果存在覆盖

127.0.0.1:6379> sunionstore sst yhq qhh yhqqhh
(integer) 4
127.0.0.1:6379> smembers sst
1) "age"
2) "id"
3) "name"
4) "sex"

sscan :迭代集合元素(未完全理解)

127.0.0.1:6379> sscan yhq 0 match a*
1) "0"
2) 1) "age"
2) "add"
3) "apple"

Redis之无序集合类型命令的更多相关文章

  1. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表

    python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...

  2. C#操作Redis Set 无序集合

    /// <summary> /// redis 无序集合 /// </summary> public static void Redis_Set() { RedisClient ...

  3. redis之(八)redis的有序集合类型的命令

    [一]增加元素 --->命令:ZADD key score member [score member] --->向有序集合放入一个分数为score的member元素 --->元素存在 ...

  4. Redis 常用命令学四:集合类型命令

    1.增加和删除命令 127.0.0.1:6379> SADD st a (integer) 1 127.0.0.1:6379> SADD st r f g (integer) 3 127. ...

  5. Redis 常用命令学四:有序集合类型命令

    1.增加元素,修改存在元素的分数 127.0.0.1:6379> zadd score 99 a 88 b 66 c (integer) 3 127.0.0.1:6379> ZADD sc ...

  6. StackExchange.Redis 之 Set集合 类型示例

    话不多说直接上代码: // set添加单个元素 stopwatch.Start(); "); stopwatch.Stop(); Console.WriteLine("set添加单 ...

  7. Redis之哈希类型命令

    Hash(哈希) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿 ...

  8. redis之有序集合类型(Zset)——排行榜的实现

    当数据库对排序支持的不是很好,可以利用redis有序集合排序 原文链接:http://blog.csdn.net/loophome/article/details/50373202

  9. Redis的List链表类型命令

    List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字.list类型其实就是一个每个子元素都是string类型的双向链表.我们可以通过push.po ...

随机推荐

  1. Intro to Python for Data Science Learning 5 - Packages

    Packages From:https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-3-functio ...

  2. 消息系统之Apache ActiveMQ

    一.下载运行MQ服务 1.下载ActiveMQ :http://activemq.apache.org/ 2.解压缩: 进入bin目录 win32和win64对应不同位的操作系统,选择进入 点击act ...

  3. firefox历史版本下载链接

    http://ftp.mozilla.org/pub/firefox/releases firefox版本42以上的用不了firebug,需要装版本42以下的,否则用不了

  4. 20165207 Exp3 免杀原理与实践

    Exp3 免杀原理与实践 1.实验内容 1.1.使用msf 1.1.1. 确定基准线 首先看kali的ip 直接msfvenom的结果,不加其他的东西: 使用VirusTotal得到的检测这个程序得到 ...

  5. Linux基础命令---mkfs

    mkfs 在磁盘分区上创建ext2.ext3.ext4.ms-dos.vfat文件系统,默认情况下会创建ext2.mkfs用于在设备上构建Linux文件系统,通常是硬盘分区.文件要么是设备名称(例如/ ...

  6. Linux 系统版本查询

    显示Linux版本信息 输入"cat /proc/version",说明正在运行的内核版本. 输入"cat /etc/issue", 显示的是发行版本信息. 输 ...

  7. tomcat热启动没问题, 访问项目报500解决办法

    新建maven项目 添加热启动 启动访问项目报错 报错提示 解决办法 思路:包冲突 在pom.xml中添加servlet <dependency> <groupId>javax ...

  8. hdu 3336 Count the string -KMP&dp

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  9. python创建MySQL多实例-1

    python创建MySQL多实例-1 前言 什么是多实例 多实例就是允许在同一台机器上创建另外一套不同配置文件的数据库,他们之间是相互独立的,主要有以下特点, 1> 不能同时使用一个端口 2&g ...

  10. 网络安全、Web安全、渗透测试之笔经面经总结(三)

    本篇文章涉及的知识点有如下几方面: 1.什么是WebShell? 2.什么是网络钓鱼? 3.你获取网络安全知识途径有哪些? 4.什么是CC攻击? 5.Web服务器被入侵后,怎样进行排查? 6.dll文 ...