在JAVA中从REDIS缓存检索数据时出现性能问题

在JAVA中从REDIS缓存检索数据时出现性能问题,redis,spring-data-redis,redis-cli,Redis,Spring Data Redis,Redis Cli,我将250MB的数据作为一个散列对象存储到redis缓存中。我正在使用SpringRedisTemplate从redis读取数据。但这需要大约30到35秒的时间 redisTemplate.opsForHash().put("masterMap","masterMap", masterMap); redisTemplate.opsForHash().get("masterMap","masterMap"); 要求以毫秒为单位获取数据。然而,它需要30到35秒的时间。如何从red

我将250MB的数据作为一个散列对象存储到redis缓存中。我正在使用SpringRedisTemplate从redis读取数据。但这需要大约30到35秒的时间

    redisTemplate.opsForHash().put("masterMap","masterMap", masterMap);
    redisTemplate.opsForHash().get("masterMap","masterMap");
要求以毫秒为单位获取数据。然而,它需要30到35秒的时间。如何从redis缓存中快速读取这么大的数据。如果有任何从redis读取数据的替代方法,我必须更改任何配置

有人能给我介绍一下吗。

做一个分析程序运行

    如果你花大部分时间反序列化这些数据,那么考虑 更快的序列化方法。例如
    protobuf
    cap'n'proto
  • 如果你大部分时间都在读大量的数据 套接字,然后尝试减少存储量。使用压缩或/和 规范化例如,如果有许多字符串具有低 基数,将其字典存储为单独的结构

不要存储那种大小的单个对象。当您读写的是一个massiveblob时,每个数据库都会遇到性能问题。根据我们的应用程序架构,我们无法将此mastermap数据拆分为多个对象。我们必须存储为单个对象。正因为如此,我们面临着这个问题。我知道您使用spring,所以我打赌使用第一个选项。感谢您的回答,我尝试了第二种方法是压缩数据对象,在我的情况下,它也没有给出好的结果。@Manohar
time redis cli hgetall masterMap
的输出是什么?我的意思是,您需要比较通过spring和通过极简界面获取此地图。等等,您使用
opsForCache
来存储地图吗?它如何转换为Redis密钥?如果将其作为一个整体存储并检索,请尝试将其作为单个值存储。因为现在它可能需要花费一些时间来分别获取/放置每个映射条目。当我在redis cli上运行HGETALL masterMap时,它将为输出提供160秒的时间。我正在使用opsForHash存储和检索数据。