一、简介
字典类型 (Hash) 又被成为散列类型或者是哈希表类型,它是将一个键值 (key) 和一个特殊的“哈希表”关联起来,这个“哈希表”表包含两列数据:字段和值。
存储结构如下图所示:
二、基础使用
1、插入单个元素
语法:hset key field value
127.0.0.1:6379> hset myhash key1 value1
(integer) 1
127.0.0.1:6379> hset myhash key1 value2
(integer) 0
127.0.0.1:6379> hget myhash key1
"value2"
hset将哈希表key中的域key1的值设为value1。如果key不存在,一个新的哈希表被创建,返回1,如果域key1已经存在,旧值将被value2覆盖,返回0。
语法:hsetnx key field value
127.0.0.1:6379> hsetnx myhash key2 value3
(integer) 1
127.0.0.1:6379> hset myhash key2 value4
(integer) 0
127.0.0.1:6379> hget myhash key2
"value3"
hsetnx将哈希表key中的域key2的值设为value3。如果key2不存在,一个新的哈希表被创建,返回1,如果域key2已经存在,旧值不会被value4覆盖,返回0。
2、查询单个元素
语法:hget key field
127.0.0.1:6379> hget myhash key1
"value2"
3、删除单个或多个元素
hdel myhash field [field …]
127.0.0.1:6379> hdel myhash key1 key2
(integer) 1
4、某个整数值累加计算
语法:hincrby key field increment
127.0.0.1:6379> hset myhash key3 25
(integer) 1
127.0.0.1:6379> hincrby myhash key3 26
(integer) 51
127.0.0.1:6379> hget myhash key3
"51"
三、数据结构与内部实现
1、字典类型是由数组和链表组成。
2、字典类型的存储流程是先将键值进行 Hash 计算,得到存储键值对应的数组索引,再根据数组索引进行数据存储。
3、为了保证应用的高性能运行,字典进行扩容或者缩容是会采取渐进式rehash的机制。它的执行流程是同时保留两个哈希表,把旧表中的元素一点一点的移动到新表中,查询的时候会先查询两个哈希表,当所有元素都移动到新的哈希表之后,就会删除旧的哈希表。
四、应用场景
1、商品购物车,购物车非常适合用哈希字典表示,使用人员唯一编号作为字典的key,value值可以存储商品的id和数量等信息;
2、存储用户的属性信息,使用人员唯一编号作为字典的key,value 值为属性字段和对应的值;
3、存储文章详情页信息,使用文章唯一编号作为字典的key,value值为标题、内容、创建时间和对应的值等。