【发布时间】:2020-08-21 01:59:24
【问题描述】:
我们有很多 Redis 实例,消耗 TB 的内存和数百台机器。
随着我们的业务活动起起落落,一些 Redis 实例不再那么频繁地使用——它们“不受欢迎”或“冷淡”。但是 Redis 把所有东西都存储在内存中,所以很多本应存储在廉价磁盘中的不常用数据却占用了昂贵的内存。
我们正在探索一种方法来从这些不受欢迎/冷的 Redis 中节省内存,以减少我们的机器使用量。
我们不能删除数据,也不能迁移到其他数据库。有什么方法可以实现我们的目标吗?
PS:我们正在考虑一些可以“混合”内存和磁盘的 Redis 兼容产品,即它将热数据存储在内存中,而将冷数据存储在磁盘中,并且使用有限的资源。我们知道 RedisLabs 的“Redis on Flash(ROF)”解决方案,但它使用的是 RocksDB,对内存非常不友好。我们想要的是一个非常受内存限制的产品。此外,ROF 不是开源的 :(
提前致谢!
【问题讨论】:
-
您是否考虑过使用带有 TTL 的不受欢迎/冷密钥或根据业务需求创建驱逐策略?
-
"但是它使用的是 RocksDB,对内存非常不友好。" RedisLabs 对其进行了调整,使其不会“对内存不友好”
-
@Ersoy 我们将 Redis 视为数据库,而不是缓存,因此无法驱逐数据。
-
您的应用程序是否实现了repository pattern?如果没有,那么您可能通过使 Redis 成为依赖项而将自己逼入绝境。来自 Redis 常见问题解答:“过去,Redis 开发人员尝试使用虚拟内存和其他系统来允许比 RAM 更大的数据集,但毕竟如果我们能做好一件事,我们会非常高兴:数据从内存提供,磁盘用于存储。因此,目前还没有为 Redis 创建磁盘后端的计划。毕竟,Redis 的大部分内容都是其当前设计的直接结果。”
-
@bayinamy,你能提供一些关于数据类型和你用来存储数据的 Redis 数据结构的信息吗?另外,不受欢迎/冷数据的访问模式是什么?将冷数据序列化为二进制格式(Kryo/Avro/ProtoBuf)并压缩的辅助集群怎么样?然后你可以在主集群中查找,如果它不可用,在辅助/不受欢迎/冷集群中查找?如果您的不受欢迎的数据很少被访问,这可能会起作用,因此可以在两次查找而不是一次查找时对性能造成影响。
标签: redis