【发布时间】:2015-10-01 12:36:39
【问题描述】:
我打算考虑使用 Redis 在缓存中存储大量数据。目前我将它们存储在我自己用java编写的缓存中。我的用例如下。
我从一个来源获得 15 分钟的数据,我需要每小时汇总一次数据。因此,对于给定的对象 A,每小时我会得到 4 个值,我需要将它们聚合为一个值,我将使用的公式将是 max / min / sum。
我打算像下面这样使用敌人制造钥匙
a) 对象 id - 长
b) 时间 - 长
c) 属性 id - int(每个对象可能有很多属性,我需要为每个属性分别聚合)
所以最终键看起来像;
objectid_time_propertyid
每 15 分钟我可能会得到大约 50 到 6000 万个键,每次将属性值转换为双倍并应用公式(最大/最小/总和等)然后转换回字符串并存储时,我都需要获取这些键背部。 因此,我看到每个键在每种情况下都有一个读取和一个写入和转换。
我的问题如下。
- 建议将 redis 用于此类用例,今后我可能会将每小时数据汇总到每天、每天到每周等等。
- 缓存中读取和写入的性能如何(我在 Windows 上做了一个示例测试,100K 键读取和写入花费了 30-40 秒,这不是很好,但我在 windows 上做了,我最终需要在 linux 上运行。
- 我想用redis的持久化功能,有什么优缺点?
如果有人真正使用redis作为memcache需要经常更新,请给个建议。
【问题讨论】:
-
上述情况并不少见,而redis非常适合此类任务。一个重要的限制 - 是 RAM。 6000万个按键粗略计算需要12GB左右的RAM。并且您需要更多内存来正常运行其他系统(如果它不是redis的专用服务器)。或许提高生产力就是尝试在redis的服务端脚本中移动部分逻辑。并且还要考虑跨多个物理服务器对数据进行分区。
-
是的,你是对的,我需要关心 RAM,所以我正在考虑减少数据大小的方法。 Redis 是否将数据以压缩形式存储在内存和磁盘中,是否可以在不影响性能的情况下进行设置。
标签: node.js caching redis jedis