054 redisson

文章目录

java 复制代码
package com.xd.cubemall.product.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyRedissonConfig {

    /**
     * 注册RedissonClient对象
     */
    @Bean(destroyMethod="shutdown")
    RedissonClient redissonClient(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redissonClient = Redisson.create(config);

        return redissonClient;

    }

}

使用Redisson演示可重入锁

java 复制代码
    /**
     * 使用Redisson演示可重入锁
     * @return
     */
    @ResponseBody
    @GetMapping("/hello")
    public String hello(){
        //获取一把锁
        RLock lock = redissonClient.getLock("my-lock");
        //加锁
        lock.lock();
        try{
            System.out.println("加锁成功,执行业务。。。" + Thread.currentThread().getId());
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //解锁
            System.out.println("解锁。。。" + Thread.currentThread().getId());
            lock.unlock();
        }


        return "hello";
    }

读写锁

java 复制代码
    @GetMapping("/write")
    @ResponseBody
    public String writeValue(){
        //获取一把锁
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        // 加 写锁
        String s = "";
        RLock writeLock = lock.writeLock();

        try{
            //1.改数据加 写锁,读数据加 读锁
            writeLock.lock();
            System.out.println("写锁加锁成功..." + Thread.currentThread().getId());
            s = UUID.randomUUID().toString();
            Thread.sleep(15000);
            redisTemplate.opsForValue().set("writeValue",s);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放锁
            writeLock.unlock();
            System.out.println("写锁。。释放。。"+Thread.currentThread().getId());

        }
        return s;
    }


    @GetMapping("/read")
    @ResponseBody
    public String readValue(){
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        String s = "";
        //加 读锁
        RLock readLock = lock.readLock();
        readLock.lock();
        try {
            System.out.println("读锁...加锁成功..."+Thread.currentThread().getId());
            s = redisTemplate.opsForValue().get("writeValue");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            readLock.unlock();
            System.out.println("读锁。。释放。。。"+Thread.currentThread().getId());

        }
        return s;
    }

信号量

java 复制代码
    @GetMapping("/park")
    @ResponseBody
    public String park() throws InterruptedException {
        RSemaphore semaphore = redissonClient.getSemaphore("park");
        //当车位减少为0时,还想获取车位,必须要等go()调用时,释放一个车位,才能进行执行
        semaphore.acquire();//占有一个车位

        return "ok";
    }

    @GetMapping("/go")
    @ResponseBody
    public String go() {
        RSemaphore semaphore = redissonClient.getSemaphore("park");
        semaphore.release();
        return "ok";
    }

闭锁

java 复制代码
    @ResponseBody
    @GetMapping("/lockDoor")
    public String lockDoor() throws InterruptedException {
        RCountDownLatch door = redissonClient.getCountDownLatch("door");
        door.trySetCount(5);
        door.await();//等待其他闭锁都完成
        return "关门了";
    }


    @ResponseBody
    @GetMapping("/gogogo/{id}")
    public String gogogo(@PathVariable("id") Long id) {
        RCountDownLatch door = redissonClient.getCountDownLatch("door");
        door.countDown();//计数-1
        return id + "桌的人都走了。。。";
    }

获取三级分类redisson分布式锁

java 复制代码
    @Autowired
    private RedissonClient redissonClient;
    /**
     * 获取三级分类(redisson分布式锁)
     * @return
     */

    public List<CategoryVo> getCategoryJsonFromWithRedissonLock() {

        String uuid = UUID.randomUUID().toString();
        //1.占分布式
        RLock lock = redissonClient.getLock("CategoryJson-lock");

        lock.lock();
        List<CategoryVo> dataFromDb = null;
        try {
            dataFromDb = getDataFromDb();
        } finally {
            lock.unlock();
        }

        return dataFromDb;




    }
相关推荐
鼠鼠我捏,要死了捏7 天前
基于Redisson实现高并发分布式锁性能优化实践指南
性能优化·分布式锁·redisson
C1829818257510 天前
Redisson加锁脚本分析
redisson
C1829818257510 天前
Redisson解锁脚本分析
redisson
phantomsee17 天前
Redis学习系列之——高并发应用的缓存问题(二)
redis·redisson
马里奥Marioぅ1 个月前
Redis主从切换踩坑记:当Redisson遇上分布式锁的“死亡连接“
redis·分布式锁·redisson·故障转移
xujinwei_gingko1 个月前
接口幂等性
分布式锁·redisson·接口幂等性
沉着的码农1 个月前
【分布式】Redisson滑动窗口限流器原理
java·redis·分布式·redisson
jstart千语2 个月前
【Redisson】锁可重入原理
redis·分布式·redisson
啾啾Fun2 个月前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
小马爱打代码2 个月前
Redisson - 实现延迟队列
redisson