Redis 整合中 Redisson 的使用

大家好 , 我是苏麟 , 今天带来 Redisson 使用 .

官方文档 : GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...

引入依赖

java 复制代码
        <!--https://github.com/redisson/redisson#quick-start-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.23.2</version>
        </dependency>

yml配置(例如)

java 复制代码
  #redis 配置
  redis:
    port: 6379
    database: 1
    host: localhost

Redisson配置

java 复制代码
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.redis")
public class RedissonConfig {

    private String host;

    private String port;

    @Bean
    public RedissonClient redissonClient(){
        // 1.创建配置
        Config config = new Config();

        String redissonAddress = String.format("redis:/%s:%s",host,port);

        //useClusterServers()集群
        //setDatabase() 设置那个redis库
        config.useSingleServer().setAddress(redissonAddress).setDatabase(2);


        //2.创建实例
        RedissonClient redissonClient = Redisson.create(config);
        return  redissonClient;
    }
}

这里@ConfigurationProperties(prefix = "spring.redis")用法请看 : 读取/加载 properties/yml 配置文件_踏遍三十六岸的博客-CSDN博客


像操作本地集合一样操作Redisson

java 复制代码
@SpringBootTest
class UserCenterApplicationTests {

    @Resource
    private RedissonClient redissonClient;

    @Test
    void test() {
        //list操作 数据存在 JVM 内存中
        List<String> list = new ArrayList<>();
        list.add("sl");
        System.out.println(list.get(0));
        list.remove(0);

        //数据存在 Redis 内存中
        //getList()取列表名字 因为 redis 中是 key-value 存在
        RList<String> rList = redissonClient.getList("redisson-list");
        rList.add("sl-redisson");
        System.out.println(rList.get(0));
        rList.remove(0);    

    }

   
    @Test
    void hashTest(){

        //哈希操作
        RMap<String, String> rMap = redissonClient.getMap("LiJiaWei");
        //设置 map 中的 key - value
        rMap.put("sl","1");
        rMap.put("jw","2");

        System.out.println(redissonClient.getMap("LiJiaWei").get("sl"));
        System.out.println(redissonClient.getMap("LiJiaWei").get("jw"));

        redissonClient.getMap("LiJiaWei").remove("sl");
        redissonClient.getMap("LiJiaWei").remove("jw");
    }

    //......
    //其他操作都一样
}

Redssion 分布式锁
定时任务可以看(或者其他的) : Spring Schedular 定时任务_踏遍三十六岸的博客-CSDN博客

java 复制代码
@Component
public class PreScheduled {


    @Resource
    private RedissonClient redissonClient;


    /**
     * 每天执行
     */
    @Scheduled(cron = "0 59 23 * * *")
    public void doCah() {
        //获取锁 , 可重入  指定锁的名称
        RLock lock = redissonClient.getLock("sl:redisson:cache:lock");


        try {
            /**
             * 只有一个线程获取到锁
             * 等待时间 , 执行时间 , 毫秒
             */
            if (lock.tryLock(0, 30000L, TimeUnit.MILLISECONDS)) {
              
                      //...
         
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            /**
             * 只能释放自己加的锁
             */
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
    }
}

感兴趣的小伙伴可以自行了解下面知识!

Redisson的可重入锁原理
Redisson看门狗WatchDog机制
Redisson的multiLock原理


这期就到这里 , 拜拜 !

相关推荐
用户921080262863 分钟前
前端 Vue 专栏 05:从 Object.defineProperty 到 Proxy,彻底理解 Vue 响应式原理
前端
Fluxart.ai14 分钟前
GPT Image 2.5 有使用次数限制吗?额度、并发、频率限制说明
服务器·前端·gpt
程序员海军38 分钟前
AI 越来越强,为什么打工人反而越来越累、越来越内耗了?
前端·程序员·aigc
vx_Biye_Design42 分钟前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜1 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
晴天161 小时前
VSCodium 项目介绍
前端·javascript·vscode
世岩清上1 小时前
展厅数字内容同质化严重,怎样打造专属叙事风格?
大数据·前端·javascript·人工智能·html·音视频·展厅改造
晴天161 小时前
前端动画体系全解析:类型、实现方案与工程选型最佳实践
前端
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云1 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法