- redis缓存使用 注解
- Cacheable 使用 查询缓存
- CachePut 使用 更新缓存
- redis缓存与数据库双写一致性解决方案
- 阿里canal
 拼起来
#p0: 这个固定语法,#代表标识符,p表示param,0表示第一个参数
使用场景
如果该对象不会被修改,或者修改的对象非常少,访问量特别高,可以将该对象放到缓存,不从数据库读取。
例子
1:系统公告
使用该注解:
表示redis缓存 和数据库 同步修改
注意:
redis key值要相同 不然无法更新缓存数据
案发场景
案发1:当一个数据在做删除操作的时候,先删除redis,然后业务时间比较长,再删除的db数据库,这个时候缓存第一时间删除了,但是当删除缓存到删除db数据库的这个时间段,有一个查询这条数据的请求进来了,这个时候会发现redis没有数据,但是db数据库有数据,这个时候又会把db数据库的数据缓存到redis缓存。
结果:删除执行以后,明明执行了删除缓存,db数据库删除成功了,redis缓存还在。
解决方法
延时双删
就是删除的时候 进去就把redis缓存删除执行逻辑后,删除db数据库,删除成功后,接着再一次删除redis缓存,这样就不会出现缓存还在的问题。
使用RabbitMQ解决
rabbitmq是有序的,保证缓存的一个有序的
canal服务
阿里Canal主要是通过伪装成mysql从server来向主server拉取数据
Canal在双写一致性中所处的位置
1:canal模拟mysql slave的交互协议,伪装自己为 mysql slave,向mysql master发送dump协议。
2:mysql master收到dump请求,开始推送binary log 给 slave(也就是canal)
3:canal解析binary log 对象(原始为byte流)
4:canal将解析后的对象数据推送给监听的消息中间件(实时主动推送,rabbitmq需要是在线状态)
canal服务安装配置
下载安装包,修改配置
总结



