1. 程式人生 > >spring中redis連線池版單節點使用(xml配置及非xml配置)

spring中redis連線池版單節點使用(xml配置及非xml配置)

1.依賴

    <!--引入reids-->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

2.非xml方式


import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //宣告一個ApplicationContext整合測試載入WebApplicationContext,作用是模擬ServletContext
@ContextConfiguration(locations={"classpath:spring/spring-application.xml"})
@Service
public class RedisSingleNoXmlServiceImpl {

    private static final Logger logger = Logger.getLogger(RedisSingleNoXmlServiceImpl.class);

    private static JedisPool jedisPool = null;
    static {
        //第一步:配置redis連線池
        if(jedisPool == null) {
            JedisPoolConfig config = new JedisPoolConfig();
            //控制一個pool可分配多少個jedis例項,通過pool.getResource()來獲取;
            //如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis例項,則此時pool的狀態為exhausted(耗盡)。
            config.setMaxTotal(50);
            //控制一個pool最多有多少個狀態為idle(空閒的)的jedis例項。
            config.setMaxIdle(5);
            //表示當borrow(引入)一個jedis例項時,最大的等待時間,如果超過等待時間,則直接丟擲JedisConnectionException;單位毫秒
            //小於零:阻塞不確定的時間,  預設-1
            config.setMaxWaitMillis(1000*100);
            //在borrow(引入)一個jedis例項時,是否提前進行validate操作;如果為true,則得到的jedis例項均是可用的;
            config.setTestOnBorrow(true);
            //return 一個jedis例項給pool時,是否檢查連線可用性(ping())
            config.setTestOnReturn(true);
            //connectionTimeout 連線超時(預設2000ms)
            //soTimeout 響應超時(預設2000ms)
            jedisPool = new JedisPool(config, "127.0.0.1", 6379,  2000);
        }
    }

    @Test
    public void testJedisPool() throws Exception {

    // 第二步:從JedisPool中獲得Jedis物件。
    Jedis jedis = jedisPool.getResource();
    // 第三步:使用Jedis操作redis伺服器。
    jedis.set("a", "1");
    String result = jedis.get("a");
	System.out.println(result);
    // 第四步:操作完畢後關閉jedis物件,連線池回收資源。
	jedis.close();
    // 第五步:關閉JedisPool物件。
	jedisPool.close();
    }
}

3.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">

    <description>redis cluster configuation</description>
    <!-- 讀取jedis配置檔案; 這裡可以不用配置,-dao已經配置了掃描配置檔案 -->
    <!-- <context:property-placeholder location="classpath:/properties/*.properties"/> -->
    <!-- 連線池配置 -->
    <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="1800000" />
        <!-- 連線空閒多久後釋放, 當空閒時間>該值 且 空閒連線>最大空閒連線數 時直接釋放 -->
        <property name="softMinEvictableIdleTimeMillis" value="10000" />
        <!-- 獲取連線時的最大等待毫秒數,小於零:阻塞不確定的時間,預設-1 -->
        <property name="maxWaitMillis" value="1500" />
        <!-- 在獲取連線的時候檢查有效性, 預設false -->
        <property name="testOnBorrow" value="true" />
        <!-- 在空閒時檢查有效性, 預設false -->
        <property name="testWhileIdle" value="true" />
        <!-- 連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true -->
        <property name="blockWhenExhausted" value="false" />
    </bean>
    <!--jedis客戶端單機版 -->
    <bean id="redisClient" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
    </bean>


</beans>
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;


@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //宣告一個ApplicationContext整合測試載入WebApplicationContext,作用是模擬ServletContext
@ContextConfiguration(locations={"classpath:spring/spring-application.xml"})
@Service
public class RedisSingleServiceImpl {

    private static final Logger logger = Logger.getLogger(RedisSingleServiceImpl.class);

    @Test
    public void JedisTestMain() {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/spring-application.xml");
        JedisPool jedisPool = (JedisPool) context.getBean("redisClient");
        Jedis jedis = jedisPool.getResource();
        jedis.set("key1", "1111");
        String str = jedis.get("key1");
        System.out.println("--:" + str);
        jedis.close();
        jedisPool.close();
        }
}

4.持久化配置

可以將RDB於AOF方式一同使用:

修改redis.windows.conf檔案 內容:

appendonly yes

save 900 1

save 300 10

save 60 10000

編寫一個啟動指令碼startRedisServer.bat 內容:

@echo off
redis-server.exe redis.windows.conf
@pause