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"
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 哈希 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 说明存在了
使用场景
需要排序的数字
成绩 身高 年龄等等
区分不同的权重值 一般朋友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
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元素的集合
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就创建并赋值
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