在學習SpringCloud的過程當中,總須要記錄一下學習的過程,今天記錄一下StringRedisTemplate和RedisTemplate的區別及使用方法,使用時只需使用maven依賴包spring-boot-starter-data-redis便可,而後在service中注入StringRedisTemplate或者RedisTemplate便可java
首先以下圖所示StringRedisTemplate繼承了RedisTemplate,因此二者對Redis的操做方法具備相同之處redis
二者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate裏面的數據,RedisTemplate只能管理RedisTemplate中的數據。spring
RedisTemplate使用的是JdkSerializationRedisSerializer 存入數據會將數據先序列化成字節數組而後在存入Redis數據庫。 數據庫
StringRedisTemplate使用的是StringRedisSerializer數組
redisTemplate 中存取數據都是字節數組。當redis中存入的數據是可讀形式而非字節數組時,使用redisTemplate取值的時候會沒法獲取導出數據,得到的值爲null。可使用 StringRedisTemplate 試試。maven
StringRedisTemplate對於Redis的操做方法:ide
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
接口實現代碼以下:spring-boot
package com.cloud.spring.demo.service.impl; import com.cloud.spring.demo.service.RedisTestService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Set; /** * @Package: com.cloud.spring.demo.service.impl * @ClassName: RedisTestServiceImpl * @Author: zhougaoyang * @Description: redis服務測試接口實現 * @Date: 2019/4/27 10:16 * @Version: 1.0 */ @Service public class RedisTestServiceImpl implements RedisTestService { private static final Logger log = LoggerFactory.getLogger(RedisTestService.class); @Autowired private StringRedisTemplate redisTemplate; /** * @Description 獲取String類型的value * @param name * @return */ @Override public String findName(String name) { if (name==null){ log.error("===============key爲null======================================================"); } return redisTemplate.opsForValue().get(name); } /** * @Description 添加String類型的key-value * @param name * @param value * @return */ @Override public String setNameValue(String name, String value) { log.info("==================添加String類型的key-value========================================"); redisTemplate.opsForValue().set(name,value); return name; } /** * @Description 根據key刪除redis的數據 * @param name * @return */ @Override public String delNameValue(String name) { redisTemplate.delete(name); return name; } /** * @Description 根據key獲取list類型的value(範圍) * @param key * @return */ @Override public List<String> findList(String key,int start,int end) { log.info("=====================按照範圍查詢redis中List類型======================================="); return redisTemplate.opsForList().range(key,start,end); } /** * @Description 插入多條數據 * @param key * @param value * @return */ @Override public long setList(String key, List<String> value) { log.info("=========================redis List type insert ======================================"); return redisTemplate.opsForList().rightPushAll(key, value); } /** * @Description 獲取list最新記錄(右側) * @param key * @return */ @Override public String findLatest(String key) { log.info("=============================rides List latest rigth=================================="); return redisTemplate.opsForList().index(key,redisTemplate.opsForList().size(key)-1); } /** * @Description 查詢hash * @param key * @return */ @Override public Map<Object, Object> findHash(String key) { log.info("===================================redis hash ========================================="); return redisTemplate.opsForHash().entries(key); } /** * @Description 查詢hash中全部的key * @param key * @return */ @Override public Set<Object> findHashKeys(String key) { log.info("====================================== All keys of hash ==============================="); return redisTemplate.opsForHash().keys(key); } /** * @Description 查詢hash中全部的value * @param key * @return */ @Override public List<Object> findHashValues(String key) { log.info("===================================== All values of hash =============================="); return redisTemplate.opsForHash().values(key); } /** * @Desscription 插入hash數據 * @param key * @param map * @return */ @Override public long insertHash(String key, Map<String, Object> map) { log.info("====================================== insert hashes into redis ========================"); redisTemplate.opsForHash().putAll(key,map); return map.size(); } }