HASH 哈希

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

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

示例

HSET key field value ­­ 设置 key 指定的哈希集中指定字段的值

  1. > hset myhash field1 Hello

hget ­­ 获取指定的hash field。

  1. > hget myhash field1
  2. "Hello"
  3. > hget myhash field3
  4. (nil)

由于数据库没有field3,所以取到的是一个空值nil.

HSETNX key field value ­­ 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果。

  1. > hsetnx myhash field "Hello"
  2. (integer) 1
  3. > hsetnx myhash field "Hello"
  4. (integer) 0

第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。

hmset ­­ 同时设置hash的多个field。

  1. > hmset myhash field1 Hello field2 World
  2. > OK

hmget ­­ 获取全部指定的hash filed。

  1. > hmget myhash field1 field2 field3
  2. 1) "Hello"
  3. 2) "World"
  4. 3) (nil)

hincrby ­­ 指定的hash filed 加上给定值。

  1. > hset myhash field3 20
  2. (integer) 1
  3. > hget myhash field3
  4. "20"
  5. > hincrby myhash field3 -8
  6. (integer) 12
  7. > hget myhash field3
  8. "12

hexists ­­ 测试指定field是否存在。

  1. > hexists myhash field1
  2. (integer) 1
  3. > hexists myhash field9
  4. (integer) 0
  5. 通过上例可以说明field1存在,但field9是不存在的。

hdel 从 key 指定的哈希集中移除指定的域

  1. 127.0.0.1:6379> hkeys myhash
  2. 1) "field1"
  3. 2) "field"
  4. 3) "field2"
  5. 4) "field3"
  6. 127.0.0.1:6379> hdel myhash field
  7. (integer) 1
  8. 127.0.0.1:6379> hkeys myhash
  9. 1) "field1"
  10. 2) "field2"
  11. 3) "field3"
  12. 127.0.0.1:6379>

hlen ­­ 返回指定hash的field数量。

  1. > hlen myhash
  2. (integer) 3

hkeys ­­ 返回hash的所有field。

  1. > hkeys myhash
  2. > 1) "field2"
  3. > 2) "field"
  4. > 3) "field3"

说明这个hash中有3个field。

hvals ­­ 返回hash的所有value。

  1. > hvals myhash
  2. 1) "World"
  3. 2)"Hello"
  4. 3)"12"

说明这个hash中有3个field。

hgetall ­­ 获取某个hash中全部的filed及value。

  1. > hgetall myhash
  2. 1) "field2"
  3. 2) "World"
  4. 3) "field"
  5. 4) "Hello"
  6. 5) "field3"
  7. 6) "12"

HSTRLEN — 返回 hash指定field的value的字符串长度

  1. 127.0.0.1:6379> HSTRLEN myhash field1
  2. (integer) 5

原文: https://piaosanlang.gitbooks.io/redis/content/01day/hash.html