第三部分:Redis之Hash(哈希列表)

hset
HSET key field value

将哈希表 key 中的域 field 的值设为 value 。
如果 key 不存在,一个新的哈希表被创建并进行hset操作。
如果域 field 已经存在于哈希表中,旧值将被覆盖。

返回值:
如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。
如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。

redis> HSET website google "www.g.cn"       # 设置一个新域
(integer) 1

redis> HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0

hexists
HEXISTS key field

查看哈希表 key 中,给定域 field 是否存在。

返回值:
如果哈希表含有给定域,返回 1 。
如果哈希表不含有给定域,或 key 不存在,返回 0

redis> HEXISTS phone myphone
(integer) 0

redis> HSET phone myphone nokia-1110
(integer) 1

redis> HEXISTS phone myphone
(integer) 1

hget
HGET key field

返回哈希表 key 中给定域 field 的值。

返回值:
给定域的值。
当给定域不存在或是给定 key 不存在时,返回 nil 。

# 域存在

redis> HSET site redis redis.com
(integer) 1

redis> HGET site redis
"redis.com"


# 域不存在

redis> HGET site mysql
(nil)

hdel
HDEL key field [field ...]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

返回值:
被成功移除的域的数量,不包括被忽略的域。

# 测试数据

redis> HGETALL abbr
1) "a"
2) "apple"
3) "b"
4) "banana"
5) "c"
6) "cat"
7) "d"
8) "dog"


# 删除单个域

redis> HDEL abbr a
(integer) 1


# 删除不存在的域

redis> HDEL abbr not-exists-field
(integer) 0


# 删除多个域

redis> HDEL abbr b c
(integer) 2

redis> HGETALL abbr
1) "d"
2) "dog"

HINCRBY
HINCRBY key field increment
相关命令HINCRBYFLOAT(浮点增量)

为哈希表 field 的值加上增量 increment 。

增量也可以为负数,相当于对给定域进行减法操作。

如果 key不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。

对一个储存字符串值的域 field执行 HINCRBY 命令将造成一个错误。

返回值:

执行 HINCRBY 命令之后,哈希表 key 中域 field的值

# increment 为正数

redis> HEXISTS counter page_view    # 对空域进行设置
(integer) 0

redis> HINCRBY counter page_view 200
(integer) 200

redis> HGET counter page_view
"200"


# increment 为负数

redis> HGET counter page_view
"200"

redis> HINCRBY counter page_view -50
(integer) 150

redis> HGET counter page_view
"150"


# 尝试对字符串值的域执行HINCRBY命令

redis> HSET myhash string hello,world       # 设定一个字符串值
(integer) 1

redis> HGET myhash string
"hello,world"

redis> HINCRBY myhash string 1              # 命令执行失败,错误。
(error) ERR hash value is not an integer

redis> HGET myhash string                   # 原值不变
"hello,world"

HKEYS
HKEYS key

返回哈希表 key 中的所有域。

返回值:
一个包含哈希表中所有域的表。
当 key 不存在时,返回一个空表。

# 哈希表非空

redis> HMSET website google www.google.com yahoo www.yahoo.com
OK

redis> HKEYS website
1) "google"
2) "yahoo"


# 空哈希表/key不存在

redis> EXISTS fake_key
(integer) 0

redis> HKEYS fake_key
(empty list or set)

HLEN
HLEN key

返回哈希表 key 中域的数量。

返回值:
哈希表中域的数量。
当 key 不存在时,返回 0 。

redis> HSET db redis redis.com
(integer) 1

redis> HSET db mysql mysql.com
(integer) 1

redis> HLEN db
(integer) 2

redis> HSET db mongodb mongodb.org
(integer) 1

redis> HLEN db
(integer) 3

hmset
HMSET key field value [field value ...]
相关命令hmget(获取多个key的域)

同时将多个 field-value (域-值)对设置到哈希表 key 中。

此命令会覆盖哈希表中已存在的域。

如果 key 不存在,一个空哈希表被创建并执行hmset操作!

返回值:
如果命令执行成功,返回 OK 。
当 key 不是哈希表(hash)类型时,返回一个错误。

redis> HMSET website google www.google.com yahoo www.yahoo.com
OK

redis> HGET website google
"www.google.com"

redis> HGET website yahoo
"www.yahoo.com"

你可能感兴趣的:(第三部分:Redis之Hash(哈希列表))