Redis 哈希命令
Redis 哈希结构由一个主键(Key)和多个字段(Field)组成。
基础操作:hset、hget、hexist、hdel
hset:设置字段值,仅支持字符串类型。返回成功插入的字段数量。
hset key field1 value1 [fieldN valueN...]
hget:查询指定字段的值。若存在返回 value,不存在返回 nil。时间复杂度 O(1)。
hget key field
hexist:判断字段是否存在。存在返回 1,不存在返回 0。
hexist key field
hdel:删除字段。返回被删除的字段数量。
hdel key field [fieldN...]
遍历操作:hkeys、hvals、hgetall、hmget
hkeys:获取哈希中所有的字段名。
hkeys key
hvals:获取哈希中所有的值。
hvals key
hgetall:获取所有的字段和值。注意数据量大时可能阻塞服务器。
hgetall key
hmget:批量查询多个字段的值,避免多次网络请求。
hmget key field1 [field2 field3...]
hscan:渐进式遍历,分批次获取数据,不会阻塞服务器。
其他操作:hlen、hsetnx、hincrby、hincrbyfloat
hlen:获取哈希中元素个数,时间复杂度 O(1)。
hlen key
hsetnx:仅当字段不存在时设置值。成功返回 1,失败返回 0。
hsetnx key field value
hincrby:对数值型字段进行整数加减运算。
hincrby key field increment
hincrbyfloat:对数值型字段进行浮点数加减运算。
hincrbyfloat key field increment
内部编码
Redis 哈希有两种内部编码:
- ziplist(压缩列表):当元素较少(默认小于 512 个)且值较小(默认小于 64 字节)时使用,节省内存。
- hashtable(哈希表):当无法满足 ziplist 条件时使用。
应用场景
稀疏数据存储:相比关系型数据库使用 NULL 标识缺失属性,Redis 哈希允许不同 Key 拥有不同的 Field 集合,无需完全一致,从而减少空间消耗。适用于存储用户信息(如用户 1 有名字、年龄,用户 2 有名字、性别等)。


