redis Hash


10033

Hash

redis hash 是一个string 类型的fieldvalue 的映射表,hash 特别适合存储对象

每个hash 对象可以存储$2^{32}-1$ 个键值对.

1.常用命令

命令描述
hdel key field1 [field2]删除一个或多个哈希表字段
hexists key field查看哈希表key 中指定的字段是否存在
hget key field获取存储在哈希表中指定字段的值
hgetall key field获取哈希表中指定key 所有字段和值
hincrby key field increment哈希表中key 指定字段整数增量increment
hincrbyfloat key field increment哈希表中key 指定字段浮点数增量increment
hkeys key获取所有哈希表中的字段
hlen key获取哈希表中字段的数量
hmget key field1 [field2]获取所有给定字段的值
hmset key f1 v1 [f2 v2]同时设置多个键值对到哈希表key
hset key field value将哈希表 key 中的字段 field 的值设为 value
hsetnx key field value只有在字段 field 不存在时,设置哈希表字段的值
hvals key获取哈希表中所有值
hscan key cousor迭代哈希表分钟的键值对

2.基本设置

  1. hexists key field :查看哈希表key 中,给定域field 是否存在.
  2. hset key field value :将哈希表 key 中的域 field 的值设为 value,如果key 不存在,一个新的哈希表被创建,如果域field 已经存在,旧值会被覆盖.
  3. hget key field : 返回哈希表key 给定域field的值.
  4. hgetall key :获取哈希表中key 所有的域和值.
  5. hkeys key :获取哈希表中key 的所有域.
  6. hvals key :获取哈希表中key 的所有值.
  7. hlen key:获取哈希表key 中域的数量.
  8. hdel key field1 [field2]:删除哈希表key的一个或多个指定域,不存在的会被忽略

实例:

127.0.0.1:6379> HEXISTS google
(error) ERR wrong number of arguments for 'hexists' command
127.0.0.1:6379> HEXISTS website google
(integer) 0
127.0.0.1:6379> hset website google 'www.g.cn'
(integer) 1
127.0.0.1:6379> hset website google 'www.google.com'
(integer) 0
127.0.0.1:6379> hget website google
"www.google.com"
127.0.0.1:6379> hgetall website
1) "google"
2) "www.google.com"
127.0.0.1:6379> hkeys website
1) "google"
127.0.0.1:6379> hvals website
1) "www.google.com"
127.0.0.1:6379> hlen website
(integer) 1
127.0.0.1:6379> hdel website 
(error) ERR wrong number of arguments for 'hdel' command
127.0.0.1:6379> hdel website google
(integer) 1
127.0.0.1:6379> hget website
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget website google
(nil)
127.0.0.1:6379> del website
(integer) 0

3.递增

1.hincrby key field increment:为哈希表 key 中的域 field 的值加上增量 increment,增量也可以为负数,相当于对给定域进行减法操作.如果域 field 不存在,那么在执行命令前,域的值被初始化为 0.

2.HINCRBYFLOAT key field increment:为哈希表 key 中的域 field 加上浮点数增量 increment

# 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"

# 值和增量都是普通小数

redis> HSET mykey field 10.50
(integer) 1
redis> HINCRBYFLOAT mykey field 0.1
"10.6"


# 值和增量都是指数符号

redis> HSET mykey field 5.0e3
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"


# 对不存在的键执行 HINCRBYFLOAT

redis> EXISTS price
(integer) 0
redis> HINCRBYFLOAT price milk 3.5
"3.5"
redis> HGETALL price
1) "milk"
2) "3.5"


# 对不存在的域进行 HINCRBYFLOAT

redis> HGETALL price
1) "milk"
2) "3.5"
redis> HINCRBYFLOAT price coffee 4.5   # 新增 coffee 域
"4.5"
redis> HGETALL price
1) "milk"
2) "3.5"
3) "coffee"
4) "4.5"

文章作者: 文彦
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 文彦 !
评论
  目录