Redis--哈希数据结构(Hash)和常用命令

Redis哈希数据结构和常用命令

Redis 中哈希结构就如同 Java 的 map 一样,一个对象里面有许多键值对,它是特别适合存储对象的,如果内存足够大,那么一个 Redis 的 hash 结构可以存储 2 的 32 次方减 1 个键值对(40 多亿)。

一般而言,不会使用到那么大的一个键值对,所以我们认为 Redis 可以存储很多的键值对。在 Redis 中,hash 是一个 String 类型的 field 和 value 的映射表,因此我们存储的数据实际在 Redis 内存中都是一个个字符串而已。

假设角色有 3 个字段:编号(id)、角色名称(roleName)和备注(note),这样就可以使用一个 hash 结构保存它,它的内存结果如表 1 所示。

表 1 角色hash结构
role_1
field value
id 001
roleName role_name_001
note note_001

在 Redis 中它就是一个这样的结构,其中 role_1 代表的是这个 hash 结构在 Redis 内存的 key,通过它就可以找到这个 hash 结构,而 hash 结构由一系列的 field 和 value 组成。

表 2 Redis hash结构命令
命   令 说   明 备   注
hdel key field1[field2......] 删除 hash 结构中的某个(些)字段 可以进行多个字段的删除
hexists key field 判断 hash 结构中是否存在 field 字段 存在返回 1,否则返回 0
hgetall key 获取所有 hash 结构中的键值  返回键和值
hincrby key field increment 指定给 hash 结构中的某一字段加上一个整数 要求该字段也是整数字符串
hincrbyfloat key field increment 指定给 hash 结构中的某一字段加上一个浮点数 要求该字段是数字型字符串
hkeys key 返回 hash 中所有的键 ——
hlen key 返回 hash 中键值对的数量 ——
hmget key field1[field2......] 返回 hash 中指定的键的值,可以是多个 依次返回值
hmset key field1 value1 [field2 field2......] hash 结构设置多个键值对 ——
hset key filed value 在 hash 结构中设置键值对 单个设值
hsetnx key field value 当 hash 结构中不存在对应的键,才设置值 ——
hvals key 获取 hash 结构中所有的值 ——

从表 2 中可以看出,在 Redis 中的哈希结构和字符串有着比较明显的不同。

首先,命令都是以 h 开头,代表操作的是 hash 结构。其次,大多数命令多了一个层级 field,这是 hash 结构的一个内部键,也就是说 Redis 需要通过 key 索引到对应的 hash 结构,再通过 field 来确定使用 hash 结构的哪个键值对。

示例
Redis中的Hashes类型可以看成具有String Key和String Value的map容器。所 以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果 Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash 可以存储4294967295个键值对。

在这里插入图片描述
1. hset key field value: 为指定的key设定field/value对(键值对)。
2. hgetall key: 获取key中的所有filed-vaule

在这里插入图片描述3. hdel key field1[field2…] 删除 hash 结构中的某个(些)字段
4. hexists key field 判断 hash 结构中是否存在 field 字段

在这里插入图片描述5. hincrby key field increment 指定给 hash 结构中的某一字段加上一个整数

6. hincrbyfloat key field increment 指定给 hash 结构中的某一字段加上一个浮点数

7. hmget key field1[field2…] 返回 hash 中指定的键的值,可以是多个

在这里插入图片描述
8. hkeys key 返回 hash 中所有的键
9. hlen key 返回 hash 中键值对的数量
10. hvals key 获取 hash 结构中所有的值

在这里插入图片描述
11. hmset key field1 value1 [field2 field2…] hash 结构设置多个键值对

12. hsetnx key field value 当 hash 结构中不存在对应的键,才设置值

在这里插入图片描述
从示例中可以看到,Redis 关于哈希结构的相关命令。这里需要注意的是:

哈希结构的大小,如果哈希结构是个很大的键值对,那么使用它要十分注意,尤其是关于 hkeys、hgetall、hvals 等返回所有哈希结构数据的命令,会造成大量数据的读取。这需要考虑性能和读取数据大小对 JVM 内存的影响。

对于数字的操作命令 hincrby 而言,要求存储的也是整数型的字符串,对于 hincrbyfloat 而言,则要求使用浮点数或者整数,否则命令会失败。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值