业务:一项任务,开始任务时,将任务中的某项数据按照每5s保存一次到redis的list中,结束时删除redis(目前是这样)。想查数据时直接查redis
问题:上述情况将导致list的数据过大(因为不知道这项任务执行多久) 导致大key
现在想怎么处理这个大key
个人想到了:设置一个定时任务,每30分处理一次这个大key,将数据保存到数据库中 。先查数据时就查数据库和redis,将这两种实时数据整合,返回前端 (不知可行不可行)
业务:一项任务,开始任务时,将任务中的某项数据按照每5s保存一次到redis的list中,结束时删除redis(目前是这样)。想查数据时直接查redis
问题:上述情况将导致list的数据过大(因为不知道这项任务执行多久) 导致大key
现在想怎么处理这个大key
个人想到了:设置一个定时任务,每30分处理一次这个大key,将数据保存到数据库中 。先查数据时就查数据库和redis,将这两种实时数据整合,返回前端 (不知可行不可行)
5s 写一次,那写入量也不是很大,完全可以直接存数据库,从数据库拿都可以。
至于消费时间过长的话,可以考虑添加更多的消费者来缓解一部分。
另外,你这个在你业务中最大的时候到了多少个元素、占用了多少内存?
3 回答2.7k 阅读✓ 已解决
3 回答4.2k 阅读✓ 已解决
8 回答3.8k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
这个方法是可行的。将数据保存到数据库中,然后在查询数据时同时查询数据库和 redis 并将数据整合,返回给前端是一个不错的方法。
你可以考虑在结束时直接将数据保存到数据库中,而不是在结束后再设置一个定时任务来处理大 key。另外,你也可以考虑每隔一段时间将数据从 redis 中转存到数据库中,以避免 redis 中 key 过大。
在这种情况下,使用数据库来存储数据可能是一个更好的选择,因为数据库可以提供更强大的存储能力和查询功能,并且可以更好地管理数据。
总的来说,不同的情况可能需要不同的解决方案,你可以根据自己的情况选择最合适的解决方案。