redis哈希操作

Redis 哈希(Hash)

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

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

实例
127.0.0.1:6379>  HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379>  HGETALL runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。

Redis hash 命令

下表列出了 redis hash 基本的相关命令:

  • hdel key field1 [field2]:删除一个或多个哈希表字段

    • 返回值:被成功删除字段的数量,不包括被忽略的字段

    • 实例

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HDEL myhash field1
      (integer) 1
      redis 127.0.0.1:6379> HDEL myhash field2
      (integer) 0
      
  • hexists key field:查看哈希表key中指定的字段是否存在

    • 返回值:

      • 如果哈希表含有给定字段,返回 1 。
      • 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
    • 实例:

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HEXISTS myhash field1
      (integer) 1
      redis 127.0.0.1:6379> HEXISTS myhash field2
      (integer) 0
      
  • hgetall key:获取在哈希表中指定key的所有字段和值

    • 返回值:以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。

    • 实例

      redis> HSET myhash field1 "Hello"
      (integer) 1
      redis> HSET myhash field2 "World"
      (integer) 1
      redis> HGETALL myhash
      1) "field1"
      2) "Hello"
      3) "field2"
      4) "World"
      redis> 
      
  • hincrby key field increment :为哈希表中的指定字段的整数值加上增量increment

    • 返回值:执行hincrbyfloat命令之后,哈希表中字段的值

    • 实例:

      redis> HSET mykey field 10.50
      (integer) 1
      redis> HINCRBYFLOAT mykey field 0.1
      "10.6"
      redis> HINCRBYFLOAT mykey field -5
      "5.6"
      redis> HSET mykey field 5.0e3
      (integer) 0
      redis> HINCRBYFLOAT mykey field 2.0e2
      "5200"
      redis> 
      
  • hincrbyfloat key field increment:为哈希表key中的指定字段的浮点数值加上增量increment。

    • 返回值:执行 Hincrbyfloat 命令之后,哈希表中字段的值。

    • 实例

      redis> HSET mykey field 10.50
      (integer) 1
      redis> HINCRBYFLOAT mykey field 0.1
      "10.6"
      redis> HINCRBYFLOAT mykey field -5
      "5.6"
      redis> HSET mykey field 5.0e3
      (integer) 0
      redis> HINCRBYFLOAT mykey field 2.0e2
      "5200"
      redis> 
      
  • hkeys key:获取所有哈希表中的字段

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

    • 实例

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HSET myhash field2 "bar"
      (integer) 1
      redis 127.0.0.1:6379> HKEYS myhash
      1) "field1"
      2) "field2"
      
  • hlen key:获取哈希表中字段的数量

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

    • 实例:

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HSET myhash field2 "bar"
      (integer) 1
      redis 127.0.0.1:6379> HLEN myhash
      (integer) 2
      
  • hmget key field1 field2:获取所有给定字段的值

    • 返回值:一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

    • 实例

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HSET myhash field2 "bar"
      (integer) 1
      redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
      1) "foo"
      2) "bar"
      3) (nil)
      
  • hmset key field1 value1 field2 value2:同时将多个field-value对设置到哈希表key中

    • 返回值:如果命令执行成功,返回 OK 。

    • 实例

      redis 127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World"
      OK
      redis 127.0.0.1:6379> HGET myhash field1
      "Hello"
      redis 127.0.0.1:6379> HGET myhash field2
      "World"
      
  • hset key field value:将哈希表key中的字段field的值设为value

    • 返回值

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

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      OK
      redis 127.0.0.1:6379> HGET myhash field1
      "foo"
      
      redis 127.0.0.1:6379> HSET website google "www.g.cn"       # 设置一个新域
      (integer) 1
      
      redis 127.0.0.1:6379>HSET website google "www.google.com" # 覆盖一个旧域
      (integer) 0
      
  • hsetinx key field value:只有当字段field不存在时,设置哈希表字段的值

    • 返回值:

      • 设置成功,返回 1 。
      • 如果给定字段已经存在且没有操作被执行,返回 0 。
    • 实例:

      • redis 127.0.0.1:6379> HSETNX myhash field1 "foo"
        (integer) 1
        redis 127.0.0.1:6379> HSETNX myhash field1 "bar"
        (integer) 0
        redis 127.0.0.1:6379> HGET myhash field1
        "foo"
        
        redis 127.0.0.1:6379> HSETNX nosql key-value-store redis
        (integer) 1
        
        redis 127.0.0.1:6379> HSETNX nosql key-value-store redis       # 操作无效, key-value-store 已存在
        (integer) 0
        
  • hvals key:获取哈希表中的所有值

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

    • 实例:

      redis 127.0.0.1:6379> HSET myhash field1 "foo"
      (integer) 1
      redis 127.0.0.1:6379> HSET myhash field2 "bar"
      (integer) 1
      redis 127.0.0.1:6379> HVALS myhash
      1) "foo"
      2) "bar"
      
      # 空哈希表/不存在的key
      
      redis 127.0.0.1:6379> EXISTS not_exists
      (integer) 0
      
      redis 127.0.0.1:6379> HVALS not_exists
      (empty list or set)
      
  • hscan key cursor [match pattern] [count count]:迭代哈希表中的键值对

    • 返回值:返回的每个元素都是一个元组,每一个元组元素由一个字段(field) 和值(value)组成。

    • 实例

      > HMSET sites google "google.com" runoob "runoob.com" weibo "weibo.com" 4 "taobao.com"
      OK
      > HSCAN sites 0 match "run*"
      1) "0"
      2) 1) "runoob"
      2) "runoob.com"
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值