【谷粒商城】redisson的使用(P159)

前言

官网
https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95
谷粒教程
https://www.bilibili.com/video/BV1np4y1C7Yf?p=159&spm_id_from=pageDriver

学习

可重入锁(应该都这样设计)

比如A方法调用了B方法,A方法加了锁,那么B方法就可以直接用这个锁。逻辑结束,A方法释放锁。

不可重入锁

A方法加了锁,A调B,B方法也要枷锁,但是需要A先释放,B才能加。

Redisson

Redisson解决了锁的自动续期

如果业务超长,每间隔10秒会自动续期,续期后时间30秒

如果设置了过期时间,则过期后不会自动续期

如果手动设置了过期时间,则过期后,不管业务是否跑完,就会释放锁。

lock.lock(10, TimeUnit.SECONDS);

readWriteLock 读写锁

https://www.bilibili.com/video/BV1np4y1C7Yf?p=162&spm_id_from=pageDriver
在一个锁没结束,另一个锁就要等待
读锁是一个共享锁(和没加一样,不影响其他人读)
写锁是一个排他锁(互斥锁,只要有写,必须等待)
写 + 读:等待写锁释放
写 + 写: 阻塞方式
读 + 写:等待读锁释放

trylock

待补充

Semaphore 信号量

示例:停车入库,开走。总数量3。阻塞模式
还可以做限流

CountDownLatch 闭锁

待补充

总结

  • redisson底层代码都是通过lua脚本实现的,保证了原子性;
  • 并且有看门狗机制,解决了死锁问题;
  • 通过锁的命名,解决锁的力度问题。示例:product-11-lock, product-12-lock, product-lock。
    数据要区分开来,没有关系的数据一定不要被其他的锁影响到
    https://www.bilibili.com/video/BV1np4y1C7Yf?p=166&spm_id_from=pageDriver
  • 缓存数据一致性
    • 双写模式:改完数据库,把缓存里面的也改了
    • 删除缓存:改完数据库,把缓存删了。下次再查,会查询数据库

缓存一致性的解决方案

  1. 缓存数据加上过期时间
  2. 给数据加上合适的锁。
    比如读写锁。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值