一.>創建一個maven工程應用和相關配置:Redis_study,創建工程應用過程略
1.>配置pom.xml:文件內容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Redis_dom1</groupId> <artifactId>Redis_study</artifactId> <version>01</version> <packaging>war</packaging> <name>Redis_study xzh</name> <build> <!-- ###########給出構建過程中所用到的插件start######## --> <plugins> <!-- 由於maven默認使用的jdk與工程配置的jdk版本不一致,導致無法編譯通過,通過該插件指定jdk版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- maven-surefire-plugin 是maven里執行測試用例的插件,不顯示配置就會用默認配置。這個插件的 surefire:test 命令會默認綁定maven執行的 test 階段 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <!-- 跳過測試單元 true:跳過測試,false不跳過(默認)--> <skip>true</skip> </configuration> </plugin> </plugins> <!-- ###########給出構建過程中所用到的插件end######## --> </build> <properties> <spring.version>3.2.3.RELEASE</spring.version> </properties> <dependencies> <!-- junit依賴 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- Redis客戶端jedis依賴 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.0</version> </dependency> <!-- spring-data-redis依賴 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.5.0.RELEASE</version> </dependency> <!-- spring相關 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </project>
2.>配置Redis屬性文件redis.properties:文件內容如下
#redis.hostName=localhost
#配置服務器ip地址
redis.hostName=***.***.***.**
redis.port=6379
redis.password=redisroot
redis.timeout=5000
redis.pool.maxActive=200
redis.pool.maxIdle=50
redis.pool.minIdle=20
redis.pool.maxWait=3000
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true
redis.pool.usePool=true
3.>配置Spring啟動需初始化的上下文bean:application-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--使用注解 --> <context:annotation-config /> <!-- 加載redis配置文件 --> <context:property-placeholder location="classpath:redis.properties" /> <bean id="jedisPoolConfig1" class="redis.clients.jedis.JedisPoolConfig"> </bean> <!-- ################RedisTemplate操作模板配置begin##################### --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" > <property name="hostName" value="${redis.hostName}"></property> <property name="port" value="${redis.port}"></property> <property name="password" value="${redis.password}"></property> <property name="timeout" value="${redis.timeout}"></property> <property name="usePool" value="${redis.pool.usePool}"></property> <property name="poolConfig" ref="jedisPoolConfig1"></property> </bean> <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </property> </bean> <!-- ################RedisTemplate操作模板配置end##################### --> <!-- ################JedisPool操作配置begin ##############################--> <!-- Redis連接池的配置 --> <bean id="jedisPoolConfig2" class="redis.clients.jedis.JedisPoolConfig" > <property name="maxTotal" value="${redis.pool.maxActive}"/> <!-- 控制一個pool可分配多少個jedis實例 --> <property name="maxIdle" value="${redis.pool.maxIdle}"/> <!-- 控制一個pool最多有多少個狀態為idle(空閑)的jedis實例 --> <property name="minIdle" value="${redis.pool.minIdle}"/> <!-- 控制一個pool最少有多少個狀態為idle(空閑)的jedis實例 --> <property name="maxWaitMillis" value="${redis.pool.maxWait}"/><!-- 表示當borrow一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋出JedisConnectionException --> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/><!-- 在borrow一個jedis實例時,是否提前進行validate操作;如果為true,則得到的jedis實例均是可用的 --> <property name="testOnReturn" value="${redis.pool.testOnReturn}"/> </bean> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg index="0" ref="jedisPoolConfig2"/> <constructor-arg index="1" value="${redis.hostName}" /> <constructor-arg index="2" value="${redis.port}" /> <constructor-arg index="3" value="${redis.timeout}" /> <!--Redis密碼--> <constructor-arg index="4" value="${redis.password}" /> </bean> <!-- ################JedisPool操作配置end ################################--> </beans>
二.>編寫測試代碼
1.>編寫Spring單位測試加載基礎類:BaseTest.java
package redis; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.ContextConfiguration; import org.junit.runner.RunWith; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; //指定bean注入的配置文件 @ContextConfiguration(locations = {"classpath:application.xml"}) //使用標准的JUnit @RunWith 注釋運行Spring Test Runner @RunWith(SpringJUnit4ClassRunner.class) public class BaseTest extends AbstractJUnit4SpringContextTests {}
2.>編寫測試類:RedisTest.java
package redis; import java.util.concurrent.TimeUnit; import java.util.Map; import java.util.HashMap; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * * @ClassName: RedisTest * @Description: TODO * @author xzh * @date 20170323 * */ public class RedisTest extends BaseTest { @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private JedisPool jedisPool; public Map<String,String> student = new HashMap<String,String>(); /** * 測試插入與獲取Redis的數據 * @Title: testPutAndGet * @Description: TODO * @throws */ @Test public void testPutAndGet() { System.out.println(this.getClass().getName()+"testPutAndGet"); redisTemplate.opsForHash().put("user", "name", "rhwayfun"); Object object = redisTemplate.opsForHash().get("user", "name"); System.out.println(object); } /** * 測試Redis作為緩存的例子 * @Title: testCache * @Description: TODO * @throws InterruptedException * @throws */ @Test public void testCache() throws InterruptedException { //-------jedisPool配置使用--redisTemplate--進行操作Start-------------// System.out.println("-------jedisPool配置使用--redisTemplate--進行操作Start-------------"); // 插入一條數據 redisTemplate.opsForHash().put("user", "name", "rhwayfun"); // 設置失效時間為6秒 redisTemplate.expire("user", 6, TimeUnit.SECONDS); // 3秒后獲取 Thread.sleep(3000); Object object = redisTemplate.opsForHash().get("user", "name"); System.out.println("3秒后:" + object); // 7秒后獲取 Thread.sleep(4000); object = redisTemplate.opsForHash().get("user", "name"); System.out.println("7秒后:" + object); System.out.println("-------jedisPool配置使用--redisTemplate--進行操作end---------------\n"); //-------jedisPool配置使用--redisTemplate--進行操作end-------------// //-------jedisPool配置使用----Jedis----進行操作Start-------------// System.out.println("-------jedisPool配置使用Jedis的進行操作Start-------------"); Jedis jedis = jedisPool.getResource(); System.out.println("服務器IP地址:"+jedis.configGet("bind")); /*hash api:hset*/ jedis.hset("me", "name", "xzh"); System.out.println("jedis.hset(me, name, xzh):" + jedis.hget("me", "name")); /*hash api:hmset*/ student.put("naem","xzh"); student.put("stid", "1"); jedis.hmset("student", student); //關閉連接 if(jedis != null) { student.clear(); jedisPool.close(); } System.out.println("-------jedisPool配置使用Jedis的進行操作end--------------\n"); //-------jedisPool配置使用----Jedis----進行操作end-------------// } }
運行結果:運行之前先搭建號redis緩存服務,右鍵點擊方法名,選擇則“Run As”→“JUnit Test”即可
......
-------jedisPool配置使用--redisTemplate--進行操作Start-------------
3秒后:rhwayfun
7秒后:null
-------jedisPool配置使用--redisTemplate--進行操作end---------------
-------jedisPool配置使用Jedis的進行操作Start-------------
服務器IP地址:[bind, 127.0.0.1 192.168.248.85]
jedis.hset(me, name, xzh):xzh
-------jedisPool配置使用Jedis的進行操作end--------------
redis.RedisTesttestPutAndGet
rhwayfun
右鍵點擊方法名,選擇則“Run As”→“JUnit Test”即可