redis主从在springboot怎么配置 redis和数据库如何保证一致性?

[更新]
·
·
分类:互联网
3490 阅读

redis主从在springboot怎么配置

redis和数据库如何保证一致性?

redis和数据库如何保证一致性?

1、不一致产生的原因?
我们在是使用redis过程中,通常会这样做,先读取缓存,如果缓存不存在,则读取数据库。
不管是先写库,再删除缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况。
因为写和读是并发的,没法保证顺序,如果删除了缓存,还没有来得及写库,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。如果先写了库,在删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。
如果是redis集群,或者主从模式,写主读从,由于redis复制存在一定的时间延迟,也有可能导致数据不一致。
2、优化思路
(1)读操作优先读取redis,不存在的话就去访问MySql,并把读到的数据写回Redis中;
(2)写操作的话,直接写MySql,成功后再写入Redis,替换掉原来的旧数据(可以在MySql端定义CRUD触发器,在触发CRUD操作后写数据到Redis,也可以在Redis端解析binlog,再做相应的操作)
(3)设定合理的超时时间,即经过超时时间,自动将redis中相应的数据删除。这样最差的情况是在超时时间内,内存存在不一致。当然这种策略要考虑redis和数据库主从同步的耗时,所以在第二次删除前最好休眠一定的时间,比如500毫秒,这样无疑又增加了写请求的耗时。

mysql主从和redis主从逻辑一样吗?

不一样,mysql的主从复制是从接入点开始,主机之前的数据,从机不会复制,但是redis是从头开始备份,主机之前的数据,从机也会获得。

redis减库存挂了怎么处理?

从机的redis命令行输入slaveofnoone转换为主机,然后要么修改主机ip要么修改java程序中的主机ip地址。 另外建议看下redis sentinel 主从切换(failover)解决方案

redis主备同步原理?

2.8主备同步sync原理:
1.从服务器向主服务器发送SYNC命令
2.主服务器执行BGSAVE命令,生成RDB文件,并使用一个缓冲区记录从bgsave开始的所有写命令
3.主服务器BGSAVE执行完后,讲RDB发送给从服务器,从服务器载入RDB文件,将自己的状态更新至主服务器的BGSAVE时的状态
4.主服务器将缓冲区的写命令发送给从服务器,从服务器执行写命令,讲从服务器更新为主服务器的当前态
2.8及以前,主从断开连接需要重新sync初始化
2.8以后,支持部分重同步(psync)
1.主从断开后,从库发送psync命令
2.向从库返回 continue命令,表示执行部分重同步
3.接受 continue命令,准备执行部分重同步
4.想从服务器发送自断开连接以来的写入命令
5.从库执行写入命令