栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

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

二、中间件实现数据一致

三、其他

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号