Redis哈希数详解

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

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

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

在这里插入图片描述

在 Redis 中它就是一个这样的结构,其中 role_1 代表的是这个 hash 结构在 Redis 内存的 key,通过它就可以找到这个 hash 结构,而 hash 结构由一系列的 field 和 value 组成,下面用 Redis 的命令来保存角色对象,如下图所示。
在这里插入图片描述

上面的命令保存了一个角色对象。在 Redis 中,角色对象是通过键 role_1 来索引的,而角色本身是一个 hash 结构。hash 的键值对在内存中是一种无序的状态,我们可以通过键找到对应的值。

Redis hash结构命令

在这里插入图片描述

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

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

下面通过 Redis 的这些操作命令来展示如何使用它们。
在这里插入图片描述

从图中可以看到,Redis 关于哈希结构的相关命令。这里需要注意的是:

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

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

有了上面的描述,读者应该对 hash 结构有了一定的认识,也知道如何使用命令去操作它,现在讨论如何使用 Spring 去操作 Redis 的 hash 结构,由于 Spring 对 Redis 进行了封装,所以有必要对 RedisTemplate 的配置项进行修改。下面先修改 RedisTemplate 的配置,代码如下所示。

<bean id="jdkSerializationRedisSerializer"
        class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
......
<bean id="stringRedisSerializer"
        class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.Re
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis中有多种据结构,其中最常用且基本的据结构是字符串(string)。Redis中的字符串和C语言中的字符串类型有一些区别。在Redis中,字符串不仅可以存储文本字符串,还可以存储字、图片、音频等更复杂的二进制据。字符串在Redis中被广泛用于缓存、据存储和消息传递等方面。 Redis还支持其他据结构,如哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)和位图(Bitmap)等。每种据结构都有自己的特点和适用场景,可以根据实际需求选择合适的据结构来存储和操作据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Redis五种据结构详解](https://blog.csdn.net/hyunbar/article/details/108354442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [[redis] 10 种据结构详解](https://blog.csdn.net/jarvan5/article/details/122868240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值