目录
一、Redisson读写锁实现:
二、中间件实现数据一致
三、其他
一、Redisson读写锁实现:
一次只有一个线程可以占用写模式,实现读写锁保证数据一致。
1. 初始化一个RedissonClient 客户端
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
2. 创建读取请求,创建读取锁
@GetMapping("read")
public String read(){
RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(RedisConstant.READ_WRITE_LOCK);
//创建读锁,读锁的作用就是等待该lockkey释放写锁以后再读
RLock rLock = readWriteLock.readLock();
try {
rLock.lock();
//读取redis里面uuid
String uuid = redisTemplate.opsForValue().get("uuid");
return uuid;
}finally {
rLock.unlock();
}
}
3. 创建写入请求,创建写锁
@GetMapping("write")
public String write() throws InterruptedException {
RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(RedisConstant.READ_WRITE_LOCK);
//创建写锁,写锁加锁成功,读锁只能等待
RLock rLock = readWriteLock.writeLock();
String res = "";
try {
rLock.lock();
res = UUID.randomUUID().toString();
//生成的uuid写入redis
redisTemplate.opsForValue().set("uuid",res);
}finally {
//无条件释放锁,避免阻塞
rLock.unlock();
}
return res;
}



