redis和 mysql 数据同步的实践

作者: daos | 来源:发表于2017-07-21 14:31 被阅读325次

    场景1:统计访问数量

        统计页面访问数量是很经常的需求,那么如何把redis和mysql做好配合呢?
        首先通过redis的 incs 增加数量
        HINCRBY pro:counter:ID page_view 1 
        页面实时显示redis中的数据(如果需要排序等操作需要单独处理)
        与此同时把对应的key加入到队列中去
        LPUSH pro:list  ID
        根据数据库需求的及时性确定队列的执行频率
        目前使用的定时任务去更新数据如果频率太高不是特别好,不过目前够用了
        RPOP  pro:list
        读取对应的数据更新到数据库中
    

    场景2:后台修改数据的同步

        比如后台操作了用户的某些属性,如何同步到redis数据中?
        mysql->exe('update user set name="xxx" where id=1 ');
        需要同时更新到redis中,简单粗暴的方式就是直接更新到redis中
        hset pro:userinfo:1 name xxx
        也可以分成两步执行,先更新到数据库中,确认无误后通过刷新缓存重新获取用户的信息
    

    场景3:redis数据的不同步问题

      由于用户的帖子数量和帖子列表的操作不是原子操作,如何做到统一?
      可以通过读取发帖列表的总数获得数据
      ZCARD pro:userpostlist:ID
      但是每次都需要计算,也不符合简单的原则,最好的办法是直接读取用户信息中的帖子总数。
      那我们可以定期修正用户信息的总数!
      用户有操作时候进入队列,固定时间内操作一次即可
    
      if(! $redis->exist('pro:userrsync:ID')){
               $num = $redis->zcard('pro:userpostlist:ID');
               $redis->hset('pro:userinfo:ID','post_nums',$num);
               $redis->set('pro:userrsync:ID',1,36000);
      } 
    

    其他待续............

    相关文章

      网友评论

      • 扬沙沙:php可以操作mysql那redis是如何操作mysql
        daos:@扬沙沙 使用的是通过php去操作 redis没有操作mysql
      • 4a9b528a3801:哦 有没有更多的

      本文标题:redis和 mysql 数据同步的实践

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