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. linux脚本-判断进程是否存在,从而可以做预警处理..

    count=`ps -ef | grep Seeyon | grep -v "grep" | wc -l` echo $count if [ $count -gt 0 ]; the ...

  2. Spring整合ActiveMQ:spring+JMS+ActiveMQ+Tomcat

    一.目录结构 相关jar包 二.关键配置activmq.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  3. python 冒泡排序的总结

    冒泡排序: 思路: 3 5 1 6 2 第一次:找到这些书中最大的一个,并把它放到最后 3.5找到大的数放到第二个位置1.5 5.1找到大的数放到第三个位置1.5.1 5.6找到大的数放到第四个位置 ...

  4. JS方法的使用

    $("#yingxiang_id li").each(function () { if ($(this).find(".div-relative").attr( ...

  5. cojs DAG计数问题1-4 题解报告

    最近突然有很多人来问我这些题目怎么做OwO 然而并不是我出的,结论我也不是很懂 研究了一下觉得非常的一颗赛艇,于是就打算写这样一篇题解 DAG 1 我们考虑DAG的性质,枚举出度为0的点 设出度为0的 ...

  6. mysql 触发器 trigger用法 three (稍微复杂的)

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下 ...

  7. python条件判断if···else、循环while和for

    1.if···else条件判断基本语法 if 条件: 执行语句 elif 条件 : 执行语句 …… else : 执行语句 var=input("请输入表示会员级别的数字(1-5):&quo ...

  8. Java 实现后缀xls文件读取

    Java 实现后缀xls文件读取 一.开发环境 poi采用的3.9版本 + JDK1.6 + Myeclipse 二,JAR包 三.实现代码 实体类:UserRoleBean package nc.x ...

  9. 实现windows命令提示符的tab补全

    1:使用win+r打开 运行 控制台 2:输入 regedit 打开注册表 3:进入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\C ...

  10. msf辅助模块的应用——20145301

    msf辅助模块的应用 实验步骤 创建msf所需的数据库 service postgresql start msfdb start 开启msf,输入命令 use auxiliary/scanner/di ...