1. 程式人生 > >Spring整合Jedis2.9(叢集帶密碼版)

Spring整合Jedis2.9(叢集帶密碼版)

一.環境說明

  • Windows 10 1709
  • IDEA 2017.3
  • Spring 4.3.12
  • Jedis 2.9

二.配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!--Spring的約束檔案 使用那些模組就標記那些模組的約束文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--載入redis配置檔案 --> <context:property-placeholder
location="classpath:spring/applicationContextRedis.xml"/>
<!--redisPool配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!--最大連線數 --> <property name="maxTotal" value="30"/> <!--最大空閒連線數 --> <property
name="maxIdle" value="10"/>
<!--每次釋放連線的最大數目 --> <property name="numTestsPerEvictionRun" value="1024"/> <!--釋放連線的掃描間隔(單位:毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000"/> <!--連線最小空閒時間(單位:毫秒) --> <property name="minEvictableIdleTimeMillis" value="100000"/> <!--連線空閒多久後釋放,當空閒時間大於該值並且空閒連線大於最大空閒連線時直接釋放連線 --> <property name="softMinEvictableIdleTimeMillis" value="10000"/> <!--獲取連線時最大等待毫秒數,如果該值小於0,則阻塞不確定的時長,預設值-1 --> <property name="maxWaitMillis" value="1500"/> <!--在獲取連線時檢查連線有效性,預設為false --> <property name="testOnBorrow" value="false"/> <!--在連線空閒時檢查連線有效性,預設為false --> <property name="testWhileIdle" value="true"/> <!--連線耗盡是否阻塞,false代表拋異常,true代表阻塞直到超時,預設為true --> <property name="blockWhenExhausted" value="false"/> </bean> <!--配置redis叢集 --> <bean id="jedisCuster" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="jedisClusterNode"> <!--設定叢集節點 --> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port1}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port2}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port3}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port4}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port5}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis.host}"/> <constructor-arg name="port" value="${redis.port6}"/> </bean> </set> </constructor-arg> <!--設定連線超時時間 --> <constructor-arg name="connectionTimeout" value="${redis.timeout}"/> <!--設定網路通訊超時時間 --> <constructor-arg name="soTimeout" value="${redis.soTimeout}"/> <!--設定叢集訪問密碼 --> <constructor-arg name="password" value="${redis.password}"/> <!--設定最大重試次數 --> <constructor-arg name="maxAttempts" value="${redis.attempts}"/> <!--設定jedisPool配置 --> <constructor-arg name="poolConfig" ref="jedisPoolConfig"/> </bean> <!--配置jedisClientCluster --> <bean id="jedisClientCluster" class="xin.csqsx.utils.jedis.JedisClientCluster"> <property name="jedisCluster" ref="jedisCuster" /> </bean> </beans>

三.JedisClientCluster.class

package xin.csqsx.utils.jedis;

import java.util.List;
import java.util.Map;

import redis.clients.jedis.JedisCluster;

/**
 * 包名 xin.csqsx.utils.jedis
 * 類名 JedisClientCluster
 * 類描述 redis叢集操作工具類
 *
 * @author Lucifer
 * @version 1.0
 * 建立日期 2017/11/20
 * 時間 19:39
 */
public class JedisClientCluster implements JedisClient {

    private JedisCluster jedisCluster;


    public JedisCluster getJedisCluster() {
        return jedisCluster;
    }

    public void setJedisCluster(JedisCluster jedisCluster) {
        this.jedisCluster = jedisCluster;
    }

    @Override
    public String set(String key, String value) {
        return jedisCluster.set(key, value);
    }

    @Override
    public String get(String key) {
        return jedisCluster.get(key);
    }

    @Override
    public Boolean exists(String key) {
        return jedisCluster.exists(key);
    }

    @Override
    public Long expire(String key, int seconds) {
        return jedisCluster.expire(key, seconds);
    }

    @Override
    public Long ttl(String key) {
        return jedisCluster.ttl(key);
    }

    @Override
    public Long hset(String key, String field, String value) {
        return jedisCluster.hset(key, field, value);
    }

    @Override
    public String hget(String key, String field) {
        return jedisCluster.hget(key, field);
    }

    @Override
    public Long hdel(String key, String... field) {
        return jedisCluster.hdel(key, field);
    }

    @Override
    public Boolean hexists(String key, String field) {
        return jedisCluster.hexists(key, field);
    }

    @Override
    public Map<String, String> hgetAll(String key) {
        return jedisCluster.hgetAll(key);
    }

    @Override
    public List<String> hvals(String key) {
        return jedisCluster.hvals(key);
    }

    @Override
    public Long del(String key) {
        return jedisCluster.del(key);
    }

}

四.JedisClient.java

package xin.csqsx.utils.jedis;

import java.util.List;
import java.util.Map;

/**
 * 包名 xin.csqsx.utils.jedis
 * 類名 JedisClient
 * 類描述 jedis操作redis叢集的相關操作
 *
 * @author Lucifer
 * @version 1.0
 * 建立日期 2017/11/20
 * 時間 15:54
 */
public interface JedisClient {
    /**
     * 設定一個字串型別的值,如果記錄存在則覆蓋原有value
     *
     * @param key   值對應的鍵
     * @param value 值
     * @return 狀態碼, 成功則返回OK
     */
    String set(String key, String value);

    /**
     * 從redis中根據key取值
     *
     * @param key 要取得值對應的key
     * @return 取到的value值
     */
    String get(String key);

    /**
     * 判斷某個鍵值對是否存在
     *
     * @param key 根據鍵判斷
     * @return 判斷結果
     */
    Boolean exists(String key);

    /**
     * 設定鍵值對的過期時間
     *
     * @param key     要設定過期時間的k鍵值對的鍵
     * @param seconds 過期時間
     * @return 影響的記錄數
     */
    Long expire(String key, int seconds);

    /**
     * 檢視鍵值對的剩餘時間
     *
     * @param key 要檢視的鍵值對的鍵
     * @return 剩餘時間
     */
    Long ttl(String key);

    /**
     * 新增一個對應關係
     *
     * @param key   儲存的鍵
     * @param field 儲存的名字
     * @param value 儲存的值
     * @return 狀態碼, 1成功, 0失敗, 如果field已存在將更新, 返回0
     */
    Long hset(String key, String field, String value);

    /**
     * 返回hash中指定儲存的值
     *
     * @param key   查詢的儲存的鍵
     * @param field 查詢的儲存的名字
     * @return 指定儲存的值
     */
    String hget(String key, String field);

    /**
     * 從hash中刪除指定的儲存
     *
     * @param key   儲存的鍵
     * @param field 儲存的名字
     * @return 狀態碼, 1成功, 0失敗
     */
    Long hdel(String key, String... field);

    /**
     * 檢測hash中指定的儲存是否存在
     *
     * @param key   儲存的鍵
     * @param field 儲存的額名字
     * @return 狀態碼, 1代表成功, 0代表失敗
     */
    Boolean hexists(String key, String field);

    /**
     * 以map的形式返回hash儲存的名字和值
     *
     * @param key 儲存的鍵
     * @return 根據key查詢到的儲存的名字和值
     */
    Map<String, String> hgetAll(String key);


    /**
     * 獲取hash中value的集合
     *
     * @param key hash中儲存的鍵
     * @return 指定鍵的所有value的集合
     */
    List<String> hvals(String key);

    /**
     * 根據儲存的鍵刪除儲存
     *
     * @param key 儲存的鍵
     * @return 狀態碼, 1成功, 0失敗
     */
    Long del(String key);
}

2017/11/20
Lucifer