1.缓存穿透
2.缓存雪崩
3.缓存击穿
redis实现分布式锁
为了防止我们在执行业务的时候出现异常 或者是服务器宕机的意外 没有删除锁 导致我们出现死锁的现象 那么我们要在执行业务之前加一个过期时间。
而这个加锁和我们的的加过期时间不能分开执行 要保证他是原子性的。
这里删除的锁可能不是自己的锁 所以我们在加锁的时候 要放一个uuid 保证是自己的锁 那么我们取出来 在判断是自己的锁 这俩步操作又不是原子的了 所以我们要用lua脚本
删锁
利用Redisson实现分布式锁
他可以使我们之前的逻辑简单化,更强大。
- 会给我们的锁自动续期 默认自动加30s
- 不用担心为解锁而出现的问题
我们一般需要手动指定过期时间 不然他内部复杂的延期策略耗时
读写锁
使用Redisson
1.添加依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.14.1</version>
</dependency>
2.配置
@Configuration
public class RedissonConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson() {
// 1. Create config object
Config config = new Config();
config.useSingleServer().setAddress("redis://39.96.41.98:6379");
return Redisson.create(config);
}
}
Redis的数据一致性