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
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