Redis底层:底层使用了intset和hashtable两种数据结构,intset我们可以理解为数组,hashtable就是普通的哈希表(key为set的值,value为null)。
使用Intset的条件:
为什么用HashTable不用HashSet:是不是因为HashTable是线程安全的?
SADD key member1 [member2]
--向集合添加一个或多个成员
例子:建一个集合叫做students,放入a,b,c,d,e 五个学生
127.0.0.1:6379> sadd students a b c d e
(integer) 5
SCARD key //获取集合的成员数
SMEMBERS key //返回集合中的所有成员 不是有序的
SISMEMBER key member //判断 member 元素是否是集合 key 的成员(开发中:验证是否存在判断)
SRANDMEMBER key [count] //返回集合中一个或多个随机数
下面用这些指令操作一下刚才的students集合
127.0.0.1:6379> scard students //查看students里面有几个元素
(integer) 5
127.0.0.1:6379> smembers students//全部显示
1) "d"
2) "c"
3) "a"
4) "b"
5) "e"
127.0.0.1:6379> sismember students a //a在不在集合里面?
(integer) 1
127.0.0.1:6379> srandmember students //返回随机元素
"a"
SREM key member1 [member2] //移除集合中一个或多个成员
SPOP key [count] //移除并返回集合中的一个随机元素
SMOVE source destination member
//将 member 元素从 source 集合移动到 destination 集合
下面是SET的高级语法,主要是跟数学里面集合操作有关,有三种 交集,并集,差集
SDIFF key1 [key2] //返回给定所有集合的差集(左侧)
SDIFFSTORE destination key1 [key2] //返回给定所有集合的差集并存储在 destination 中
例子:新建一个boys,放入a b e f,求不是男生的学生
注意,差集交换顺序结果是不一样的,想要哪个集合的,就把哪个放前面
127.0.0.1:6379> sdiff students boys
1) "d"
2) "c"
SINTER key1 [key2] //返回给定所有集合的交集(共有数据)
SINTERSTORE destination key1 [key2] //返回给定所有集合的交集并存储在 destination 中
SUNION key1 [key2] //返回所有给定集合的并集
SUNIONSTORE destination key1 [key2] //所有给定集合的并集存储在 destination 集合中
ZADD key score1 member1 [score2 member2]
//向有序集合添加一个或多个成员,或者更新已存在成员的分数
例:有一个学生,java得分88,数学得分59,C语言得分65,中文满分
127.0.0.1:6379> zadd z1 88 java 59 math 65 C 100 chinese
(integer) 4
ZCARD key //获取有序集合的成员数
ZCOUNT key min max //计算在有序集合中指定区间分数的成员数
ZRANK key member //返回有序集合中指定成员的索引
ZRANGE key start stop [WITHSCORES]
//通过索引区间返回有序集合成指定区间内的成员(低到高)
ZREVRANGE key start stop [WITHSCORES]
//返回有序集中指定区间内的成员,通过索引,分数从高到底
用刚才的集合试一下
127.0.0.1:6379> zcard z1
(integer) 4
127.0.0.1:6379> zcount z1 60 100
(integer) 3
127.0.0.1:6379> zrank z1 java
(integer) 2
127.0.0.1:6379> zrange z1 0 -1 //从低分到高分排序
1) "math"
2) "C"
3) "java"
4) "chinese"
127.0.0.1:6379> zrevrange z1 0 -1//从高分到低分排序
1) "chinese"
2) "java"
3) "C"
4) "math"
ZREM key member [member ...] //移除有序集合中的一个或多个成员
ZREMRANGEBYRANK key start stop //移除有序集合中给定的排名区间的所有成员(第一名是0)(低到高排序)
ZREMRANGEBYSCORE key min max //移除有序集合中给定的分数区间的所有成员
删除这个大家自己试一下吧
常应用于:排行榜