问一个关于 redis hash 的问题

2021-03-28 14:12:01 +08:00
 wxm
现在有个场景,有个定时每分钟先从第三方接口查询数据在本地,然后处理完放到 redis 里面,再把处理完的数据存到数据库备份。三方接口的数据每次返回的数据可能不一样,我用 hash 结构存储这些数据,hmset domain k1 v.toString k2 v.toString,因为下一次可能新增 k3,k2 失效,k1 更新。我不想每次 hmset 都先删除这个 domain,请问有什么其他好的解决方案。数据库备份是先删库再 insert 。都是先删再 inser 感觉操作有点太重了。存成 hash 是因为条 v 有高频查询需求。
1558 次点击
所在节点    Redis
2 条回复
FaceBug
2021-03-28 14:28:33 +08:00
如果是我,在数据量不大的情况,我觉得我可能这么做

1 、每次抓到新数据,直接写入数据库,暂时不删旧的数据,也不碰 redis

2 、设置一个按照规则读取不同 key 的方案,当时间为 0-2 时,读 key_0,为 3-5 时读 key_3

3 、如果发现没有设置 redis key_3,去数据库找 key_3 (就和平时用 redis 做缓存一样操作)

4 、定时删除过期的 key 和 mysql

这样我也懒得比较是更新还是删除还是新增,每次都直接用最新的完整版数据就完事了
palmers
2021-03-29 09:49:04 +08:00
我理解 你这是在做数据异构吧? 然后从另一个角度想这个第三方的数据是否可以通过 mq 的方式订阅不同数据的主题, 比如 数据增加的 topic, 数据删除的 topic 数据更新的 topic 或者是这几个合并 topic 你没有采用是不是这条路已经被堵死了? 那么 如果这样, 我觉得可以这样: 首先我理解你肯定知道本次查询结果是新增一个 k3 还是失效 k2 还是 k1 更新吧 那么如此你肯定知道怎么做了, 然后自己发送 mq 通知, 然后另一个 worker 去订阅你的 mq 做数据库操作, 我想数据延迟上也不会有问题的, 因为你说数据库只是备份 并不是用来做业务数据直接依赖的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX