Spring Data Redis

Spring-data-redisspring你們族的一部分,提供了在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操做
  SetOperationsset類型數據操做
  ZSetOperationszset類型數據操做
  HashOperations:針對map類型的數據操做
  ListOperations:針對list類型的數據操做app

 

Demo

1)構建Maven工程  SpringDataRedisDemoide

2)引入Spring相關依賴、引入JUnit依賴測試

3)引入JedisSpringDataRedis依賴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>    
View Code

 

(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 
View Code

 

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>  
View Code

 

  maxIdle :最大空閒數

  maxWaitMillis:鏈接時的最大等待毫秒數

  testOnBorrow:在提取一個jedis實例時,是否提早進行驗證操做;若是爲true,則獲得的jedis實例均是可用的;

4.5.2值類型操做

 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 }
View Code

4.5.3 Set類型操做

 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 }
View Code

4.5.4 List類型操做

建立測試類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     }
View Code

 

運行結果:

[劉備, 關羽, 張飛]

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     }
View Code

 

運行結果:

[張飛, 關羽, 劉備]

(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     }
View Code

(4)移除某個元素的值

1     /**
2      * 移除集合某個元素
3      */
4     @Test
5     public void testRemoveByIndex(){
6         redisTemplate.boundListOps("namelist1").remove(1, "關羽");
7     }
View Code

4.5.5 Hash類型操做

建立測試類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     }
View Code

 

2)提取全部的KEY

 

1     @Test
2     public void testGetKeys(){
3         Set s = redisTemplate.boundHashOps("namehash").keys();        
4         System.out.println(s);        
5     }
View Code

 

運行結果:

[a, b, c, d]

3)提取全部的值

 

1     @Test
2     public void testGetValues(){
3         List values = redisTemplate.boundHashOps("namehash").values();
4         System.out.println(values);        
5     }
View Code

 

運行結果:

[唐僧, 悟空, 八戒, 沙僧]

4)根據KEY提取值

 

1     @Test
2     public void testGetValueByKey(){
3         Object object = redisTemplate.boundHashOps("namehash").get("b");
4         System.out.println(object);
5     }
View Code

 

運行結果:

悟空

5)根據KEY移除值

 

1     @Test
2     public void testRemoveValueByKey(){
3         redisTemplate.boundHashOps("namehash").delete("c");
4     }
5 
6 /*
7  * 運行後再次查看集合內容:
8  * [唐僧, 悟空, 沙僧]
9 */
View Code
相關文章
相關標籤/搜索