Redis与数据库数据同步解决方案

article/2025/8/27 21:44:05

本文转自:http://3gods.com/2016/06/23/Redis-Sync-DB.html
部分图片来自:http://blog.csdn.net/stubborn_cow/article/details/50586990

数据库同步到Redis

我们大多倾向于使用这种方式,也就是将数据库中的变化同步到Redis,这种更加可靠。Redis在这里只是做缓存。

方案1

做缓存,就要遵循缓存的语义规定:
读:读缓存redis,没有,读mysql,并将mysql的值写入到redis。
写:写mysql,成功后,更新或者失效掉缓存redis中的值。

这里写图片描述

对于一致性要求高的,从数据库中读,比如金融,交易等数据。其他的从Redis读。

这种方案的好处是由mysql,常规的关系型数据库来保证持久化,一致性等,不容易出错。

方案2

这里还可以基于binlog使用mysql_udf_redis,将数据库中的数据同步到Redis。

但是很明显的,这将整体的复杂性提高了,而且本来我们在系统代码中能很轻易完成的功能,现在需要依赖第三方工具,而且系统的整个边界扩大了,变得更加不稳定也不好管理了。

这里写图片描述

Redis同步到数据库

也就是说将Redis中的数据变化同步到数据库,那么这里是将Redis做为db,而真的db,数据库只作为备份。(注意,这里是一种不同看待事物的方式)。

这样做的好处是:大大减小了数据库的压力,但是用redis做内存数据库,状态很不稳定。

虽然redis也有持久化机制,但是redis集群宕机后的重启,数据加热都很耗时。

另一方面,随着大量插入或者更新导致redis持久化操作会严重拖累作为内存KV数据库的优势。

方案1

将redis变更复制一份,丢到队列中,给mysql消费。

这里写图片描述

很明显这种方案,只能保证最终一致性,而且变更数据复制,队列维护,这些杂七杂八的东西太复杂,抛弃。

具体做法是:写redis时,同时将数据写到redis维护的另外一个队列中,但这样又要增加内存消耗了。

其实还有一种方式是使用redis的pipeline通知机制,但是redis是不保证的一定通知到的(得到被通知方的ack)。

方案2

定时刷新redis中的最新数据到mysql。

很明显的,无论定时任务的间距有多小,都会留下时间缝隙,如果发生宕机,故障等都会造成数据的不一致性。

虽然可以通过:比较redis和数据库中的数据,同步那些需要同步的变化数据,但是会加大计算量和程序的复杂度。


http://chatgpt.dhexx.cn/article/HLqU2XxC.shtml

相关文章

跨数据库同步方案汇总

Datax 一般比较适合于全量数据同步,对全量数据同步效率很高(任务可以拆分,并发同步,所以效率高),对于增量数据同步支持的不太好(可以依靠时间戳定时调度来实现,但是不能做到实时&…

唯一性约束(unique)

在字段类型后面加一个unique,表示这个字段的值是唯一的,不能够有相同的值出现。 给某一列添加unique 给两个字段加唯一性约束,不同的方式的约束范围不同 联合加约束时只有两个字段的值都是一样的才会出错 单独加约束时,只要有一个…

ORA-00001: 违反唯一约束条件 的解决办法

最近在做项目是测试的时候出现了这种错误:ORA-00001: 违反唯一约束条件 其实说白了这种错误就是 数据库的ID值,小于他的next number 由于表的ID是唯一的,所以用 select max(id) from test 查的该ID大于Sequences里面的开始ID,所以…

ORA-00001: 违反唯一约束条件 -- 解决方法

1、错误 Caused by: java.sql.BatchUpdateException:ORA-00001: 违反唯一约束条件 (SOLEX.SYS_C0012537) 2、分析 ①通过SYS_C0012537找到对应的表 select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_col…

ORA-00001: 违反唯一约束条件解决方案(oracle 00001)

原因 主要原因是在进行插入INSERT或者更新UPDATE的时候,违反唯一约束,导致操作某行数据时出现重复的值。 解决方案 删除或者更改唯一约束。 修改你使用的插入INSERT或者更新UPDATE的语句。 如果当有多个表进行操作时,你不知道哪个表出现…

ORA-00001: 违反唯一约束条件(SOLEX.SYS_C0012537) --解决方法

1、错误 Caused by: java.sql.BatchUpdateException:ORA-00001: 违反唯一约束条件 (SOLEX.SYS_C0012537) 2、分析 ①通过SYS_C0012537找到对应的表 select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_colu…

SQL Server唯一约束

SQL Server唯一约束 SQL Server UNIQUE约束简介 SQL Server UNIQUE 约束用于确保存储在列或列组中的数据在表中的行中是唯一的。 以下语句创建一个表: hr.persons ,其 email 邮件列中的数据在表的行中是唯一的: 在此语法中,将 U…

MYSQL 唯一约束

一、唯一约束(UNIQUE) 唯一约束用来保证一列(或一组列)中的数据是唯一的。类似与主键,但是有以下区别: 表可包含多个唯一约束,但每个表只允许一个主键。 唯一约束列可包含 NULL 值。唯一约束列…

oracle ORA-00001: 违反唯一约束条件

在一个平平常常的工作日,被这玩意坑了一下。 在一个日常删除插入的时候居然报了 违反唯一约束条件 的错,打断点也没发现问题,一路运行下去都没错,但是就是在方法的最后一个括号,报错了,搞的我一脸懵逼。 回…

ORACLE updata是提示违反唯一约束条件

如图所示,使用updata语句时提示违反唯一约束条件: 语句如下: update table_name set param1‘xxx’,param2‘xxx’ where param4‘xxx’; 解决办法: 一、能用Navicat for Oracle或者sqlplus连接oracle 这里就不用说…

ORACLE 数据库插入数据违反唯一性约束条件,如何删除约束条件

在同一个oracle 数据库中新建了多个不同的表空间,共享了同一个表空间结构,导致不同表空间产生了同名的约束条件,导致在插入数据的时候报错 违反唯一性约束条件 1.第一步在数据库的客户端查找报错的唯一性约束条件 select * from dba_const…

唯一性约束

目录 唯一性约束 vip.sql脚本文件中的sql语句: select * from t_vip; insert into t_vip(id,name,email) values(4,wangwu,wangwusina.com); insert into t_vip(id) values(4); insert into t_vip(id) values(5); 1. 新需求:name和email两个字段联…

ORA-00001: 违反唯一约束条件 --解决方法

1、错误 Caused by: java.sql.BatchUpdateException:ORA-00001: 违反唯一约束条件 (SOLEX.SYS_C0012537) 2、分析 ①通过SYS_C0012537找到对应的表 select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_colu…

违反唯一性约束条件的报错

控制台报错后无思路,一开始以为是控制台给出的sql语句的问题。对自己的测试数据太过于自信,觉得不会是数据问题,其实就是数据问题,数据重复了。遇到这种情况,要根据控制台的报错,找到相对应的表&#xff0c…

Oracle数据库违反唯一约束条件

Oracle数据库违反唯一约束条件 问题 ORA-00001: 违反唯一约束条件 (xxx.SYS_C0014310) 原因 数据库的ID值,小于序列的next number值,由于表中的ID值是唯一的,所以select max(id) from test 查的该ID大于Sequences里面的开始ID 解决办法 使用s…

违反唯一性约束的两种可能:唯一约束or唯一索引

ORA-00001: 违反唯一约束条件 这一个报错相信大家在插入数据时还是经常遇到的,尤其是在测试环境。 但是今天我在处理一个生产问题的时候再次遇到这个报错时有点奇怪: 1.该表(记为表A)的主键是数据库序列生成的,不存在…

违反唯一约束条件 ORA-00001

1.向用户表新增记录,报违反唯一约束条件 ORA-00001。 2.因为表里设置了自增长字段,当自增长字段的起始值小于现有记录的最大值,就会报错。 如表里有526条记录,自增长的值应该是从526以后的值开始,但是自增长的设置值却…

二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解

0. 写在最前面 希望大家收藏: 本文持续更新地址:https://haoqchen.site/2018/05/23/go-through-binary-tree/ 复习到二叉树,看到网上诸多博客文章各种绕,记得头晕。个人觉得数学、算法这些东西都是可以更直观简洁地表示&#xf…

二叉树的前序遍历(递归)

遍历的作用: 它是树结构插入,删除,修改,查找和排序运算的前提,是二叉树一切运算的基础和核心。 遍历二叉树——从根结点触发,按照某种次序依次访问二叉树中所有结点,使得每个结点均被访问一次…

二叉树遍历应用之根据前序遍历建树

文章目录 题目描述题目分析及实现思路根据前序遍历序列建立二叉树 题目实现完整代码 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串&#xff1a…