Redis本身就是通过哈希表的方式组织数据,同时redis中的value也可以是另一个哈希表。
1. 常用命令
1. hset / hsetnx
hset key filed1 value1 filed2 value2 ...
hset 用于把键值对存入value中,这里的key为redis组织的键, filed1 value1 filed2 value2 为key的value,为了区分所以把内部的 hash的键用filed表示。
hset会返回设置成功的键值对个数,如果filed已经存在则会覆盖对应的value但是返回数不会增加
hsetnx filed value
filed 不存在才能设置成功
2. hget / hmget
hget key filed
返回filed对应的value,不存在返回nil
hmget key filed1 filed2 ...
返回多个filed对应的value,不存在返回nil
3. hdel
hdel key filed1 filed2 ...
删除对应的键值对,返回删除的个数:
4. hkeys
hkeys key
返回key中所有的filed
5. hvals
hvals key
返回key中所有的value
6. hgetall
hgetall key
返回key中所有的键值对:
7. hlen
hlen key
获取哈希表元素个数
8. hincrby / hincrbyfloat
hincrby key fild n
对value + n,并返回结果,n可以为负数
hincrbyfloat key fild f
对value + f,并返回结果,f可以为负数,小数
2. 编码方式
1. Ziplist:
- 适用场景:当哈希表较小,且字段和值都较短时
- 特点:Ziplist 是一种压缩编码方式,存储小型哈希表中的字段和值。它将多个字段和值紧凑地存储在一个连续的内存块中。
2. Hash Table:
- 适用场景:当哈希表较大或字段和值较长时。
- 特点:哈希表编码是 Redis 默认的哈希编码方式。它使用链式哈希结构,支持高效的字段和对应值的查找、插入和删除操作。
Redis 会根据哈希表的大小和内容自动选择适合的编码方式,以确保存储和操作的高效性。
3. 应用场景
作为缓存,存储一些结构化的数据,例如对象:
也可以把对象转为json使用string类型来存,不过没有使用哈希表直观,并且修改某个属性也更麻烦。