SpringBoot集成Redisson操作Redis

目录

一、前言

Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格,Redisson相比较与Jedis和Lettuce来说最大的区别就是,Redisson提供了很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列等,一般建议Lettuce + Redisson一起使用,需要使用Redis高级功能就使用Redisson,如果不需要使用高级功能优先推荐使用Lettuce。

二、基础集成配置(redis单节点)

工程结构

2.1、POM

java 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.17.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.2、添加配置文件

java 复制代码
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedissonConfig {

    private String redissonUrl = "redis://172.16.8.169:6379";
    private String password = "123456";
    private Integer datebase = 0;

    @Bean
    public RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer()
                .setAddress(redissonUrl)
                .setPassword((password == null || "".equals(password)) ? null : password)
                .setDatabase(datebase)
                // 连接空闲超时,如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
                .setIdleConnectionTimeout(10000)
                // 连接超时,同节点建立连接时的等待超时。时间单位是毫秒。
                .setConnectTimeout(10000)
                // 命令等待超时,等待节点回复命令的时间。该时间从命令发送成功时开始计时。
                .setTimeout(1000)
                // 命令失败重试次数,如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时
                .setRetryAttempts(3)
                // 命令重试发送时间间隔,在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。
                .setRetryInterval(1500)
                // 每个连接的最大订阅数量。
                .setSubscriptionsPerConnection(5)
                // 用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。
                .setSubscriptionConnectionMinimumIdleSize(1)
                // 用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。
                .setSubscriptionConnectionPoolSize(50)
                // 最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。
                .setConnectionMinimumIdleSize(50)
                // 连接池最大容量。连接池的连接数量自动弹性伸缩。
                .setConnectionPoolSize(100)
                // 监测DNS的变化情况的时间间隔。时间单位是毫秒。
                .setDnsMonitoringInterval(5000)
                // PING 心跳时间,单位毫秒。
                .setPingConnectionInterval(10000);
        // 0 cpu * 2
        config.setThreads(0);
        // 0 cpu * 2
        config.setNettyThreads(0);
        // 使用json序列化方式
        config.setCodec(new JsonJacksonCodec());

        //创建客户端(发现创建RedissonClient非常耗时,基本在2秒-4秒左右)
        return Redisson.create(config);
    }
}

2.3、添加启动类

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RedissonApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedissonApplication.class);
    }
}

2.4、添加测试类测试redisson操作redis

java 复制代码
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes =  RedissonApplication.class)
public class RedissonTest {
    @Autowired
    private RedissonClient redissonClient;
    @Test
    public void t1(){
        String key = "key1";
        System.out.println("获取Bucket");
        RBucket<Object> bucket = redissonClient.getBucket(key);
        System.out.println("插入数据到redis");
        bucket.set("value1");
        Object value = bucket.get();
        System.out.println("从redis中获取到值为 "+value);
        Boolean delete = bucket.delete();
        System.out.println("删除redis中值 "+delete);
    }
}
相关推荐
行百里er9 分钟前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控
IT_陈寒9 分钟前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
分支预测失败15 分钟前
RISC-V 时间子系统深度专题:mtime 访问路径、SBI 定时器与 Linux tickless 协同
后端
65岁退休Coder20 分钟前
PI Agent 开发一个生产级 Harness
后端·node.js·agent
xcl092526 分钟前
24小时自助健身房系统软件开发实战指南:从架构到部署
java·spring boot
用户83562907805140 分钟前
如何使用 Python 给 Word 文档添加水印
后端·python
一个风轻云淡2 小时前
Markdown学习与实践
后端
程序员cxuan2 小时前
真没想到,AI 圈又杀出来一匹黑马!
人工智能·后端·程序员
吉甫作诵2 小时前
Redis 常用命令大全:11 大类命令速查手册
运维·数据库·redis·缓存·nosql
掘金者阿豪2 小时前
极空间 NAS 部署 Typecho:从 Docker 安装、主题配置到固定公网访问
后端