
分布式相关方案(分布式锁,分布式缓存)
文章平均质量分 60
锁,缓存
WannaRunning
这个作者很懒,什么都没留下…
展开
-
Caffeine缓存
目录Caffeine相关参数缓存大小过期策略填充策略Caffeine框架中Cache的使用同步需要手动维护——Cache同步可设置缓存自动触发加载——LoadingCache异步需手动维护——AsyncCache异步可设置缓存自动触发加载——AsyncLoadingCache在本地(进程)缓存方面,常见的环框框架有ehcache、GuavaCache、Caffeine等方案。Caffeine是其中性能最好的一个。Caffeine相关参数缓存大小使用max原创 2022-01-02 16:25:37 · 5187 阅读 · 0 评论 -
分布式锁的使用——不要把锁加在事务内
在使用分布式锁的时候,习惯性的尽量缩小同步代码块的范围。但是如果数据库隔离级别是可重复读,这种情况下不要把分布式锁加在@Transactional注解的事务方法内部。因为可能会出现这种情况:线程1开启事务A后获取分布式锁,执行业务代码后在事务内释放了分布式锁。这时候线程1开启了事务B获取到了线程1释放的分布式锁,执行查询操作时查到的数据就可能出现问题。因为此时事务A是在事务内释放了锁,事务A本身还没有完成提交...原创 2021-08-09 20:39:05 · 3868 阅读 · 1 评论 -
业务系统二级缓存的设计使用
在有些业务里例如用餐高峰期产品信息的数据在高并发下就会存在问题,难以给予稳定的服务支持,常出现服务请求超时的情况。这种数据量大且并发访问量高的场景就可以通过多级缓存来提高服务的稳定性。二级缓存的设计一级缓存可以使用服务本地缓存,像EhCache,Guava 或者Caffeine等 二级缓存使用Redis等中间件。二级缓存的实现思路如果本地缓存开关开启则从一级缓存中获取,命中直接返回,未命中进行下一步。 如果二级缓存(如redis缓存)开启则从二级缓存去读数据,如果redis缓存命.原创 2021-07-01 20:07:34 · 1364 阅读 · 0 评论 -
分布式缓存——数据库和缓存同步方案
并发情况下,对于缓存的更新需要考虑数据库和缓存一致性,最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。1.访问过程:先访问缓存,如果没有命中就查询数据库构建缓存。2.更新过程:先写数据库,再删除缓存(使缓存失效)为什么不能先删除缓存,再更新数据库?A执行第一步操作即删除缓存; B访问缓存,发现没有命中后查询DB构建缓存,这时候B构建的是旧数据; A写DB,完成更新缓存的两步操作。从流程上可以看到,这种情况下缓存中的数据是旧数据,带来一定时间的数据不一原创 2021-03-11 18:02:35 · 850 阅读 · 2 评论 -
redis集群分布式锁的使用(Integration)
基于Spring Integration使用分布式锁Spring Integration这个项目中已经实现了上面说的RedLock算法,开发中可以直接使用现成的分布式锁RedisLockRegistry 是实现对象,其obtain方法可以获得全局所对象;1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b原创 2020-08-19 11:01:40 · 582 阅读 · 0 评论 -
Zookeeper实现分布式锁(spring intergration)
之前的文章写了spring intergration支持基于redis实现的Redlock算法的分布式锁。其实它同时支持redis,jdbc,zookeeper多种分布式锁的实现;这篇文章就写一下spring intergration实现的基于zookeepr的临时行孙旭节点的分布式锁的使用。引入依赖<dependency> <groupId>org.springframework.integration</groupId>原创 2020-08-19 10:25:23 · 652 阅读 · 0 评论 -
RedLock算法与Redis集群模式分布式锁使用(redisson)
关于分布式锁的实现方式思路已经在上一篇文章写过了,一般是基于redis或者zookeeper实现的https://blog.youkuaiyun.com/qq_29569183/article/details/107885176但是真正应用中通常还要考虑redis和zookeeper集群环境下怎么去安全的实现一个分布式锁,因为在集群环境下存在多节点同步数据操作都可能会影响安全性,那么这篇文章就写一下如何基于redis集群模式使用分布式锁。redis集群分布式锁实现算法:RedLock算法为什么需要Red原创 2020-08-16 14:11:51 · 1686 阅读 · 0 评论 -
分布式锁实现方案
对于单体应用,为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,可以使用java并发处理的方式做处理。但是对于集群架构中多个服务实例如何保证同步呢,比如我们的集群中有多个订单服务实例,在创建订单时都会操作商品的库存,那么商品库存量如何保证准确,这就是分布式锁要解决的问题。分布式锁满足的条件多线程可见(独立于JVM外可被多个服务使用),互斥性,可重入。常用的分布式锁实现方案1.redis实现分布式锁redis本身就是独立于我们的应用之外的,所以满足多线程可见;基于单线原创 2020-08-08 22:18:00 · 310 阅读 · 0 评论 -
分布式缓存的相关解决方案——缓存击穿和缓存穿透等
缓存击穿有时候如果网站并发访问高,一个缓存如果失效,可能出现多个进程同时查询DB,同时设置缓存的情况,如果并发确实很大,这也可能造成DB压力过大,还有缓存频繁更新的问题。双重校验防止缓存击穿:List<Map> userinfo = (List<Map> ) redisTemplate.opsForValue().get("userInfo"); //双重校验防止缓存击穿 if(userinfo==null){ synchronized (thi原创 2020-10-22 15:55:39 · 275 阅读 · 0 评论