ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-04-16 07:00:05  阅读:206  来源: 互联网

标签:set hash 0.1 myset 数据类型 6379 127.0 hash1 integer


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

标签:set,hash,0.1,myset,数据类型,6379,127.0,hash1,integer
来源: https://www.cnblogs.com/softcloud/p/16151758.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有