秒杀场景怎样保证数据一致

秒杀场景怎样保证数据一致,第1张

秒杀场景怎样保证数据一致

目录

一、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;
    }

二、中间件实现数据一致 三、其他

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存