V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxm
V2EX  ›  Redis

问一个关于 redis hash 的问题

  •  
  •   wxm · 2021-03-28 14:12:01 +08:00 · 1683 次点击
    这是一个创建于 1363 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有个场景,有个定时每分钟先从第三方接口查询数据在本地,然后处理完放到 redis 里面,再把处理完的数据存到数据库备份。三方接口的数据每次返回的数据可能不一样,我用 hash 结构存储这些数据,hmset domain k1 v.toString k2 v.toString,因为下一次可能新增 k3,k2 失效,k1 更新。我不想每次 hmset 都先删除这个 domain,请问有什么其他好的解决方案。数据库备份是先删库再 insert 。都是先删再 inser 感觉操作有点太重了。存成 hash 是因为条 v 有高频查询需求。
    2 条回复    2021-03-29 09:49:04 +08:00
    FaceBug
        1
    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
        2
    palmers  
       2021-03-29 09:49:04 +08:00
    我理解 你这是在做数据异构吧? 然后从另一个角度想这个第三方的数据是否可以通过 mq 的方式订阅不同数据的主题, 比如 数据增加的 topic, 数据删除的 topic 数据更新的 topic 或者是这几个合并 topic 你没有采用是不是这条路已经被堵死了? 那么 如果这样, 我觉得可以这样: 首先我理解你肯定知道本次查询结果是新增一个 k3 还是失效 k2 还是 k1 更新吧 那么如此你肯定知道怎么做了, 然后自己发送 mq 通知, 然后另一个 worker 去订阅你的 mq 做数据库操作, 我想数据延迟上也不会有问题的, 因为你说数据库只是备份 并不是用来做业务数据直接依赖的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2718 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:37 · PVG 13:37 · LAX 21:37 · JFK 00:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.