当前位置: 首页 > >

Redis自旋锁解决分布高并发问题

发布时间:

Redis自旋锁解决分布高并发问题

    Redis特性:

Redis 与其他 key - value 缓存产品有以下三个特点:


持久化

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,*舻氖焙蚩梢栽俅渭釉亟惺褂谩


数据类型

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。


数据备份

Redis支持数据的备份,即master-slave模式的数据备份。


原子性操作

Redis的所有操作都是原子性的。也就是说所有操作都是同步进行的,这也是解决分布式问题的必要条件


2.高并发下如何使用redis锁使线程异步变为同步执行


自旋锁
当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。使用redisson实现自旋锁

@Configuration
public class RedissionConfig {

@Autowired
private Environment env;

@Bean
public RedissonClient redissonClient(){
Config config=new Config();
config.useSingleServer()
.setAddress(env.getProperty("redis.config.host"))
.setPassword(env.getProperty("spring.redis.password"));
RedissonClient client= Redisson.create(config);
return client;
}


}

@RequestMapping("/doubleElevenSale")
public String redissionTest(String productId,String userId){
String lockKey = productId;
RLock lock = redissonClient.getLock(lockKey);
try{
//使线程阻塞,后台会开启定时器每隔设置时间的1/3进行续命操作
lock.lock(10, TimeUnit.SECONDS);
}catch (Exception e) {

}finally {
lock.unlock();
}
return "success";
}



友情链接: