1、简介
Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。
Redis有5种基础数据结构,分别是:
string(字符串)
list(列表)
hash(字典)
set(集合)
zset(有序集合)
其中list、set、hash、zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则:
create if not exists:容器不存在则创建
drop if no elements:如果容器中没有元素,则立即删除容器,释放内存
本文讲述的是Redis的5种基础数据结构中的hash(字典)
2、hash(字典)相关介绍
2.1 hash(字典)的内部结构
Redis的hash(字典)相当于Java语言中的HashMap,它是根据散列值分布的无序字典,内部的元素是通过键值对的方式存储。2.2 hash(字典)扩容
Redis中的hash(字典)存储的value只能是字符串值,此外扩容与Java中的HashMap也不同。Java中的HashMap在扩容的时候是一次性完成的,而Redis考虑到其核心存取是单线程的性能问题,为了追求高性能,因而采取了渐进式rehash策略。
渐进式rehash指的是并非一次性完成,它是多次完成的,因此需要保理旧的hash结构,所以Redis中的hash(字典)会存在新旧两个hash结构,在rehash结束后也就是旧hash的值全部搬迁到新hash之后,新的hash在功能上才会完全替代以前的hash。2.3 hash(字典)的相关使用场景
hash(字典)可以用来存储对象的相关信息,一个hash(字典)代表一个对象,hash的一个key代表对象的一个属性,key的值代表属性的值。hash(字典)结构相比字符串来说,它无需将整个对象进行序列化后进行存储。这样在获取的时候可以进行部分获取。所以相比之下hash(字典)具有如下的优缺点:
读取可以部分读取,节省网络流量
存储消耗的高于单个字符串的存储
3 hash(字典)相关指令
3.1 hash(字典)常用指令
hset -> hash(字典)插入值,字典不存在则创建 key代表字典名称,field 相当于 key,value是key的值
hset key field value
hmset -> 批量设值
hmset key field value [field value …]
示例:hlen -> 获取指定字典的key的个数
hlen key
举例:
127.0.0.1:6379> hlen book
(integer) 5
1
2
3.2 hash(字典)使用小技巧
在string(字符串)中可以使用incr和incrby对value是整数的字符串进行自加操作,在hash(字典)结构中如果单个子key是整数也可以进行自加操作。
hincrby -> 增对hash(字典)中的某个key的整数value进行自加操作
hincrby key field increment