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

redis 和 mysql 同步各位是怎么实现的?

  •  
  •   li734462972 · 2016-10-26 11:01:45 +08:00 · 10024 次点击
    这是一个创建于 2942 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教 redis 如何做到和 mysql 数据库的同步呢? 暂时没找到合理的方案,希望从各位这儿弄点干货。

    22 条回复    2017-03-25 13:22:41 +08:00
    li734462972
        1
    li734462972  
    OP
       2016-10-26 11:08:57 +08:00
    来一发!
    veelog
        2
    veelog  
       2016-10-26 13:19:49 +08:00 via Android
    你这所谓的同步时啥???一般不是将 redis 当作任务队列,然后程序处理完再写入数据库吗??
    yidinghe
        3
    yidinghe  
       2016-10-26 13:54:41 +08:00 via Android
    没法同步,一个关系数据库,一个 nosql
    rebirth2
        4
    rebirth2  
       2016-10-26 14:17:54 +08:00 via Android
    以前碰到过的一个应用场景是 redis 做 web app 的 cache layer ,然后需要跟关系型数据库的最新交易数据同步,比如显示最新统计数字等,这样把 redis 放在关系型数据库前面减少读取和复杂查讯的次数,减轻负荷
    rebirth2
        5
    rebirth2  
       2016-10-26 14:22:17 +08:00 via Android
    可以利用关系型数据库的通知系统,比如 postgres 的 notify/listen 机制,实现从数据库到 redis 的 push ;有些数据库的 external table/data source 支持 redis 的话也是一个思路
    wuyadong
        6
    wuyadong  
       2016-10-26 14:50:34 +08:00
    缓存更新?
    li734462972
        7
    li734462972  
    OP
       2016-10-26 15:00:30 +08:00
    @veelog 好吧 我可能没表达清楚,比如每天用户的操作,文章发布,点击量,登录次数等写到 redis ,每天凌晨把数据更新到数据库里!
    li734462972
        8
    li734462972  
    OP
       2016-10-26 15:00:39 +08:00
    @rebirth2 好吧 我可能没表达清楚,比如每天用户的操作,文章发布,点击量,登录次数等写到 redis ,每天凌晨把数据更新到数据库里!
    li734462972
        9
    li734462972  
    OP
       2016-10-26 15:00:48 +08:00
    @wuyadong 好吧 我可能没表达清楚,比如每天用户的操作,文章发布,点击量,登录次数等写到 redis ,每天凌晨把数据更新到数据库里!
    zhidian
        10
    zhidian  
       2016-10-26 15:12:33 +08:00 via Android
    你可以同时 @ 三个人的。。。感觉你这叫导入。
    misaka19000
        11
    misaka19000  
       2016-10-26 15:20:55 +08:00
    @li734462972 这应该可以写个脚本在每天指定时间来自动完成吧,而且也不是很复杂
    li734462972
        12
    li734462972  
    OP
       2016-10-26 15:50:08 +08:00
    @zhidian
    @misaka19000

    果然可以同时艾特~
    好吧,那就用写个脚本吧~~谢谢各位
    pubby
        13
    pubby  
       2016-10-26 16:01:57 +08:00 via Android
    按照 mysql 的主从复制协议实现一个假的 slaver ,过滤出你要同步的数据,写入 redis
    pubby
        14
    pubby  
       2016-10-26 16:03:11 +08:00 via Android
    哦,好吧,反了。写定时脚本处理吧
    wupher
        15
    wupher  
       2016-10-26 16:05:20 +08:00
    如果你的 Server 是 Java 编写,且使用 Spring ,可以考虑使用 SpringCache 通过标签自动将 DTO 对象映射至 Redis 中。

    Spring 会帮你生成实现,查询时首先查询 Cache ,查询失败后再从 MySQL 加载数据。

    同样, update 以及 insert , delete 时,通过标签,同步更新 Redis 数据。

    实现上述功能,仅需要在你的 DAO 层函数上打上标签即可。
    li734462972
        16
    li734462972  
    OP
       2016-10-26 16:07:01 +08:00
    @pubby 哈哈哈,不过还是谢谢你~~不行我再乐会儿.....
    li734462972
        17
    li734462972  
    OP
       2016-10-26 16:07:49 +08:00
    @wupher 这个表示看的懵逼...原谅我用了最好的语言,,,,
    adv007
        18
    adv007  
       2016-10-26 17:59:08 +08:00 via iPhone
    搞个脚本订阅 redis 的频道然后灌到 mysql
    wingyiu
        19
    wingyiu  
       2016-10-26 23:34:49 +08:00
    ywgx
        20
    ywgx  
       2016-10-27 09:08:36 +08:00 via iPhone
    这不叫同步,叫导入
    noahzh
        21
    noahzh  
       2016-10-27 09:21:30 +08:00
    实现 redis 同步协议就可以了。。。
    leonchen83
        22
    leonchen83  
       2017-03-25 13:22:41 +08:00
    https://github.com/leonchen83/redis-replicator/blob/master/README.zh_CN.md
    这个库完整实现了 redis 的同步协议,可以用来进行数据同步
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:38 · PVG 06:38 · LAX 14:38 · JFK 17:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.