- 针对某些对数据一致性要求不高的情况,可以直接将数据放在redis,请求来了直接查询redis。而对于实时性强的,则直接穿透redis至mysql上,等到mysql写入成功,再同步到redis。
- 高并发情况下,分两种情况
- 如果请求很多,则直接写入redis,然后每隔一段时间再批量写入刷新到mysql
- 如果请求不多,则在写入redis时同步刷新到mysql。
- 基于订阅binlog的同步机制。可以使用开源框架canal,该框架对mysql的binlog进行订阅,这样一旦mysql中有增删改就会推送至redis,redis根据binlog中的记录进行更新。这种机制类于mysql的主从备份,因为MySQL的主备也是通过binlog来实现的数据一致性。slave数据库中启动了2个线程,一个是MySQL SQL线程,这个线程跟Matser数据库中起的线程是一样的,负责MySQL的业务率执行,而另外一个线程就是MySQL的I/O线程,这个线程的主要作用就是同步Master 数据库中的binlog,达到数据备份的效果。
- redis启动之后,从数据库加载数据
- 读请求
- 不要求强一致的,直接从redis读,要求强一致的,从mysql读
- 写请求
- 都是写入mysql,再更新到redis(先写redis的话如果事务失败回滚会导致redis中有脏数据)
转:https://www.cnblogs.com/zsk-1996/p/9358717.html