spring中redis連線池版單節點使用(xml配置及非xml配置)
阿新 • • 發佈:2018-11-21
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