07 set类型操作命令介绍


1 set类型

1.1 set类型介绍

  • 存储大量的数据,在查询方面提供更高的效率
  • 能够保存大量的数据,高效的内部存储机制,便于查询
  • 与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

1.2 操作指令

基本操作(增删改查)
  1. 添加数据
sadd key member1 [member2]
  1. 获取全部数据
smembers key
  1. 随机返回指定个数元素(默认返回一个) 并将元素在集合中删除
spop key [count]
  1. 返回集合中元素的个数
scard key
  1. 删除数据
srem key member1 [member2]

eg:

localhost:6379> clear
localhost:6379> sadd ids 1 2 3 4 5
(integer) 5
localhost:6379> scard ids
(integer) 5
localhost:6379> smembers ids
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
localhost:6379> spop ids 2
1) "5"
2) "2"
localhost:6379> scard ids
(integer) 3
localhost:6379> srem ids 3  # 返回删除数据的个数
(integer) 1
localhost:6379> smembers ids
1) "1"
2) "4"
localhost:6379> srem ids 999  # 测试删除一个不存在的元素,返回值就是0
(integer) 0
  1. 判断集合中是否包含指定数据
sismember key member
  1. 随机返回指定个数数据,默认返回一个,这个操作不会删除数据(和spop的区别)
srandmember key [count]

eg:

localhost:6379> sadd ids 1 2 3 4 5
(integer) 5
localhost:6379> smembers ids
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
localhost:6379> sismember ids 3
(integer) 1
localhost:6379> sismember ids 999
(integer) 0
localhost:6379> srandmember ids 3
1) "2"
2) "5"
3) "1"
localhost:6379> scard ids  # srandmember之后数据还是5个
(integer) 5
其他操作(数据的合并)
  1. 求多个个集合的交、并、差集
sinter key1 [key2]   # 交集
sunion key1 [key2]  # 并集
sdiff key1 [key2] # 差集合

eg:

localhost:6379> sadd set1 1 2 3 4
(integer) 4
localhost:6379> sadd set2 2 4 6 8
(integer) 4
localhost:6379> sinter set1 set2
1) "2"
2) "4"
localhost:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"
6) "8"
localhost:6379> sdiff set1 set2
1) "1"
2) "3"
  1. 求多个集合的交、并、差集并存储到指定集合中
sinterstore destination key1 [key2] 
sunionstore destination key1 [key2] 
sdiffstore destination key1 [key2]

eg:

localhost:6379> sadd set1 1 2 3 4
(integer) 4
localhost:6379> sadd set2 2 4 6 8
(integer) 4
localhost:6379> sinterstore target set1 set2
(integer) 2
localhost:6379> smembers target
1) "2"
2) "4"

1.3 常用命令总结

命令说明
sadd为集合添加元素
smembers显示集合中所有元素 无序
scard返回集合中元素的个数
spop随机返回一个元素 并将元素在集合中删除
smove从一个集合中向另一个集合移动元素 必须是同一种类型
srem从集合中删除一个元素
sismember判断一个集合中是否含有这个元素
srandmember随机返回元素
sdiff去掉第一个集合中其它集合含有的相同元素
sinter求交集
sunion求和集

1.4 set 类型数据操作的注意事项

  • set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
  • set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

2 sorted_set 类型

  • 数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
  • 在set的存储结构基础上添加可排序字段(得分字段)

2.1 操作指令

基本的操作
  1. 添加数据
zadd key score1 member1 [score2 member2]  
  1. 获取数据
zrange key start stop [WITHSCORES]  # 生序
zrevrange key start stop [WITHSCORES] # 降序
  • 可选参数:withscores,是否展示数据的得分
  1. 删除数据
zrem key member [member ...]  # 可删除多个
  1. 返回集合的元素个数
zcard key
  1. 显示某一个元素的分数
zscore key member
  1. 返回数据的排序
zrank key member  # 返回这个数据的排名(升序)
zrevrank key member # 返回这个数据的排名(降序)

eg: 设计保存学生成绩

# sc 是key  90是张三的成绩 95是李四的成绩   这里的张三就是value,90就是张三这个数据的得分(score)
localhost:6379>zadd sc 90 zhangsan 95 lisi 88 chenwu 60 liuge
localhost:6379> zrange sc 0 -1  # 同样索引值-1的话,表示倒数第一个,(0,-1)就是获取全部
1) "liuge"
2) "chenwu"
3) "zhangsan"
4) "lisi"
localhost:6379> zrange sc 0 -1 withscores # withscores这个参数就会把每个数据的得分也展示出来
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
7) "lisi"
8) "95"
localhost:6379> zrem sc liuge lisi  # 删除liuge,lisi这两个数据
(integer) 2
localhost:6379> zrange sc 0 -1
1) "chenwu"
2) "zhangsan"
localhost:6379> zscore sc zhangsan # 演示张三这个数据的得分
"90"
localhost:6379> zrange sc 0 -1 withscores
1) "chenwu"
2) "88"
3) "zhangsan"
4) "90"
localhost:6379> zrank sc zhangsan  # 张三这个数据的得分排名(升序)
(integer) 1
localhost:6379> zrevrank sc zhangsan # # 张三这个数据的得分排名(倒序)
(integer) 0
条件过滤
  1. 按照条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT]   # 获取在指定得分范围(注意是个闭区间)的数据,limit可选参数,指定返回的数据量大小
zrevrangebyscore key max min [WITHSCORES] # 降序获取

eg:

localhost:6379> zadd sc 90 zhangsan 95 lisi 88 chenwu 60 liuge
(integer) 4
localhost:6379> zrange sc 0 -1 withscores
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
7) "lisi"
8) "95"
localhost:6379> zrangebyscore sc 60 90 withscores  # 获取得分在[60,90]之间的数据  ,注意是个闭区间
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
# 只获取前两个 limit后面第一个数表示从哪个索引开始,第二个数表示获取几个(和MySQL中的limit一样)
localhost:6379> zrangebyscore sc 60 90 withscores limit 0 2 
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
localhost:6379>
  1. 条件删除数据
zremrangebyrank key start stop  # 删除这个索引范围的数据
zremrangebyscore key min max   # 删除这个得分范围的数据

eg:

localhost:6379> zadd sc 90 zhangsan 95 lisi 88 chenwu 60 liuge
(integer) 4
localhost:6379> zrange sc 0 -1 withscores
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
7) "lisi"
8) "95"
localhost:6379> zremrangebyrank sc 1 3  # 删除索引在[1,3] 闭区间
(integer) 3
localhost:6379> zrange sc 0 -1 withscores
1) "liuge"
2) "60"

eg:

localhost:6379> zadd sc 90 zhangsan 95 lisi 88 chenwu 60 liuge
(integer) 4
localhost:6379> zrange sc 0 -1 withscores
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
7) "lisi"
8) "95"
localhost:6379> zremrangebyscore sc 60 90  # 删除得分在[60,90]的的数据
(integer) 3  
localhost:6379> zrange sc 0 -1 withscores
1) "lisi"
2) "95"
聚合操作
  1. 统计得分在指定范围内的数据个数
zcount key min max

eg:

localhost:6379> zadd sc 90 zhangsan 95 lisi 88 chenwu 60 liuge
(integer) 4
localhost:6379> zrange sc 0 -1 withscores
1) "liuge"
2) "60"
3) "chenwu"
4) "88"
5) "zhangsan"
6) "90"
7) "lisi"
8) "95"
localhost:6379> zcount sc 60 90  # 统计得分在[60,90]的数据个数
(integer) 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值