- 博客(4)
- 收藏
- 关注
原创 基于CAS实现无锁机制
JDK 1.5 以后的AtomicStampedReference 类就是用来解决 ABA 问题的,其中的 compareAndSet() 方法就是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。如果一个变量 V 初次读取的时候是 A 值,并且在准备赋值的时候检查到它仍然是 A 值,那我们就能说明它的值没有被其他线程修改过了吗?CAS 的思想很简单,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。
2023-06-07 14:47:20
40
1
原创 Spring之静态代理和动态代理
我的理解是:对一个接口进行功能增强或者修改,这里的接口就是中介,被修改前的实现类就是房东,修改后的实现类就是租客。现在我们的需求是,在原来的实现方式方法调用前后打印日志,且不能修改原来的代码,相当于增加功能,拓展业务。: 这里我不用传统的。
2023-06-05 22:52:11
105
1
原创 Redis夺命三连问之穿透、击穿、雪崩
比如请求id为-1的数据,缓存中是不存在的,此时就会去数据库查找。由于在数据库中也找不到该数据,说明该数据没有意义,也就不会将该数据缓存,所以 每次请求都会去数据库查找,当大量请求到数据库的时候,数据库可能就挂了。这里顺带一提,如果是在分布式的情况下出现并发竞争热点key,并且要对key进行操作的话,就要使用分布式锁了,详见另一篇文章。,那么在失效那一刻就会有大量的请求进来直接进入到数据库,造成数据库压力增大。:如果一个数据是热点数据,也就是经常被访问的数据,它。,给数据库造成大量请求、导致数据库崩溃。
2023-06-05 11:36:59
47
1
原创 Redis分布式锁问题
保证同一时间只能有一个客户端对共享资源进行操作。在JavaSE中有多线程,当多线程对共享资源进行操作的时候,我们会使用Synchronized或者Lock来加锁保证多个线程的操作不会互相干扰,但是这种锁只局限在单一的JVM中,如果我们的项目是集群的情况下,我们就需要分布式锁来保证每一个服务之间的操作不会互相干扰。 SETNX(SET IF NOT EXISTS)是redis提供的一种锁机制,当该key存在的时候会返回0,当key不存在的时候会返回1并且设置值。 Redis中使用SETNX来实现分布式锁,re
2023-06-05 00:01:27
100
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人