- 博客(5)
- 资源 (1)
- 收藏
- 关注
原创 Java并发编程(同步工具):CountDownLatch、CyclicBarrier、Semaphore区别及方法
一、CountDownLatch(线程计数器 ) 介绍: CountDownLatch 类在 java.util.concurrent 包下,利用它可以实现类似计数器的功能。 final CountDownLatch latch = new CountDownLatch(2); new Thread(){ public void run() { System.out.println("子线程"+Thread.currentThread().getName()+"正在执行"); Th
2021-09-08 22:50:12 199
原创 二分查找算法:递归-非递归
二分查找 二分查找又叫折半查找要求待查找的序列有序。 每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字 /** * 非递归方式 * @param srcArray 数组集 * @param key 查找的key * @return */ public static int binS
2021-09-08 17:29:54 177
原创 Redis分布式锁实现
分布式锁的实现 需要注意的点 1、锁不安全: 任意客户端获得锁后,在释放锁之前该服务一旦崩溃宕机,锁将永远都不会释放简单来讲:其他服务都将竞争不到锁,竞争不到锁的线程在不断自旋,与此同时还会不断有新的请求接入,最终导致服务宕机,Redis宕机 2、锁不失效: 假设过期时间10S,服务A可能在10S内还没搞完业务逻辑,锁超时后服务B获得了锁,这时服务A执行完了业务逻辑,这样错误的释放了由服务B加的锁,就会导致锁失效。 3、锁超时: 太长的话 如果某个服务宕机后,其他服务需要等待很久才能获得锁 就没有必要
2021-09-08 16:22:35 135
原创 防止高并发缓存穿透:双重检测同步锁
缓存穿透 我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回,这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB。这样缓存就失去了意义,在流量大时,可能DB就挂掉了 简单理解为:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层。从而失去缓存的意义。 通常解决方案: 用一个bitmap和n个hash函数做布隆过滤器过滤没有缓存的键 持久层查询不到就缓存空结果,有效时间为数分钟 准备工
2021-09-08 15:50:58 397
原创 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
一、缓存雪崩 我们可以简单的理解为:由于缓存失效,新缓存未到 我们设置缓存时间的时候采用的相同的的过期时间,在同一时刻大面积缓存过期!这个时间本来应该访问缓存的请求都去查询数据库了,对DB造成了很大的压力,可能严重的会导致DB的宕机,然后导致一系列的连锁反应,造成系统的崩溃 解决办法: 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓 存。 为 key 设置不同的缓存失效时间。 二、缓存穿透 缓存穿透是指用
2021-09-08 14:50:15 184
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人