美文网首页
Redis与DB数据同步问题

Redis与DB数据同步问题

作者: HappyCai | 来源:发表于2017-04-03 14:53 被阅读1467次

    最近在忙的项目中很多地方需要用到了Redis,其中要考虑缓存数据与持久化数据的一致性,网上找了一些资料这里做记录一下,其实就是读和写,还有就是要注意谁先谁后的问题。

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

    一般的使用Redis的场景应该是这样的:
    场景一
    • 先去redis中判断数据是否存在,如果存在,则直接返回缓存好的数据。而如果不存在的话,就会去数据库中,读取数据,并把数据缓存到Redis中。
    • 适用场合:如果数据量比较大,但不是经常更新的情况(比如用户排行)
    第二种Redis的使用,跟第一种的情况完成不同,具体的情况请看:
    场景二

    先去redis中判断数据是否存在?

    • 如果存在,则直接更新对应的数据(这一步会把对应更新过的key记录下来,比如也保存到redis中比如:key为:save_update_keys【用lpush列表记录】),并把更新后的数据返回给页面。
    • 如果不存在的话,就会去先更新数据库中内容,然后把数据保存一份到Redis中。
    • 后面的工作:后台会有相关机制把Redis中的save_update_keys存储的key,分别读取出来,找到对应的数据,更新到DB中。

    优点:这个流程的主要目的是把Redis当作数据库使用,更新获取数据比DB快。非常适合大数据量的频繁变动(比如微博)。

    * 缺点*:对Redis的依赖很大,要做好宕机时的数据保存。(不过可以使用redis的快照AOF,快速恢复的话,应该不会有多大影响,因为就算Redis不工作了,也不会影响后续数据的处理。)

    难点:在前期规划key的格式,存储类型很重要,因为这会影响能否把数据同步到DB。


    前提:较少变更的数据才适合做缓存缓存读取流程:

    1. 先到缓存中查数据
    2. 缓存中不存在则到实际数据源中取,取出来后放入缓存
    3. 下次再来取同样信息时则可直接从缓存中获取缓存更新流程:
        1) 更新数据库:这个流程的主要目的是把Redis当作数据库使用,更新获取数据比DB快。非常适合大数据量的频繁变动(比如微博)。
      更新数据库
        2) 使缓存过期或失效,这样会促使下次查询数据时在缓存中查不到而重新从数据库去一次。
      通用缓存机制:
          a. 用查询的方法名+参数作为查询时的key value对中的key值
          b. 向memcache或redis之类的nosql数据库(或者内存hashmap)插入数据
          c. 取数据时也用方法名+参数作为key向缓存数据源获取信息java实现可参考ehcache

    相关文章

      网友评论

          本文标题:Redis与DB数据同步问题

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