Spring Boot 中使用 Jedis 來操作 Redis

weixin_34402408發表於2016-10-27

把之前老的專案切換到用 Spring Boot 時,由於拋棄了 xml 配置檔案的使用,需要把之前 Jedis 配置現在用註解的形式重新實現一遍。

老的程式碼

  • config.properties
# redis資料庫連線配置(covert)
redis.url=redis://:name@host:6379/2
# 最大例項數
redis.maxTotal=100
# 最大空閒例項數
redis.maxIdle=10
# (建立例項時)最大等待時間
redis.maxWaitMillis=10000
# (建立例項時)是否驗證
redis.testOnBorrow=true
  • spring.xml
<!--載入外部資料庫配置-->
<context:property-placeholder location="classpath:config.properties" file-encoding="utf-8" ignore-unresolvable="true"/>

<!-- 配置redis池,依次為最大例項數,最大空閒例項數,(建立例項時)最大等待時間,(建立例項時)是否驗證 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="${redis.maxTotal}"/>
    <property name="maxIdle" value="${redis.maxIdle}"/>
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
    <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
</bean>
<bean id="convertShardInfo" class="redis.clients.jedis.JedisShardInfo">
    <constructor-arg name="host" value="${redis.url}"/>
</bean>
<bean id="convertJedisPool" class="redis.clients.jedis.ShardedJedisPool">
    <constructor-arg index="0" ref="jedisPoolConfig"/>
    <constructor-arg index="1">
        <list>
            <ref bean="convertShardInfo"/>
        </list>
    </constructor-arg>
</bean>

新的程式碼

  • application.yml
# redis資料庫連線配置(covert)
redisConfig:
  url: "redis://:name@host:6379/2"
  # 最大例項數
  maxTotal: 100
  # 最大空閒例項數
  maxIdle: 10
  # (建立例項時)最大等待時間
  maxWaitMillis: 10000
  # (建立例項時)是否驗證
  testOnBorrow: true
  • RedisConfig.java
package com.raventech.web.models.yml;

@Component
@ConfigurationProperties(prefix = "redisConfig")
public class RedisConfig implements Serializable {
    private static final long serialVersionUID = 1097752157567754456L;
    private String url;
    private Integer maxTotal;
    private Integer maxIdle;
    private Long maxWaitMillis;
    private Boolean testOnBorrow;
    ......
  • JedisConfiguration.java
@Configuration
@ComponentScan({"com.raventech.web.models.yml"}) // 解決 Configuration 註解中使用 Autowired 註解 IDE 報錯
public class JedisConfiguration {
    @Autowired
    RedisConfig redisConfig;

    @Bean
    public ShardedJedisPool convertJedisPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisConfig.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
        jedisPoolConfig.setMaxWaitMillis(redisConfig.getMaxWaitMillis());
        jedisPoolConfig.setTestOnBorrow(redisConfig.getTestOnBorrow());
        List<JedisShardInfo> jedisShardInfoList = new ArrayList<>();
        jedisShardInfoList.add(new JedisShardInfo(redisConfig.getUrl()));
        return new ShardedJedisPool(jedisPoolConfig, jedisShardInfoList);
    }
}

應用

@Autowired
private ShardedJedisPool convertJedisPool;

public String convertRedisGet(String key) {
    ShardedJedis resource = convertJedisPool.getResource();
    String result = resource.get(key);
    resource.close();
    return result;
}
}

相關文章