Redis五大数据类型之set+hash+zset


set 集合

set是无序不重复的集合 无序就无法通过下标或者序列号查询 不重复 天然有去重的效果

集合的命令都是以S开头的

添加元素 ,查询元素

127.0.0.1:6379> sadd myset "key" #set集合添加一个元素
(integer) 1
127.0.0.1:6379> sadd myset "key1"
(integer) 1
127.0.0.1:6379> sadd myset "key2"
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查询所有元素
1) "key"
2) "key1"
3) "key2"

查询判断 删除元素

127.0.0.1:6379> SISMEMBER myset key1 #判断是否是set集合元素
(integer) 1 # 是 回复1
127.0.0.1:6379> SISMEMBER myset key5
(integer) 0 #不是 回复2
127.0.0.1:6379> sadd myset "key2"
(integer) 0
127.0.0.1:6379> SCARD myset #查询元素数量 
(integer) 3
127.0.0.1:6379> SREM myset key #删除指定元素 key
(integer) 1
127.0.0.1:6379> SMEMBERS myset #返回集合mykey中的所有成员
1) "key1"
2) "key2"

返回随机元素

适用于抽奖

127.0.0.1:6379> SRANDMEMBER myset #返回集合中的一个随机元素
"key1"
127.0.0.1:6379> SRANDMEMBER myset
"key2"
127.0.0.1:6379> SRANDMEMBER myset
"key2"
127.0.0.1:6379> SRANDMEMBER myset
"key2"
127.0.0.1:6379> SRANDMEMBER myset
"key2"
127.0.0.1:6379> SRANDMEMBER myset
"key1"
127.0.0.1:6379> SRANDMEMBER myset 2 #返回集合中的两个随机元素
1) "key1"
2) "key2"

移除随机元素

127.0.0.1:6379> SMEMBERS myset #查看所有元素
1) "key4"
2) "key1"
3) "key3"
4) "key2"
5) "key5"
127.0.0.1:6379> spop myset #移除集合中的一个随机元素
"key1"
127.0.0.1:6379> spop myset
"key5"
127.0.0.1:6379> SMEMBERS myset
1) "key2"
2) "key3"
3) "key4"

移除一个元素添加到另一个set

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> sadd myset key1
(integer) 1
127.0.0.1:6379> sadd myset key2
(integer) 1
127.0.0.1:6379> sadd myset key3
(integer) 1
127.0.0.1:6379> sadd myset key4
(integer) 1
127.0.0.1:6379> sadd myset key5
(integer) 1
127.0.0.1:6379> SADD myset2 key6
(integer) 1
127.0.0.1:6379> SMEMBERS myset #返回 myset 所有元素1-5
1) "key4"
2) "key1"
3) "key3"
4) "key2"
5) "key5"
127.0.0.1:6379> SMEMBERS myset2 #返回 myset2所有元素
1) "key6"
127.0.0.1:6379> SMOVE myset myset2 key1 #删除myset中的key1放到myset2中
(integer) 1
127.0.0.1:6379> SMEMBERS myset2  #确实加进来key1
1) "key6"
2) "key1"
127.0.0.1:6379> SMEMBERS myset # 确实少了key1
1) "key3"
2) "key2"
3) "key5"
4) "key4"

数学集合

社交应用场景

将b站用户A所有关注的人放到一个set1

将b站点用户A所有的粉丝放到set2

将用户B所有关注的人放到一个set3

将用户B所有的粉丝放到set4

A与B的共同关注 set1和set3的交集

包括 共同好友 你关注的人也关注了谁等等功能的实现

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> 
127.0.0.1:6379> SADD set1 a #添加元素到set1
(integer) 1
127.0.0.1:6379> SADD set1 b
(integer) 1
127.0.0.1:6379> SADD set1 c
(integer) 1
127.0.0.1:6379> SADD set2 c#添加元素到set2
(integer) 1
127.0.0.1:6379> SADD set2 d
(integer) 1
127.0.0.1:6379> SADD set2 e
(integer) 1
127.0.0.1:6379> SMEMBERS set1 #查询set1所有元素
1) "a"
2) "c"
3) "b"
127.0.0.1:6379> SMEMBERS set2 #查询set2所有元素
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> SDIFF set1 set2 #求差集 输出set1中有 set2中没有的
1) "a"
2) "b"
127.0.0.1:6379> SINTER set1 set2 #求交集 输出set1与set2的交集
1) "c"
127.0.0.1:6379> SUNION set1 set2 #求并集   求set1+set2元素的集合
1) "c"
2) "b"
3) "e"
4) "d"
5) "a"
127.0.0.1:6379> 

Hash哈希

Hash 哈希 Map集合

从key-value 到 key #值是一个map集合 后面的value变成了key-value的集合

hash的命令都是以以H开头的命令

127.0.0.1:6379> HSET hash1 name xiaoqiang #存值
(integer) 1
127.0.0.1:6379> HGET hash1 name #取值
"xiaoqiang"
127.0.0.1:6379> HMSET hash1 name gouzi name1 gouzi #批量存值
OK
127.0.0.1:6379> HMGET hash1 name name1 #批量取值
1) "gouzi"
2) "gouzi"
127.0.0.1:6379> HGETALL hash1 #取出所有的值 key value都有
1) "name"
2) "gouzi"
3) "name1"
4) "gouzi"
127.0.0.1:6379> HDEL hash1 name #删除指定元素的值
(integer) 1
127.0.0.1:6379> HGETALL hash1 #确认已删除
1) "name1"
2) "gouzi" 
127.0.0.1:6379> HLEN hash1 #获取hash的长度
(integer) 1
127.0.0.1:6379> hmset hash1 name3 day1 name3 day2 name4 day3 批量添加元素
OK
127.0.0.1:6379> HGETALL hash1
1) "name1"
2) "gouzi"
3) "name3"
4) "day2"
5) "name4"
6) "day3"
127.0.0.1:6379> HLEN hash1 #再次查询长度
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> HEXISTS hash1 name3 #查询hash1中 元素 name3是否存在
(integer) 1
127.0.0.1:6379> HKEYS hash1 #查询值中所有的key
1) "name1"
2) "name3"
3) "name4"
127.0.0.1:6379> HVALS hash1 # 查询值中所有的value
1) "gouzi"
2) "day2"
3) "day3"
127.0.0.1:6379> HSET bash name8 8
(integer) 1
127.0.0.1:6379> HINCRBY bash name8 1 #name8value自增1
(integer) 9
127.0.0.1:6379> HINCRBY bash name8 -1 #name8 自增-1  也就是减1
(integer) 8
127.0.0.1:6379> HSETNX bash name9 heyman #如果不存在name9就创建并赋值
(integer) 1 #返回1 说明不存在
127.0.0.1:6379> HSETNX bash name9 heyman
(integer) 0 #返回0 说明存在了

zset有序集合

使用场景

需要排序的数字

成绩 身高 年龄等等

区分不同的权重值 一般朋友1 重要朋友2

网站视频排行榜 播放量 点赞量加权

微博热搜率排行

127.0.0.1:6379> ZADD zset1 1 one #指定序列添加
(integer) 1
127.0.0.1:6379> ZADD zset1 2 two 3 shree #批量指定序列添加值
(integer) 2
127.0.0.1:6379> ZRANGE zset1 0 -1 #查询zset中所有的值  按照序列排序的
1) "one"
2) "two"
3) "shree"
127.0.0.1:6379> zadd tall 175 laozhang
(integer) 1
127.0.0.1:6379> zadd tall 185  laochen
(integer) 1
127.0.0.1:6379> zadd tall 223 yaoming
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE tall -inf +inf #返回所有的值 value从小打到大排列
1) "laozhang"
2) "laochen"
3) "yaoming"
127.0.0.1:6379> ZRANGEBYSCORE tall  -inf +inf withscores #同上并输出score 值
1) "laozhang"
2) "175"
3) "laochen"
4) "185"
5) "yaoming"
6) "223"
127.0.0.1:6379> ZRANGEBYSCORE tall  -inf 175 withscores #输出value从最小到175区间
1) "laozhang"
2) "175"
127.0.0.1:6379> ZREVRANGE tall 0 -1 #返回所有的值  从大到小排列
1) "yaoming"
2) "laochen"
127.0.0.1:6379> ZREM tall laozhang #移除hash中的一个元素 laozhang
(integer) 1
127.0.0.1:6379> ZRANGE tall 0 -1 #确认移除
1) "laochen"
2) "yaoming"
127.0.0.1:6379> ZCARD tall #输出hash中元素的数量
(integer) 2
127.0.0.1:6379> ZRANGE tall 0 -1
1) "laochen"
2) "yaoming"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd zset1 1 hey #添加有序set
(integer) 1
127.0.0.1:6379> ZADD zset1 2 my 3 world#批量添加有序set
(integer) 2
127.0.0.1:6379> ZCOUNT zset1 1 3#统计[1-3]之间的元素数量
(integer) 3

本章命令集锦

set

SMEMBERS myset #查看所有元素
spop myset #移除集合中的一个随机元素
SMOVE myset myset2 key1 #删除myset中的key1放到myset2中
SDIFF set1 set2 #求差集 输出set1中有 set2中没有的
SINTER set1 set2 #求交集 输出set1与set2的交集
SUNION set1 set2 #求并集 求set1+set2元素的集合

hash

HSET hash1 name xiaoqiang #存值
HGET hash1 name #取值
HMSET hash1 name gouzi name1 gouzi #批量存值
HMGET hash1 name name1 #批量取值
HGETALL hash1 #取出所有的值 key value都有
HDEL hash1 name #删除指定元素的值
HLEN hash1 #获取hash的长度
hmset hash1 name3 day1 name3 day2 name4 day3 批量添加元素
HEXISTS hash1 name3 #查询hash1中 元素 name3是否存在
HKEYS hash1 #查询值中所有的key
HVALS hash1 # 查询值中所有的value
HINCRBY bash name8 1 #name8的value自增1
HINCRBY bash name8 -1 #name8 自增-1 也就是减1
HSETNX bash name9 heyman #如果不存在name9就创建并赋值

zset

ZADD zset1 1 one #指定序列添加
ZADD zset1 2 two 3 shree #批量指定序列添加值
ZRANGE zset1 0 -1 #查询zset中所有的值 按照序列排序的
ZRANGEBYSCORE tall -inf +inf #返回所有的值 value从小打到大排列
ZRANGEBYSCORE tall -inf +inf withscores #同上并输出score 值
ZRANGEBYSCORE tall -inf 175 withscores #输出value从最小到175区间的值
ZREVRANGE tall 0 -1 #返回所有的值 从大到小排列
ZREM tall laozhang #移除hash中的一个元素 laozhang
ZCARD tall #输出hash中元素的数量
ZADD zset1 2 my 3 world#批量添加有序set

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/tech/database/244922.html

(0)
上一篇 2022年4月18日 00:34
下一篇 2022年4月18日 00:34

相关推荐

发表回复

登录后才能评论