Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

它在Redis 定义的结构体如下

typedef struct redisDb {
    dict *dict;      /*整个数据库的字典 The keyspace for this DB */
    dict *expires;   /*有过期时间的字典 Timeout of keys with a timeout set */
    dict *blocking_keys;        /* Keys with clients waiting for data (BLPOP)*/
    dict *ready_keys;           /* Blocked keys that received a PUSH */
    dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */
    int id;                     /* Database ID */
    long long avg_ttl;          /* Average TTL, just for stats */
} redisDb;

Redis 提供了三种Hash算法

  • Thomas Wang’s 32 bit Mix函数,对整数进行哈希
  • MurmurHash2哈希算法
  • 基于djb哈希

相关命令

  • hset(key, field, value):

    向名称为key的hash中添加元素field<—>value
    
  • hget(key, field):

    返回名称为key的hash中field对应的value
    
  • hmget(key, field1, …,field N):

    返回名称为key的hash中field i对应的value
    
  • hmset(key, field1, value1,…,field N, value N)

    向名称为key的hash中添加元素field i<—>value i
    
  • hincrby(key, field, integer)

    将名称为key的hash中field的value增加integer
    
  • hexists(key, field)

    名称为key的hash中是否存在键为field的域
    
  • hdel(key, field)

    删除名称为key的hash中键为field的域
    
  • hlen(key)

    返回名称为key的hash中元素个数
    
  • hkeys(key)

    返回名称为key的hash中所有键
    
  • hvals(key)

    返回名称为key的hash中所有键对应的value
    
  • hgetall(key)

    返回名称为key的hash中所有的键(field)及其对应的value
    

通过这些命令,我们就能操作 Redis 的 Hash 操作了!

示例

redis 127.0.0.1:6379> HMSET pangugle name "hello word" description "hello alibaba" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL pangugle

1) "name"
2) "hello word"
3) "description"
4) "hello alibaba"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

Redis hash 命令详细说明

序号 命令及描述
1 HDEL key field2 [field2]
删除一个或多个哈希表字段
2 HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field
获取存储在哈希表中指定字段的值
4 HGETALL key
获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key
获取所有哈希表中的字段
8 HLEN key
获取哈希表中字段的数量
9 HMGET key field1 [field2]
获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key
获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对。