2024.02.21

缓存雪崩:

缓存击穿:

缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问,会在瞬间给数据库带来巨大的冲击。

常见的解决方案:互斥锁、逻辑过期

 

缓存击穿解决方式(互斥锁)原理图:

 

缓存击穿解决方式(逻辑过期)原理图:

互斥锁优点:没有额外的内存消耗、保证一致性、实现简单;互斥锁缺点:线程需要等待导致性能受影响、能有死锁风险;逻辑过期优点:线程无需等待,性能较好;逻辑过期缺点:不保证一致性、有额外内存消耗、实现复杂。

互斥锁:若获取锁失败,则采用Thread.sleep休眠再递归的方式

互斥锁实现流程:

获取和释放锁的方式:

//获取锁

 public boolean getMutex(String key){

  //相当于执行setnx,key存在时不能插入

   Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent(key, "1", 10, TimeUnit.MINUTES);

   return BooleanUtil.isTrue(aBoolean);

}

//释放锁

public void deleteMutex(String key){

//删除值

  Boolean aBoolean = stringRedisTemplate.delete(key);

}

获取nacos配置值的方法:

@Value("${minio.accessKey}"),其中Data id需要与bootstrap.yml文件中的spring.application.name对应,例子中的结构如下图:

//上传的文件拷贝到临时文件

upload.transferTo(tempFile);(upload为MultipartFile类型)

全部评论
记录自学,每天一发,可忽略
1 回复 分享
发布于 2024-02-21 23:07 四川

相关推荐

点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务