美文网首页
关于缓存的一些总结(5)

关于缓存的一些总结(5)

作者: Y先生的领地 | 来源:发表于2021-03-04 09:25 被阅读0次

我们虽然之前已经通过redis的客户端实现了分布式锁,但是redis官网并不提倡这么做


image.png

它推荐我们使用redission


image.png

本章就来讲解一个非常重要的工具--redisson
官网:https://redisson.pro/
github学习:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95

入门实例--可以通过github的官方文档的快速入门进行配置,当然如果你使用的是springboot,有个快速启动包,用到再说吧
第一步:导入依赖包
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.15.0</version>
</dependency>
第二步:编写配置文件

image.png

第三步:单元测试,看是否能拿到redisClient实例


image.png

第四步:通过redisClient进行分布式锁的操作


image.png

注意:测试时需要同时访问应用,看是否一个请求访问,另一个在等待。
原理跟我们之前使用redis是一样的,redisson会在redis数据库中写一个标识:


image.png

lock()方法的一些解读:
我们设想一种场景:如果我编写的业务代码,最后没有执行finally中的解锁代码,那么redisson会不会出现死锁问题呢?
答案是:不会
我们可以通过以上代码,通过浏览器发送一个请求,在代码休眠过程中,将代码暂停,也就意味着代码不会执行到解锁的地方,我们再次发送一个请求,发现请求过一会儿就可以访问到结果,这也是redisson强大的地方:即使代码运行过程中出现异常,也不会出现死锁的问题。
大致可以解释为:
1、锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s。不用担心业务时间长,锁自动过期被删除
2、加锁的业务只要运行完成,就不会给当前锁续期,即使不动手解锁,锁默认在30s以后也会自动删除。


image.png

关于Redisson实现分布式锁的一些延伸:
1、分布式闭锁操作
什么是闭锁呢?比如学校放假,学校有五个班级,每走一个班级就减一,直到为0,锁才关闭。记好了,这个是分布式的,就是不管运行多少个应用,计数单位都是5个。


image.png
2、信号量的操作:省略
3、读写锁等
以上都可以自行学习,都在官网的文档中,也不难。

相关文章

  • 关于缓存的一些总结(5)

    我们虽然之前已经通过redis的客户端实现了分布式锁,但是redis官网并不提倡这么做 它推荐我们使用rediss...

  • 关于缓存的一些总结

    在项目编写过程中经常为了查询业务速度快,而添加缓存。缓存的原理基本上就是将经常查询,但是不经常修改的数据,放入到缓...

  • 关于缓存的一些总结(3)

    本节讲解一下你即使项目中使用了缓存,在高并发的情况下可能遇到的问题1、缓存穿透 如果有人恶意攻击你的服务器,比如查...

  • 关于缓存的一些总结(4)

    使用锁来解决缓存击穿问题一提起锁大家可能都想到使用synchronized或者Lock这样的锁。在合理利用到syn...

  • 关于缓存的一些总结(7)

    本章节讲解Spring Cache为啥要用Spring Cache组件呢?因为我们发现代码中使用缓存时步骤基本上都...

  • 关于缓存的一些总结(6)

    缓存中的数据如何和数据库保持一致性1、双写模式双写模式就是先写入数据库再写入缓存。但在高并发情况下容易出现脏数据,...

  • 关于缓存的一些总结(2)

    我们上节说道,如果项目部署时是一台服务器的话本地缓存没有问题,如果是多台服务器部署,使用本地缓存就不行了,那么大家...

  • TODO

    H5 直播总结视频 总结关于 React 门店项目的一些思考

  • 谈谈缓存(上)

    最近看了一些关于缓存的东西,七零八落的,所以在这里做个总结。一开始想着用一篇文章把缓存相关的内容都梳理下,写着写着...

  • 缓存Tips

    我们平常的iOS开发过程中,总会遇到各种需要缓存的需求,今天就来总结一下关于缓存方面的知识。 从缓存的类型上来说,...

网友评论

      本文标题:关于缓存的一些总结(5)

      本文链接:https://www.haomeiwen.com/subject/wqkxqltx.html