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


分布式锁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).现在可以使用 失效模式,可以加上读写锁。后期可以使用推荐系统!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值