from: http://blog.csdn.net/langzi7758521/article/details/52611910

最近在做一个Redis箱格信息数据同步到数据库Mysql的功能。

自己想了想,也有大概方案。

1.队列同步,变跟数据2份,使用消息队列,一份给Redis消费,一份给Mysql消费。

2.后台定时任务,定时刷新Redis中箱格信息到数据库。

网上也到处找了下解决方案,发现这么个问题,居然是天下一大抄,还抄的一字不差,我也抄吧。

方案一:

读: 读redis->没有,读mysql->把mysql数据写回redis

写: 写mysql->成功,写redis。

就是读的话,先读Redis,Redis没有再读数据库,将数据库中的数据放入Redis。

写(增删改),先写数据库,然后写Redis。

可以对此稍微优化,比如要求一致性高的数据,从数据库读,比如金融,交易数据。不要求强一致性的从Reids中读取。

方案二:

基于binlog使用mysql_udf_redis,将数据库中的数据同步到Redis。

方案三:

基于MQ,也就是最上面想到的方式1。

方案四:

官方有个memcached的udf插件,如果不是那么强烈非要redis的话,也可以考虑

如果是我选择2,顺便推荐发下大神的广告:http://coolshell.cn/articles/17416.html

方案五:

用POSTGRESQL 替代 Mysql +Redis.

各种方案弊端

但是上面的方案都有各自的弊端。

方案一,明显对于数据量巨大,更新频繁的数据写入无能为力。比如E栈终端的箱格,箱格数量巨大,每个箱格的变跟状态又很频繁,这样很容易把数据库写挂。

方案二,是使用的mysql的User Defined Function功能,mysql_udf_redis是有人实现的同步数据到Redis的功能,弊端:需要学习成本,而来,第三方的插件不稳定。

方案三:怎么保证到数据库和到Redis中的状态一致性。就是假设一条修改数据,从队列写入到Mysql成功,但是写入到Redis失败,这种如何搞。还有就是需要一个消息队列,使用第三方的比如Kafka,RabbitMq等来实现,管理起来不方便,系统整体稳定性不行,而且只是这么个比较小的箱格数据信息同步。有点杀鸡用牛刀。

其他的方案:

订阅key的变化进行数据库更新,写的时候写2份,一份往Redis写,一份是Redis数据的key网更新队列(也可以直接Reids存)里写,再写个定时程序从更新队列里取时间,根据key取出Redis数据到Mysql.

这个方案,其实和其他的不一样,弊端了,就是占用内存大,因为需要维护一份更新队列。

最后了,我上级是说用定时任务,刷Redis中的箱格状态信息到数据库。2W个终端,一个终端100个箱格,200W个箱格,首先是进行状态比对,状态不一致的放入集合,批量update数据库。

其实也会有写小问题,比如在比对的时候:

1.Redis中的箱格状态变跟了,怎么办?我们不可能在比对的时候锁住Redis,200W次循环,这段时间完全可能发生状态变跟。

2.在比对的时候,有人更新了数据库,怎么办?因为有些操作是可以直接更新数据库的。比如更新箱格的layoutRow之类的信息。

来自:http://3gods.com/2016/06/23/Redis-Sync-DB.html

参考:http://coolshell.cn/articles/17416.html

http://www.cnblogs.com/linjiqin/p/3569011.html

转载:MySQL和Redis 数据同步解决方案整理的更多相关文章

  1. Mysql和Redis数据同步策略

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

  2. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  3. 用 C# 写一个 Redis 数据同步小工具

    用 C# 写一个 Redis 数据同步小工具 Intro 为了实现 redis 的数据迁移而写的一个小工具,将一个实例中的 redis 数据同步到另外一个实例中.(原本打算找一个已有的工具去做,找了一 ...

  4. redis数据同步之redis-shake

    redis-shake简介 redis-shake是阿里开源的用于redis数据同步的工具,基本功能有: 恢复restore:将RDB文件恢复到目的redis数据库. 备份dump:将源redis的全 ...

  5. mysql 集群 数据同步

    mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redi ...

  6. Redis数据存储解决方案

    http://www.tuicool.com/articles/77nUZn 1.背景 1.1 Redis简介 官方网站: http://redis.io/ ,Redis是REmote DIction ...

  7. Mysql、ES 数据同步

    数据同步中间件 不足:不支持 ES6.X 以上.Mysql 8.X 以上 ime 标识最大时间 logstash全量.增量同步解决方案 https://www.elastic.co/cn/downlo ...

  8. Mysql和Redis数据如何保持一致

    先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性:Redis是用来当缓存,用来提升数据访问的性能. 关于如何保证Mysql和Redis中的数据一致 ...

  9. Mysql与Redis的同步实践

    一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文 ...

随机推荐

  1. Vquery PHP 简单爬虫类

    http://www.thinkphp.cn/topic/36693.html 在使用php进行网页抓取的时候你有没有感觉到用起来比较麻烦呢?目前我还没有发现php有这样针对网页抓取的类,每次用到这个 ...

  2. 【转】每天一个linux命令(59):rcp命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/03/14/2958685.html rcp代表“remote file copy”(远程文件拷贝).该命 ...

  3. druid:阿里巴巴开源,数据库连接池管理

    官方地址:https://github.com/alibaba/druid

  4. Zigbee 的 mesh功能设置

    1. 在编译选项中加入ZIGBEEPRO 最大的节点深度为20,网络模式为mesh网络 如果不配置,则为HOME_CONTROLS,支持5级路由深度,每个路由器最多可连接20个节点(最多包括6个路由器 ...

  5. 获取post发送过来的xml包

     if (Request.HttpMethod.ToLower() == "post") { byte[] ar; ar = new byte[this.Request.Input ...

  6. Hadoop高级培训课程大纲-开发者版

    一.课程概述 本次培训课程主要面向大数据系统管理人员和开发设计人员,基于开源社区大数据应用最活跃的Hadoop和HBase技术框架,围绕分布式文件存储(HDFS).分布式并行计算(Map/Recue) ...

  7. Java堆外内存之四:直接使用Unsafe类操作堆外内存

    在nio以前,是没有光明正大的做法的,有一个work around的办法是直接访问Unsafe类.如果你使用Eclipse,默认是不允许访问sun.misc下面的类的,你需要稍微修改一下,给Type ...

  8. 新生代老年代GC组合

    新生代通常存活时间较短,因此基于Copying算法来进行回收,所谓Copying算法就是扫描出存活的对象,并复制到一块新的完全未使用的空间中 在执行机制上JVM提供了串行GC(SerialGC).并行 ...

  9. GC 提前晋升

    如果Survivor 空间不足, 那么从 Eden 存活下来的和原来在 Survivor 空间中不够老的对象占满 Survivor 后, 就会提升到老年代, 可以看到这一轮 Minor GC 后老年代 ...

  10. 如何判断自己的浏览器支持的是javascript的那个版本

    <script language="javascript"> var jsversion = 1.0; </script> <script langu ...