This topic created in 1871 days ago, the information mentioned may be changed or developed.
现在有个场景,有个定时每分钟先从第三方接口查询数据在本地,然后处理完放到 redis 里面,再把处理完的数据存到数据库备份。三方接口的数据每次返回的数据可能不一样,我用 hash 结构存储这些数据,hmset domain k1 v.toString k2 v.toString,因为下一次可能新增 k3,k2 失效,k1 更新。我不想每次 hmset 都先删除这个 domain,请问有什么其他好的解决方案。数据库备份是先删库再 insert 。都是先删再 inser 感觉操作有点太重了。存成 hash 是因为条 v 有高频查询需求。
2 replies 2021-03-29 09:49:04 +08:00  | | 1 FaceBug Mar 28, 2021 如果是我,在数据量不大的情况,我觉得我可能这么做
1 、每次抓到新数据,直接写入数据库,暂时不删旧的数据,也不碰 redis
2 、设置一个按照规则读取不同 key 的方案,当时间为 0-2 时,读 key_0,为 3-5 时读 key_3
3 、如果发现没有设置 redis key_3,去数据库找 key_3 (就和平时用 redis 做缓存一样操作)
4 、定时删除过期的 key 和 mysql
这样我也懒得比较是更新还是删除还是新增,每次都直接用最新的完整版数据就完事了 |
 | | 2 palmers Mar 29, 2021 我理解 你这是在做数据异构吧? 然后从另一个角度想这个第三方的数据是否可以通过 mq 的方式订阅不同数据的主题, 比如 数据增加的 topic, 数据删除的 topic 数据更新的 topic 或者是这几个合并 topic 你没有采用是不是这条路已经被堵死了? 那么 如果这样, 我觉得可以这样: 首先我理解你肯定知道本次查询结果是新增一个 k3 还是失效 k2 还是 k1 更新吧 那么如此你肯定知道怎么做了, 然后自己发送 mq 通知, 然后另一个 worker 去订阅你的 mq 做数据库操作, 我想数据延迟上也不会有问题的, 因为你说数据库只是备份 并不是用来做业务数据直接依赖的 |