分布式锁2-缓存一次性解决

本文探讨了如何在分布式环境中保证数据一致性,主要涉及Redisson分布式锁的使用以及Canal数据库同步工具。文章介绍了双写模式和失效模式的优缺点,并提出配合读写锁以确保数据最终一致性。同时,总结了Redis缓存策略,强调了在不同数据一致性需求场景下的应用选择。此外,还讨论了Canal在数据库变更同步到缓存中的作用,以及其在推荐系统中的潜在应用。


分布式锁Redisson笔记: 分布式锁Redisson

缓存特点:保证缓存数据的最终一致性,不能保证缓存数据的及时、强一致性

1 优化获取分类的数据

1)代码

在这里插入图片描述

    public Map<String, List<Category2Vo>> getCatalogJsonFromDbWithRedissonLock() {
        //1.锁的名字,锁的粒度越细,越细越快
        //锁的粒度,具体缓存的是某个数据。11号商品(product-11-lock),product-lock
        RLock lock = redisson.getLock("catalogJson-lock");
        lock.lock();//加锁

        System.out.println("获取分布式锁成功。。。");
            Map<String, List<Category2Vo>> dataFromDb=null;
            try {
                dataFromDb = getDataFromDb();//获得数据库数据
            }finally {
                lock.unlock();//释放锁
            }
            return dataFromDb;
    }

a.怎么保持数据库数据与redis数据一致?

数据一致性
1)双写模式

在这里插入图片描述

原理:修改数据库,还要查询数据库数据,同步到redis缓存,太麻烦
缺点: 数据不一致(但是,可以保证缓存数据的 最终一致性)
解决方案: 配合 加读写锁
2)失效模式

在这里插入图片描述

原理:修改数据库数据、删除redis缓存数据。等待下次查询,主动更新redis缓

存数据

缺点: 数据不一致(但是,可以保证缓存数据的 最终一致性)
解决方案: 配合 加读写锁
3).双写模式、失效模式 都会数据不一致,怎么办?

在这里插入图片描述

解决方案: 配合 加读写锁

2 redis缓存 总结

1).数据一致性 要求高的,去数据库查(缓存+过期时间)

2).数据一致性 要求不高的,就要缓存。怕有脏数据,加上读写锁

3)cannal进行数据库与缓存 数据同步

4) 适用于读多写少的情况

3.Cannal

1).介绍

在这里插入图片描述

2).使用场景

a. canal原理–同步缓存数据

当数据数据发生变化,会把数据存到canal(canal好像数据库副本),再把缓存的数据更新

b. canal原理–推荐系统

如京东等,根据用户的购物车、浏览信息、爱好等,通过canal分析计算 形成新的表,进行对商品的显示。

2).现在可以使用 失效模式,可以加上读写锁。后期可以使用推荐系统!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值