【问题标题】:Single Object having 2GB size(may be it more in future) to store in Redis Cache存储在 Redis 缓存中的具有 2GB 大小的单个对象(将来可能会更多)
【发布时间】:2018-12-10 08:38:36
【问题描述】:

我们计划为我们的应用程序实现分布式缓存(Redis Cache)。我们有一个数据并将其存储在大小约为 2GB 的地图中,它是一个单独的对象。目前它存储在上下文范围内,类似地,我们有很多对象存储在上下文范围内。

现在我们计划将所有这些上下文数据存储到 Redis 缓存中。这里地图数据占用大量内存,我们必须将此地图数据存储为单个键值对象。

Redis Cache 是否适合我的要求。以及哪种数据类型适合将这些数据存储到 Redis Cache 中。

请提出实现方法。

【问题讨论】:

    标签: redis spring-data-redis redis-cluster redis-cli


    【解决方案1】:

    那么,你没有完成另一个问题的讨论并开始了一个新问题? 2GB 很多。假设,您的服务器之间有 1Gb/s 的链路。传输原始数据需要 16 秒。添加协议成本,添加反序列化成本。而你现在是 20 秒。这是硬件限制。当然,您可能会获得 10Gb/s 链接。甚至可以将其复用为 20Gb/s。但这就是方式吗?真正的解决方案是将这些数据分成几部分并仅执行部分更新。

    进入主题:使用String(基本)类型,没有选项。其他类型是复杂的结构,您只需要一个值。

    【讨论】:

    • 感谢@Imaskar 的回复,之前我们将这些大数据存储到上下文中,我们认为我们必须将这些大数据放入分布式缓存中,所以我们选择了redis缓存。在 redis 缓存中,我们在读取这些大数据时也面临延迟问题。您能否对数据分区提出任何建议。如果您对此提供任何想法,这真的对我有帮助。提前致谢。
    • 除非你告诉我这个大块是由什么组成的,否则我不能。如果这是您之前所说的大地图,请将其存储为散列,并且不要每次都下载所有内容。只需查询您需要的密钥。如果是比较复杂的,试着找一个适合分区的字段,比如id或者eventtime。尽量使每次只重新加载一个热分区。
    • 如果你真的需要每个worker都有它的本地副本并且每次都会修改很多这个副本,你可以这样做:将其存储为哈希,但不要每次都下载它,而是订阅消息总线,将更改推送到此地图。如果你重启一个工人,你需要下载完整的地图。但之后它会逐渐更新。
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2013-08-11
    • 2015-10-07
    相关资源
    最近更新 更多