StringRedisTemplate和RedisTemplate的區別及使用方法


本文轉自:https://www.cnblogs.com/MyYJ/p/10778874.html

在學習SpringCloud的過程中,總需要記錄一下學習的過程,今天記錄一下StringRedisTemplate和RedisTemplate的區別及使用方法,使用時只需使用maven依賴包spring-boot-starter-data-redis即可,然后在service中注入StringRedisTemplate或者RedisTemplate即可

 

首先如下圖所示StringRedisTemplate繼承了RedisTemplate,所以兩者對Redis的操作方法具有相同之處

 

  • 兩者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數據,RedisTemplate只能管理RedisTemplate中的數據。

  • 其實他們兩者之間的區別主要在於他們使用的序列化類:

    RedisTemplate使用的是JdkSerializationRedisSerializer    存入數據會將數據先序列化成字節數組然后在存入Redis數據庫。 

      StringRedisTemplate使用的是StringRedisSerializer

  • 使用時注意事項:
   當你的redis數據庫里面本來存的是字符串數據或者你要存取的數據就是字符串類型數據的時候,那么你就使用StringRedisTemplate即可。
   但是如果你的數據是復雜的對象類型,而取出的時候又不想做任何的數據轉換,直接從Redis里面取出一個對象,那么使用RedisTemplate是更好的選擇。
  • RedisTemplate使用時常見問題:

    redisTemplate 中存取數據都是字節數組。當redis中存入的數據是可讀形式而非字節數組時,使用redisTemplate取值的時候會無法獲取導出數據,獲得的值為null。可以使用 StringRedisTemplate 試試。

StringRedisTemplate對於Redis的操作方法:

1 StringRedisTemplate.opsForValue().* //操作String字符串類型
2 StringRedisTemplate.delete(key/collection) //根據key/keys刪除
3 StringRedisTemplate.opsForList().*  //操作List類型
4 StringRedisTemplate.opsForHash().*  //操作Hash類型
5 StringRedisTemplate.opsForSet().*  //操作set類型
6 StringRedisTemplate.opsForZSet().*  //操作有序set

  

 接口實現代碼如下:

  1 package com.cloud.spring.demo.service.impl;
  2 
  3 import com.cloud.spring.demo.service.RedisTestService;
  4 import org.slf4j.Logger;
  5 import org.slf4j.LoggerFactory;
  6 import org.springframework.beans.factory.annotation.Autowired;
  7 import org.springframework.data.redis.core.StringRedisTemplate;
  8 import org.springframework.stereotype.Service;
  9 
 10 import java.util.List;
 11 import java.util.Map;
 12 import java.util.Set;
 13 
 14 /**
 15  * @Package: com.cloud.spring.demo.service.impl
 16  * @ClassName: RedisTestServiceImpl
 17  * @Author: zhougaoyang
 18  * @Description: redis服務測試接口實現
 19  * @Date: 2019/4/27 10:16
 20  * @Version: 1.0
 21  */
 22 @Service
 23 public class RedisTestServiceImpl implements RedisTestService {
 24     private static final Logger log = LoggerFactory.getLogger(RedisTestService.class);
 25 
 26     @Autowired
 27     private StringRedisTemplate redisTemplate;
 28 
 29 
 30     /**
 31      * @Description 獲取String類型的value
 32      * @param name
 33      * @return
 34      */
 35     @Override
 36     public String findName(String name) {
 37         if (name==null){
 38             log.error("===============key為null======================================================");
 39         }
 40         return redisTemplate.opsForValue().get(name);
 41     }
 42 
 43     /**
 44      * @Description 添加String類型的key-value
 45      * @param name
 46      * @param value
 47      * @return
 48      */
 49     @Override
 50     public String setNameValue(String name, String value) {
 51         log.info("==================添加String類型的key-value========================================");
 52         redisTemplate.opsForValue().set(name,value);
 53         return name;
 54     }
 55 
 56     /**
 57      * @Description 根據key刪除redis的數據
 58      * @param name
 59      * @return
 60      */
 61     @Override
 62     public String delNameValue(String name) {
 63         redisTemplate.delete(name);
 64         return name;
 65     }
 66 
 67     /**
 68      * @Description 根據key獲取list類型的value(范圍)
 69      * @param key
 70      * @return
 71      */
 72     @Override
 73     public List<String> findList(String key,int start,int end) {
 74         log.info("=====================按照范圍查詢redis中List類型=======================================");
 75         return redisTemplate.opsForList().range(key,start,end);
 76     }
 77 
 78     /**
 79      * @Description 插入多條數據
 80      * @param key
 81      * @param value
 82      * @return
 83      */
 84     @Override
 85     public long setList(String key, List<String> value) {
 86         log.info("=========================redis List type insert ======================================");
 87         return redisTemplate.opsForList().rightPushAll(key, value);
 88     }
 89 
 90     /**
 91      * @Description 獲取list最新記錄(右側)
 92      * @param key
 93      * @return
 94      */
 95     @Override
 96     public String findLatest(String key) {
 97         log.info("=============================rides List latest rigth==================================");
 98         return redisTemplate.opsForList().index(key,redisTemplate.opsForList().size(key)-1);
 99     }
100 
101     /**
102      * @Description 查詢hash
103      * @param key
104      * @return
105      */
106     @Override
107     public Map<Object, Object> findHash(String key) {
108         log.info("===================================redis hash =========================================");
109         return redisTemplate.opsForHash().entries(key);
110     }
111 
112     /**
113      * @Description 查詢hash中所有的key
114      * @param key
115      * @return
116      */
117     @Override
118     public Set<Object> findHashKeys(String key) {
119         log.info("====================================== All keys of hash ===============================");
120         return redisTemplate.opsForHash().keys(key);
121     }
122 
123     /**
124      * @Description 查詢hash中所有的value
125      * @param key
126      * @return
127      */
128     @Override
129     public List<Object> findHashValues(String key) {
130         log.info("===================================== All values of hash ==============================");
131         return redisTemplate.opsForHash().values(key);
132     }
133 
134     /**
135      * @Desscription 插入hash數據
136      * @param key
137      * @param map
138      * @return
139      */
140     @Override
141     public long insertHash(String key, Map<String, Object> map) {
142         log.info("====================================== insert hashes into redis ========================");
143         redisTemplate.opsForHash().putAll(key,map);
144         return map.size();
145     }
146 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM