美文网首页
[线上问题]redis从节点exists引起的问题

[线上问题]redis从节点exists引起的问题

作者: 程序员小鬼 | 来源:发表于2020-07-27 17:09 被阅读0次

    【背景】

    最近线上陆续有人报bug,关注列表中明明关注了用户,但是没有返回关注列表。经排查发现关注服务接口返回数据为空。关注方经排查发现redis在从库上使用exists做判断,已经失效的数据,仍然返回ture.虽然不知道关注业务方是什么样的业务逻辑。但是对于redis这个问题还是感兴趣。【Redis相关知识】

    一般的在qps较高的业务上,我们习惯上采用读写分离来减小数据库的负载,Redis也可以这么做。
    1、主从同步

    2、过期键处理
    ①惰性删除
    使用的时候再检查时候过期,过期才删除
    ②定时删除
    主键过期,立马删除
    ③定期删除
    设定一个周期,定期去扫描主键,删除过期主键

    redis里面使用的惰性删除和定期删除

    【疑问一】为什么在从库上exists会返回true

    从库redis的数据完全依赖主库,不会发生修改操作,当对从库进行exists时,数据过期也不会向从库发送del message.因此返回结果为ture.解决办法就是使用ttl替代exists

    【疑问二】用户反馈大半天时间,这个bug还是存在
    定期删除策略按默认10秒扫描一遍,一次扫描1000个,半天也能扫描400多万。不至于bug时间持续半天,扒了一下代码,扫描策略不是顺序扫描。


    image.png

    相关文章

      网友评论

          本文标题:[线上问题]redis从节点exists引起的问题

          本文链接:https://www.haomeiwen.com/subject/bpwzlktx.html