转载:MySQL和Redis 数据同步解决方案整理

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

时间: 2024-11-06 10:13:00

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

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

一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步.在部分场合可以对关系数据库起到很好的补充作用.它提供了Java,C/C++(hiredis),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便. 二.架构图<ignore_js_

Redis数据存储解决方案

1.背景1.1 Redis简介 官方网站:http://redis.io/,Redis是REmote DIctionary Server的缩写. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.它跟 memcached 类似,不过数据可以持久化,而且支持的数据类型很丰富.它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点.从而

多台服务器之间如何让sqlserver,mysql数据库进行数据同步?

服务器存储视频,带宽不够用,想用多台服务器,如何让所有服务器之间视频实时同步,可以用什么软件!当企业租用服务器,但是在数据同步的时候,又有着严格的要求,要求数据达到一致,在科技发达的今天,这又该如何做到了?下面天下数据为大家介绍多台服务器之间让数据同步的方法! 1.采用高可用sureHA软件镜像型,一台主服务器,一台备服务器,通过心跳线(网线)实时将数据备份,实现服务器双机互备的功能,此方式保证多台服务器之间数据的一致性. 2.采用高可用sureHA双机热备共享型.一台主服务器,一台备服务器,链

MySQL数据库异构数据同步–后端以tair为例

在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式时候,MySQL的异构数据同步,可以更简单和更通用. 以tair为例,简要描述一下以MySQL为基础的一种方案. 所谓异构数据同步,是指应用只更新MySQL,而由后端的某些机制将这些更新应用到其他数据存储服务上. 1. MySQL-Tair 引擎 a)       使用 b)       说明 这不是一个"存储引擎",实际上数据存储在tair服务器上.执行insert/update/delete时,只是将

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

用 C# 写一个 Redis 数据同步小工具 Intro 为了实现 redis 的数据迁移而写的一个小工具,将一个实例中的 redis 数据同步到另外一个实例中.(原本打算找一个已有的工具去做,找了一个 nodejs 的小工具,结果折腾了好久都没装上...于是就自己写了这个小工具) 之所以自己写一个工具而不是利用 redis 备份机制来实现,主要是因为我们用的是 redis 云服务,不能像自己的服务器一样 SSH 上去一顿操作,要把云服务的 redis 数据同步到自己服务器上的 redis 实例

mysql 集群 数据同步

mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redis缓存来保存内存中数据,使用redis同步功能来同步不同服务器内存中的数据: 4.在通过mysql的集群配置来实现数据库数据同步: 这里我整理了几种数据同步方式: 一:主从服务器同步: 顾名思义:主服务器负责数据的增删改查,从服务器负责同步数据: 主服务器建立二进制文件:每产生语句变化或磁盘变化写入

统一数据同步解决方案

每天进步一点点! 前段时间一个项目需要做数据同步,考虑到数据同步功能在很多地方都会涉及到,所以将功能提炼出来,做成统一的组件,供公司所有的项目使用,在此将实现方案记录下来,希望对其他人有用. 背景: 背景是这样的,互联网公司,做社区O2O产品的,目前需要做一套停车收费系统以及道闸控制系统,我们的产品中心数据肯定放在云端,处理缴费充值等业务:但停车收费系统在部署到物业公司小区,这就涉及到需要将云端的数据同步到局域网的服务器,同时也会涉及到局域网产生的数据同步到云端:而且局域网有可能是联网的,也可能

Redis 学习笔记四 Mysql 与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 安装gearman-mysql-udf apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-my

Mysql 与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 安装gearman-mysql-udf apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-my