Redis【4】—— Hash类型

四、各类型指令介绍

(二)Hash类型

1. 基础指令

hset k1 f1 v1
hget k1 f1

hset k2 f2 v2 f3 v3
hget k2 f2 f3 # error,一次只能返回一个
hget k2 f2
hget k2 f3
hget k3 f2 # key不存在会返回 nil
hget k2 f22 # field不存在也会返回 nil

image.png

hexists k1 f1
hexists k1 f11 # field不存在
hexists k3 f3  # key不存在

image.png

# del 删除的是整个 hash
# 删除的是field,返回的是删除的个数
hdel k2 f2 
hdel k2 f3 

hset k2 f22 v22 f33 v33
hdel k2 f22 f33

image.png

hset k2 f222 v222 f333 v333 f444 v444
keys *

# 注意下方两个指令要慎重使用,因为 field-value 可能有很多
hkeys k1
hkeys k2 # 查看这个key中的所有field

hvals k1
hvals k2 # 查看这个key中的所有field对于的value

hgetall k1 # 查看这个key所有的 field-value 
hgetall k2 

hmget k2 f222 f333 # 查看这个key中指定field的value
hmget k2 f222 f333 f444

image.png
image.png
image.png

# hscan 渐进式遍历,连续执行多次就能遍历整个hash,
# 避免了遍历过程中执行时间过程导致的Redis被阻塞
hlen k1 # 获取 hash 元素的个数,时间复杂度是O(1),直接存在起来,不需要遍历
hlen k2 


hsetnx k2 f5 v5 # 存在则失败
hget k2 f5
hsetnx k2 f5 v55 # 因为第一次使用hsetnx时不存在,那是正常,存在则失败


hset k3 f1 1 f2 2.2
hgetall k3
hincrby k3 f1 10
hincrby k3 f1 -1
hincrbe k3 f2 0.2
hincrbe k3 f2 -0.2

image.png
image.png
image.png

2. 内部编码

hset key f1 111
OBJECT encoding key

hset key f2 222222222222...2222222222
OBJECT encoding key

image.png
我们应该怎么理解这里的ziplist 呢?字面上理解这就是 压缩链表,但是怎么理解压缩呢?**压缩的本质是:不同的数据有不同的特点,可以针对数据进行重新编码。举个粗糙的例子,aaaabbbbbbbbcccccc可以转换成4a8b6c
在哈希的内部编码中ziplisthashtable的区分并向intemstr那么不明显,那么什么时候ziplist会编码,什么时候又用hashtable编码呢?这主要看**hash-max-ziplist-entries**
和 ****hash-max-ziplist-value**这两个值。默认hash的个数<512value的字节数<64byte时才使用ziplist,当任何一个条件不满足时就会转成hashtable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值