redis缓存与数据库一致性

redis缓存与数据库一致性

解决方案:
1.1实时同步
对强一致性要求较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新缓存时,先更新数据库,再将缓存设置为过期(建议不要去更新缓存内容,直接设置缓存过期)
用到的注解:

  • @Cacheable: 查询时使用,注意long类型需要转化为string类型,否则会抛异常
  • @CachePut:更新时使用,使用此注解,一定会从DB上查数据
  • @CacheEvict:删除时使用
  • @Caching:组合用法

1.2异步队列

对于并发程度较高的,可采用异步队列的方式同步,采用kafka等消息中间件处理消息生产和消费

1.3使用阿里的同步工具canal
canal实现方式是模拟mysql slave和master的同步机制,监控DB bitlong的日志更新来触发缓存的更新,此种方法可以解放程序员双手,减少工作量,但在使用时有些局限性。
关于mysql主从复制:
(1).master将改变记录到二进制日志(binary log)中(这些记录即二进制日志事件,binary log events可以通过show binary events进行查看)
(2).slave 将master的binary log events 拷贝到它的中继日志(relay log)
(3).slave重做中继日志中的事件,将改变反映它自己的数据

canal的工作原理:
1.canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
2.MySQL master收到dump请求,开始推送binary blog给slave(就是canal)
3.canal解析binary log对象(原始为byte 流)

1.4.采用UDF自定义函数的方式
面对mysql的API进行编程,利用触发器进行缓存同步,但UDF主要是c/c++实现,学习成本高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值