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

  1. 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";
    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐