Redisson
具有内存中数据网格功能的Redis Java客户端
基于高性能的异步和无锁Java Redis客户端和Netty框架。
1.可重入锁,A调用B。AB都需要同一锁,此时可重入锁就可以重入,A就可以调用B。不可重入锁时,A调用B将死锁
2.读写锁:写锁是一个排它锁(互斥锁),读写是共享锁,写锁没释放读就必须等待,读锁没释放写锁也需等待
3.闭锁:当所有线程锁都走完了以后,可以使用分布式闭锁机制
4.信号量:可以用来做分布式限流操作
5.缓存数据一致性的问题:
双写模式:写数据库后,写缓存 问题:并发时,2写进入,写完DB后都写缓存。有暂时的脏数据
失效模式:写完数据库后,删缓存 问题:还没存入数据库呢,线程2又读到旧的DB了
解决方法:缓存设置过期时间,定期更新,写数据写时,加分布式的读写锁。
1.添加依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.12.0</version>
</dependency>
2.添加配置
@Configuration
public class MyRedissonConfig {
/**
* 所有对Redisson的使用都是通过RedissonClient
* @return
* @throws IOException
*/
@Bean(destroyMethod="shutdown")
public RedissonClient redisson() throws IOException {
//1、创建配置
Config config = new Config();
config.useSingleServer().setAddress("redis://192.168.77.130:6379");
//2、根据Config创建出RedissonClient实例
//Redis url should start with redis:// or rediss://
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
}