Redis 的散列会将一个键和一个散列在数据库里关联起来,用户可以在散列中为任意多个字段设置值。与字符串键一样,散列的字段和值既可以是文本数据,也可以是二进制数据。
通过使用散列键,用户可以把关联的多项数据存储到同一个散列里面,以便对这些数据进行管理。
设置散列值的相关命令格式为 hset key field value [field value ...]
【示例】
127.0.0.1:6379> hset hashtest f1 v1
(integer) 1
获取散列值的相关命令格式为 hget key field
【示例】
127.0.0.1:6379> hget hashtest f1
"v1"
删除 hash 中的某个字段的命令格式为 hdel key field [field ...]
【示例】
127.0.0.1:6379> hdel hashtest f1
(integer) 1
统计 hash 中字段个数的命令的格式为 hlen key
【示例】
127.0.0.1:6379> hlen hashtest
(integer) 0
批量设置 hash 的字段的命令格式为 hmset key field value [field value...]
批量获取 hash 的字段值 hmget key field [field ...]
【示例】
127.0.0.1:6379> hmset hash k1 v1 k2 v2
OK
127.0.0.1:6379> hmget hash k1 k2
1) "v1"
2) "v2"
判断 field 是否存在的命令格式为 hexists key field
【示例】
127.0.0.1:6379> hexists hash k1
(integer) 1
获取所有 field 的命令格式为 hkeys key
【示例】
127.0.0.1:6379> hkeys hash
1) "k1"
2) "k2"
获取所有的 value 的命令格式为 hvals key
【示例】
127.0.0.1:6379> hvals hash
1) "v1"
2) "v2"
获取所有格的hash 的字段与值的命令格式为 hgetall key
【示例】
127.0.0.1:6379> hgetall hash
1) "k1"
2) "v1"
3) "k2"
4) "v2"
字段值自增的命令格式为 hincrby key field
或 hincrbyfloat key field
统计字符串长度的命令格式为 hstrlen key field
hash 类型的内部编码有两种 ziplist (压缩列表) 和 hashtable (哈希表)
ziplist (压缩列表): 当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个)、同时所有值都小于 hash-max-ziplist-values 配置时(默认 64 个字节)。Redis 会使用 ziplist 作为 hash 的内部实现,ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比 hashtable 更加优秀
hashtable (哈希表): 当哈希类型无法满足 ziplist 的条件时,Redis 就会使用 hashtable 作为哈希的内部实现,因为此时 ziplist 的读写效率会下降。而 hashtable 的读写时间复杂度为 O(1)。
查看 hash 的编码格式的命令为 object encoding hashkey