Spring-data-redis是spring你們族的一部分,提供了在srping應用中經過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各類操做、異常處理及序列化,支持發佈訂閱,並對spring 3.1 cache進行了實現。redis
spring-data-redis針對jedis提供了以下功能:spring
1.鏈接池自動管理,提供了一個高度封裝的「RedisTemplate」類api
2.針對jedis客戶端中大量api進行了歸類封裝,將同一類型操做封裝爲operation接口緩存
ValueOperations:簡單K-V操做
SetOperations:set類型數據操做
ZSetOperations:zset類型數據操做
HashOperations:針對map類型的數據操做
ListOperations:針對list類型的數據操做app
(1)構建Maven工程 SpringDataRedisDemoide
(2)引入Spring相關依賴、引入JUnit依賴測試
(3)引入Jedis和SpringDataRedis依賴spa
1 <!-- 緩存 --> 2 <dependency> 3 <groupId>redis.clients</groupId> 4 <artifactId>jedis</artifactId> 5 <version>2.8.1</version> 6 </dependency> 7 <dependency> 8 <groupId>org.springframework.data</groupId> 9 <artifactId>spring-data-redis</artifactId> 10 <version>1.7.2.RELEASE</version> 11 </dependency>
(4)在src/main/resources下建立properties文件夾,創建redis-config.properties code
1 redis.host=127.0.0.1 2 redis.port=6379 3 # redis通常不須要密碼 4 redis.pass= 5 redis.database=0 6 redis.maxIdle=300 7 redis.maxWait=3000 8 redis.testOnBorrow=true
(5)在src/main/resources下建立spring文件夾 ,建立applicationContext-redis.xmlxml
1 <context:property-placeholder location="classpath*:properties/*.properties" /> 2 <!-- redis 相關配置 --> 3 <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> 4 <property name="maxIdle" value="${redis.maxIdle}" /> 5 <property name="maxWaitMillis" value="${redis.maxWait}" /> 6 <property name="testOnBorrow" value="${redis.testOnBorrow}" /> 7 </bean> 8 <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 9 p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/> 10 11 <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> 12 <property name="connectionFactory" ref="JedisConnectionFactory" /> 13 </bean>
maxIdle :最大空閒數
maxWaitMillis:鏈接時的最大等待毫秒數
testOnBorrow:在提取一個jedis實例時,是否提早進行驗證操做;若是爲true,則獲得的jedis實例均是可用的;
1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml") 3 public class TestValue { 4 @Autowired 5 private RedisTemplate redisTemplate; 6 @Test 7 public void setValue(){ 8 redisTemplate.boundValueOps("name").set("itcast"); 9 } 10 @Test 11 public void getValue(){ 12 String str = (String) redisTemplate.boundValueOps("name").get(); 13 System.out.println(str); 14 } 15 @Test 16 public void deleteValue(){ 17 redisTemplate.delete("name");; 18 } 19 }
1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml") 3 public class TestSet { 4 5 @Autowired 6 private RedisTemplate redisTemplate; 7 8 /** 9 * 存入值 10 */ 11 @Test 12 public void setValue(){ 13 redisTemplate.boundSetOps("nameset").add("曹操"); 14 redisTemplate.boundSetOps("nameset").add("劉備"); 15 redisTemplate.boundSetOps("nameset").add("孫權"); 16 } 17 18 /** 19 * 提取值 20 */ 21 @Test 22 public void getValue(){ 23 Set members = redisTemplate.boundSetOps("nameset").members(); 24 System.out.println(members); 25 } 26 27 /** 28 * 刪除集合中的某一個值 29 */ 30 @Test 31 public void deleteValue(){ 32 redisTemplate.boundSetOps("nameset").remove("孫權"); 33 } 34 35 /** 36 * 刪除整個集合 37 */ 38 @Test 39 public void deleteAllValue(){ 40 redisTemplate.delete("nameset"); 41 } 42 }
建立測試類TestList
(1)右壓棧
1 /** 2 * 右壓棧:後添加的對象排在後邊 3 */ 4 @Test 5 public void testSetValue1(){ 6 redisTemplate.boundListOps("namelist1").rightPush("劉備"); 7 redisTemplate.boundListOps("namelist1").rightPush("關羽"); 8 redisTemplate.boundListOps("namelist1").rightPush("張飛"); 9 } 10 11 /** 12 * 顯示右壓棧集合 13 */ 14 @Test 15 public void testGetValue1(){ 16 List list = redisTemplate.boundListOps("namelist1").range(0, 10); 17 System.out.println(list); 18 }
運行結果:
[劉備, 關羽, 張飛]
(2)左壓棧
1 /** 2 * 左壓棧:後添加的對象排在前邊 3 */ 4 @Test 5 public void testSetValue2(){ 6 redisTemplate.boundListOps("namelist2").leftPush("劉備"); 7 redisTemplate.boundListOps("namelist2").leftPush("關羽"); 8 redisTemplate.boundListOps("namelist2").leftPush("張飛"); 9 } 10 11 /** 12 * 顯示左壓棧集合 13 */ 14 @Test 15 public void testGetValue2(){ 16 List list = redisTemplate.boundListOps("namelist2").range(0, 10); 17 System.out.println(list); 18 }
運行結果:
[張飛, 關羽, 劉備]
(3)根據索引查詢元素
1 /** 2 * 查詢集合某個元素 3 */ 4 @Test 5 public void testSearchByIndex(){ 6 String s = (String) redisTemplate.boundListOps("namelist1").index(1); 7 System.out.println(s); 8 }
(4)移除某個元素的值
1 /** 2 * 移除集合某個元素 3 */ 4 @Test 5 public void testRemoveByIndex(){ 6 redisTemplate.boundListOps("namelist1").remove(1, "關羽"); 7 }
建立測試類TestHash
(1)存入值
1 @Test 2 public void testSetValue(){ 3 redisTemplate.boundHashOps("namehash").put("a", "唐僧"); 4 redisTemplate.boundHashOps("namehash").put("b", "悟空"); 5 redisTemplate.boundHashOps("namehash").put("c", "八戒"); 6 redisTemplate.boundHashOps("namehash").put("d", "沙僧"); 7 }
(2)提取全部的KEY
1 @Test 2 public void testGetKeys(){ 3 Set s = redisTemplate.boundHashOps("namehash").keys(); 4 System.out.println(s); 5 }
運行結果:
[a, b, c, d]
(3)提取全部的值
1 @Test 2 public void testGetValues(){ 3 List values = redisTemplate.boundHashOps("namehash").values(); 4 System.out.println(values); 5 }
運行結果:
[唐僧, 悟空, 八戒, 沙僧]
(4)根據KEY提取值
1 @Test 2 public void testGetValueByKey(){ 3 Object object = redisTemplate.boundHashOps("namehash").get("b"); 4 System.out.println(object); 5 }
運行結果:
悟空
(5)根據KEY移除值
1 @Test 2 public void testRemoveValueByKey(){ 3 redisTemplate.boundHashOps("namehash").delete("c"); 4 } 5 6 /* 7 * 運行後再次查看集合內容: 8 * [唐僧, 悟空, 沙僧] 9 */