五大基本数据类型之Set&Hash&Zset

66 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

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

\