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

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";
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值