小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Set(集合) 无序不重复
sadd #添加
smembers #展示所有元素s
sismember#返回成员 member 是否是存储的集合 key的成员.
#scard myset
srem myset hello #移除set集合中指定元素
srandmember myset #随机抽选出一个元素
################################# 删除 spop myset #随机删除一些set集合中的元素
################################# 将一个指定的值移动到另外一个set集合中
smove myset myset2
###################################
微博,B站,共同关注(共集)
数字集合类; -差集 -交集 -并集 sdiff key1 key2 #差集 sinter key1 key2 #交集 sunion key1 key2 #并集 代码测试
Hash(哈希)
Map集合,key-map!时候这个值是一个map集合
set myhash field lemon
#添加hset
hset myhash field1 kuangshen
hget myshash filed1
hmset filed1 heelo field2 world
hmget #获取多个值
hgetall #获取全部数据
hdel myhash field1 #删除指定的key字段
################################
hlen #长度
################################
HEXISTS myhash field1 #判断哈希中的指定字段是否存在
hkeys myhash #获取所有的key
hvals myhash #获取所有的值
hincrby myhash field3
hsetnx
hsetnx myhash #如果不存在则可以设置
hash变更的数据 user name age,尤其是用户信息的保存,经常变动的信息
hash更适合对象的存储
String 更加适合字符串存储
测试代码
127.0.0.1:6379> hset myhash k1 v1
(integer) 1
127.0.0.1:6379> hget myhash k1
"v1"
127.0.0.1:6379> hmset myset k2 v2 k3 v3
OK
127.0.0.1:6379> hmget myset
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget myset k1 k2 k3
1) (nil)
2) "v2"
3) "v3"
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
127.0.0.1:6379> hset myset k2 v2 k3 v3
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
127.0.0.1:6379> hset myhash k3 v3 k3 v3
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
3) "k3"
4) "v3"
127.0.0.1:6379> hdel myhash k2
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
3) "k3"
4) "v3"
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hexists myset k1
(integer) 0
127.0.0.1:6379> hexists myhash k1
(integer) 1
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hkeys myhash
1) "k1"
2) "k3"
127.0.0.1:6379> hvals myhash
1) "v1"
2) "v3"
127.0.0.1:6379> hgetall myhash
1) "k1"
2) "v1"
3) "k3"
4) "v3"
127.0.0.1:6379> hsetnx myhash k1 1234
(integer) 0
Zset(有序集合)
在set的基础上,增加了一个值,
zadd myset 1 one
zrange myset 0 -1
##########################
排序如何实现
zadd salary 2500 xiaohong
zadd salary 50000 zhangsan
zadd salary 500 kuangshen
zrangebyscore salary -inf +inf #显示所有
zrangebyscore salary -inf +inf withscores#显示所有并且附带值
zrangebyscore salary -inf 2500 withscores#显示2500以下的
#################################
移除 zrem salary xiaohong #移除指定集合中的有序元素
zcard #获取有序集合中的个数
zcount myset 1 3 # 获取指定区间的成员数量
代码测试
127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two
(integer) 1
127.0.0.1:6379> zadd myset 3 three
(integer) 1
127.0.0.1:6379> zrangebyscore myset -inf +inf withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd salary 9999 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 8888 blue
(integer) 1
127.0.0.1:6379> zadd salary 7777 green
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "green"
2) "7777"
3) "blue"
4) "8888"
5) "xiaohong"
6) "9999"
127.0.0.1:6379> zrem salary xiaohong
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "green"
2) "blue"
127.0.0.1:6379> zcard salary
(integer) 2
127.0.0.1:6379> zcount salary 0 7777
(integer) 1
案例思路:set 排序 存储班级成绩表工资表排序
普通消息
排行榜应用实现,取Top N 集合
\