首頁 > 軟體

spring boot整合redisson的最佳實踐範例

2022-03-05 16:00:37

前言

本文假使你瞭解spring boot並實踐過,非spring boot使用者可跳過也可藉此研究一下。

redisson是redis的java使用者端程式,國內外很多公司都有在用,如下,

和spring的整合中官方給出的範例也是比較多,比較方便。

整合jedis範例,xml方式

整合前參照的jar

<!--kl add redis client-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.2</version>
</dependency>

 spring bean設定xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- POOL設定 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="300"/>
        <property name="maxIdle" value="10"/>
        <property name="maxWaitMillis" value="1000"/>
        <property name="testOnBorrow" value="true"/>
    </bean>
    <!-- jedis shard資訊設定 -->
    <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo">
        <constructor-arg index="0" value="${redis.host}"/>
        <constructor-arg index="1" value="${redis.port}" type="int"/>
    </bean>

    <!-- jedis shard pool設定 -->
    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig"/>
        <constructor-arg index="1">
            <list>
                <ref bean="jedisShardInfo"/>
            </list>
        </constructor-arg>
    </bean>
    <bean id="shardedJedis" factory-bean="shardedJedisPool" factory-method="getResource" />
</beans>

整合redisson範例,java bean的方式

整合前引入的jar

<!--kl add redis client-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>2.5.0</version>
</dependency>

javabean設定如下

/**
 * Created by kl on 2016/10/21.
 */
@Configuration
@ComponentScan
public class RedsissonConfig {
    @Bean(destroyMethod="shutdown")
    RedissonClient redisson(@Value("classpath:/conf/redisson.yaml") Resource configFile) throws IOException {
        Config config = Config.fromYAML(configFile.getInputStream());
        return Redisson.create(config);
    }
}

spring整合redis使用者端jedis以及redisson,可以提供yaml,json組態檔來範例化redissonClient,也可以使用spring的xml來設定,redisson官方給出了諸如<redisson:client>等標籤來簡化在xml中的設定,但是如果我們的程式是spring boot,一般都是使用application.properties來設定我們應用設定引數,不想提供額外的yaml,json,xml等組態檔,雖然spring boot也支援這麼做。所以如何使用application.properties的方式設定redisson呢,請看下文?

提供範例化javabean

/**
 * Created by kl on 2017/09/26.
 * redisson 使用者端設定
 */
@ConfigurationProperties(prefix = "spring.redisson")
@Configuration
public class RedissonConfig{
    private String address;
    private int connectionMinimumIdleSize = 10;
    private int idleConnectionTimeout=10000;
    private int pingTimeout=1000;
    private int connectTimeout=10000;
    private int timeout=3000;
    private int retryAttempts=3;
    private int retryInterval=1500;
    private int reconnectionTimeout=3000;
    private int failedAttempts=3;
    private String password = null;
    private int subscriptionsPerConnection=5;
    private String clientName=null;
    private int subscriptionConnectionMinimumIdleSize = 1;
    private int subscriptionConnectionPoolSize = 50;
    private int connectionPoolSize = 64;
    private int database = 0;
    private boolean dnsMonitoring = false;
    private int dnsMonitoringInterval = 5000;
    private int thread; //當前處理核數量 * 2
    private String codec="org.redisson.codec.JsonJacksonCodec";
    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() throws Exception {
        Config config = new Config();
        config.useSingleServer().setAddress(address)
                .setConnectionMinimumIdleSize(connectionMinimumIdleSize)
                .setConnectionPoolSize(connectionPoolSize)
                .setDatabase(database)
                .setDnsMonitoring(dnsMonitoring)
                .setDnsMonitoringInterval(dnsMonitoringInterval)
                .setSubscriptionConnectionMinimumIdleSize(subscriptionConnectionMinimumIdleSize)
                .setSubscriptionConnectionPoolSize(subscriptionConnectionPoolSize)
                .setSubscriptionsPerConnection(subscriptionsPerConnection)
                .setClientName(clientName)
                .setFailedAttempts(failedAttempts)
                .setRetryAttempts(retryAttempts)
                .setRetryInterval(retryInterval)
                .setReconnectionTimeout(reconnectionTimeout)
                .setTimeout(timeout)
                .setConnectTimeout(connectTimeout)
                .setIdleConnectionTimeout(idleConnectionTimeout)
                .setPingTimeout(pingTimeout)
                .setPassword(password);
        Codec codec=(Codec)ClassUtils.forName(getCodec(),ClassUtils.getDefaultClassLoader()).newInstance();
        config.setCodec(codec);
        config.setThreads(thread);
        config.setEventLoopGroup(new NioEventLoopGroup());
        config.setUseLinuxNativeEpoll(false);
        return Redisson.create(config);
    }

注意:以上程式碼不是完整的,省略了get set程式碼

application.properties新增如下設定

#redis連結地址
spring.redisson.address=192.168.1.204:6379
#當前處理核數量 * 2
spring.redisson.thread=4
#指定編解碼
spring.redisson.codec=org.redisson.codec.JsonJacksonCodec;
#最小空閒連線數,預設值:10,最小保持連線數(長連線)
spring.redisson.connectionMinimumIdleSize=12
#連線空閒超時,單位:毫秒 預設10000;當前連線池裡的連線數量超過了最小空閒連線數,
#而連線空閒時間超過了該數值,這些連線將會自動被關閉,並從連線池裡去掉
spring.redisson.idleConnectionTimeout=10000
#ping節點超時,單位:毫秒,預設1000
spring.redisson.pingTimeout=1000
#連線等待超時,單位:毫秒,預設10000
spring.redisson.connectTimeout=10000
#命令等待超時,單位:毫秒,預設3000;等待節點回覆命令的時間。該時間從命令傳送成功時開始計時
spring.redisson.timeout=3000
#命令失敗重試次數,預設值:3
spring.redisson.retryAttempts=2
#命令重試傳送時間間隔,單位:毫秒,預設值:1500
spring.redisson.retryInterval=1500
#重新連線時間間隔,單位:毫秒,預設值:3000;連線斷開時,等待與其重新建立連線的時間間隔
spring.redisson.reconnectionTimeout=3000
#執行失敗最大次數, 預設值:3;失敗後直到 reconnectionTimeout超時以後再次嘗試。
spring.redisson.failedAttempts=2
#身份驗證密碼
#spring.redisson.password=
#單個連線最大訂閱數量,預設值:5
spring.redisson.subscriptionsPerConnection=5
#使用者端名稱
#spring.redisson.clientName=
#釋出和訂閱連線的最小空閒連線數,預設值:1;Redisson內部經常通過釋出和訂閱來實現許多功能。
#長期保持一定數量的釋出訂閱連線是必須的
spring.redisson.subscriptionConnectionMinimumIdleSize=1
#釋出和訂閱連線池大小,預設值:50
spring.redisson.subscriptionConnectionPoolSize=50
#連線池最大容量。預設值:64;連線池的連線數量自動彈性伸縮
spring.redisson.connectionPoolSize=64
#資料庫編號,預設值:0
spring.redisson.database=0
#是否啟用DNS監測,預設值:false
spring.redisson.dnsMonitoring=false
#DNS監測時間間隔,單位:毫秒,預設值:5000
spring.redisson.dnsMonitoringInterval=5000

java bean中已經給所有需要設定的值寫上了官方預設的初始值,如果你不考慮更改預設值,實際上你只需要在你的application.properties新增如下設定就好

#redis連結地址
spring.redisson.address=192.168.1.204:6379

注意:這裡設定連線的模式是單機模式,如果你想通過這種設定方式設定叢集模式和哨兵模式,請參考官方wiki,修改下java bean就好

githubwiki:https://github.com/redisson/redisson/wiki/

以上就是spring boot整合redisson的最佳實踐範例的詳細內容,更多關於spring boot整合redisson實踐的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com