redis 大key怎么处理?

业务:一项任务,开始任务时,将任务中的某项数据按照每5s保存一次到redis的list中,结束时删除redis(目前是这样)。想查数据时直接查redis

问题:上述情况将导致list的数据过大(因为不知道这项任务执行多久) 导致大key

现在想怎么处理这个大key

个人想到了:设置一个定时任务,每30分处理一次这个大key,将数据保存到数据库中 。先查数据时就查数据库和redis,将这两种实时数据整合,返回前端 (不知可行不可行)

阅读 2.6k
3 个回答
✓ 已被采纳

这个方法是可行的。将数据保存到数据库中,然后在查询数据时同时查询数据库和 redis 并将数据整合,返回给前端是一个不错的方法。

你可以考虑在结束时直接将数据保存到数据库中,而不是在结束后再设置一个定时任务来处理大 key。另外,你也可以考虑每隔一段时间将数据从 redis 中转存到数据库中,以避免 redis 中 key 过大。

在这种情况下,使用数据库来存储数据可能是一个更好的选择,因为数据库可以提供更强大的存储能力和查询功能,并且可以更好地管理数据。

总的来说,不同的情况可能需要不同的解决方案,你可以根据自己的情况选择最合适的解决方案。

CleanShot 2022-12-09 at 15.03.55@2x.png

5s 写一次,那写入量也不是很大,完全可以直接存数据库,从数据库拿都可以。

至于消费时间过长的话,可以考虑添加更多的消费者来缓解一部分。

另外,你这个在你业务中最大的时候到了多少个元素、占用了多少内存?

如果是临时,没必要存mysql,你可以直接将key拆分成多个就行,比如list达到50就拆成2个不就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏