Redis学习之redis与数据库一致性

redis与数据库一致性

实时同步

    适用于对强一致性要求高的情况下。
    即首先查询缓存,查询不到再从数据库查询并且保存到缓存;更新时,首先更新数据库,将缓存的设置过期
    (建议不要更新缓存,或者清空
    
        因为会导致“缓存穿透”:
            查询一个一定不存在的数据时,由于缓存是在不命中时需要从数据库查询,
            数据库查询不到就不会写到缓存,这将导致不存在的数据每次请求都要到数据库去查询,
            造成缓存穿透。

        解决方案:
            数据库查询不到,就给Redis缓存一个空值,
            再次查询时,先到缓存中判断这个key存不存在,如果不存在,就往数据库查询;
            如果存在,再判断该key的value是否为空,如果是,就返回空,如果不是,就返回结果集。

        “缓存雪崩”:
            缓存中的内容集中在一段时间失效,造成大量缓存穿透,所有的请求压力都落在底层数据库上。
        
        解决方案:
            可以分析用户行为,让缓存失效时间均匀分布;
            再缓存失效时,可以考虑加锁或者队列来控制读数据库写缓存的线程数量,
            这样就避免失效时大量并发都落在底层数据库上。
    )

异步队列

    适用于对并发程度要求高的情况下,使用kafka等消息中间件来处理

阿里的同步工具Canal

    模拟MySQL的Master和Slave同步机制,监控数据库的binary log的日志更新记录来更新缓存

Redis脚本

    编写Redis脚本,使用Lua解释器执行

UDF自定义函数

    面对MySQL的API编程,使用触发器来进行缓存更新

任务计划

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值