为什么要在Redis存数据
Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据 库 IO,还可以提升数据的 IO 性能。
因为Redis基于内存, 查询效率比MySQL快很多, 所以有限查询Redis中的数据,如果Redis没有就查询数据库然后同步到Redis
出现的问题
数据需要同时保存或者发生变化时, 在Redis和MySQL中都要修改, 但是修改总要有个先后顺序,所以会有数据一致性问题.
解决方案
-
先跟新数据后更新缓存
-
缺点: 如果先更新数据库,再更新缓存,如果缓存更新失败,就会导致数据库和 Redis 中的数 据不一致。
2. 先删除缓存后更新数据库
-
缺点: 极端情况下删除Redis和更新数据库不是原子性操作的, 这个期间有其他线程访问还是有数据不一致的问题
-
最终一致性
-
基于RocketMQ的可靠性消息通信来实现
-
使用canal的方式同步MySQL和Redis的数据, 实时监控MySQL的binlog日志把更新后的数据同步到Redis