Redis的Hash、Set和Zset基础命令

set(集合)

set的值是不能重复,且无序的

#############################################################
127.0.0.1:6379> sadd myset a   # 向myset集合添加 a
(integer) 1
127.0.0.1:6379> sadd myset c
(integer) 1
127.0.0.1:6379> sadd myset e
(integer) 1
127.0.0.1:6379> smembers myset   # 查看myset集合中所有值
1) "e"
2) "c"
3) "a"
127.0.0.1:6379> sismember myset a  # 判断myset集合中是否存在a
(integer) 1
127.0.0.1:6379> sismember myset b
(integer) 0
127.0.0.1:6379> scard myset  # 获取myset集合中元素个数
(integer) 3
127.0.0.1:6379> srem myset a  # 指定移除myset集合中的 a
(integer) 1
127.0.0.1:6379> smembers myset
1) "e"
2) "c"

#############################################################
127.0.0.1:6379> flushdb  # 清理数据库
OK
127.0.0.1:6379> sadd set2 1  
(integer) 1
127.0.0.1:6379> sadd set2 2
(integer) 1
127.0.0.1:6379> sadd set2 3
(integer) 1
127.0.0.1:6379> sadd set2 4
(integer) 1
127.0.0.1:6379> sadd set2 5
(integer) 1
127.0.0.1:6379> sadd set2 6  # 向set2集合中添加 1~6
(integer) 1
127.0.0.1:6379> smembers set2  # 查看set集合所有元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6" 
127.0.0.1:6379> srandmember set2  # 随机查看set集合某个元素
"2"
127.0.0.1:6379> srandmember set2 2  # 随机查看set集合 2 个元素
1) "6"
2) "5"
127.0.0.1:6379> spop set2  # 随机弹出set集合某个元素
"6"
127.0.0.1:6379> spop set2  # 随机弹出set集合某个元素
"3"

#############################################################

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd A 1
(integer) 1
127.0.0.1:6379> sadd A 2
(integer) 1
127.0.0.1:6379> sadd A 3  # 向A集合中放入1,2,3
(integer) 1
127.0.0.1:6379> sadd B 2
(integer) 1
127.0.0.1:6379> sadd B 3
(integer) 1
127.0.0.1:6379> sadd B 4  # 向B集合中放入2,3,4
(integer) 1
127.0.0.1:6379> smembers A  # 查看A集合所有元素
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers B  # 查看B集合所有元素
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sdiff A B   # A、B集合的差集
1) "1"
127.0.0.1:6379> sinter A B   # A、B集合的交集
1) "2"
2) "3"
127.0.0.1:6379> sunion A B   # A、B集合的并集
1) "1"
2) "2"
3) "3"
4) "4"



Hash(哈希)

类似Map集合,结构为 key-map!本质和String类型没区别,还是key-value,只不过value可以为map集合

#############################################################
127.0.0.1:6379> hset myhash name jh   # set一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash name  # 获取具体字段的值
"jh"
127.0.0.1:6379> hset myhash age 10 height 175  # 设置多个key-value,hmset已经过世直接hset就行
(integer) 2
127.0.0.1:6379> hmget myhash  name age  # 获取多个具体字段的值
1) "jh"
2) "10"
127.0.0.1:6379> hkeys myhash   # 只获取所有key
1) "name"
2) "age"
3) "height"
127.0.0.1:6379> hvals myhash   # 只获取所有value
1) "jh"
2) "10"
3) "175"
127.0.0.1:6379> hgetall myhash  # 获取全部数据(包括key和value)
1) "name"
2) "jh"
3) "age"
4) "10"
5) "height"
6) "175"
127.0.0.1:6379> hlen myhash   # 获取hash表的字段(key)数量
(integer) 3
127.0.0.1:6379> hexists myhash name  # 获取hash表是否存在字段name,存在1,不存在0
(integer) 1
127.0.0.1:6379> hexists myhash test  # 获取hash表是否存在字段test
(integer) 0
127.0.0.1:6379> hsetnx myhash name spring  # 因为hash表中已存在字段name,再设置新值会失败
(integer) 0
127.0.0.1:6379> hget myhash name
"jh"
127.0.0.1:6379> hsetnx myhash test  spring  # 因为hash表中不存在字段test,可以设置值为spring
(integer) 1
127.0.0.1:6379> hget myhash test
"spring"
127.0.0.1:6379> hincrby myhash age 8   # 给具体字段age增加 8 
(integer) 18


Zset(有序集合)

#############################################################################
127.0.0.1:6379> zadd myset 1 one  # 向集合中增加一个 值序号 值
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three  # 向集合中增加多个 值序号 值
(integer) 2
127.0.0.1:6379> zrange myset 0 -1  # 正序(从小到大)查看集合所有元素
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zadd myset 6 six
(integer) 1
127.0.0.1:6379> zrevrange myset 0 -1  # 逆序(从大到小)查看集合所有元素
1) "six"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> zrange myset 0 1  # 根据下标查看集合指定元素
1) "one"
2) "two"
127.0.0.1:6379> zcount myset 1 3  # 查看[1,3]区间的集合元素个数
(integer) 3
127.0.0.1:6379> zcount myset 1 6   # 查看[1,6]区间的集合元素个数
(integer) 4
127.0.0.1:6379> zrangebyscore myset -inf +inf withscores   # 显示负无穷到正无穷所有元素并附带 值序
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "six"
8) "6"
127.0.0.1:6379> zrangebyscore myset -inf 2  withscores  # 显示负无穷到2(小于2)的所有元素并附带 值序 进行升序排序
1) "one"
2) "1"
3) "two"
4) "2"

上一篇:Redis有序集合对象(Zset)使用ziplist和skiplist


下一篇:Redis 6.0 源码阅读笔记(7) -- ZSet 数据类型源码分析