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

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

兩者的數(shù)據(jù)是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate里面的數(shù)據(jù),RedisTemplate只能管理RedisTemplate中的數(shù)據(jù)。
其實(shí)他們兩者之間的區(qū)別主要在于他們使用的序列化類:
- RedisTemplate使用的是JdkSerializationRedisSerializer 存入數(shù)據(jù)會(huì)將數(shù)據(jù)先序列化成字節(jié)數(shù)組然后在存入Redis數(shù)據(jù)庫。
- StringRedisTemplate使用的是StringRedisSerializer
使用時(shí)注意事項(xiàng):
當(dāng)你的redis數(shù)據(jù)庫里面本來存的是字符串?dāng)?shù)據(jù)或者你要存取的數(shù)據(jù)就是字符串類型數(shù)據(jù)的時(shí)候,那么你就使用StringRedisTemplate即可。
但是如果你的數(shù)據(jù)是復(fù)雜的對(duì)象類型,而取出的時(shí)候又不想做任何的數(shù)據(jù)轉(zhuǎn)換,直接從Redis里面取出一個(gè)對(duì)象,那么使用RedisTemplate是更好的選擇。
RedisTemplate使用時(shí)常見問題:
redisTemplate 中存取數(shù)據(jù)都是字節(jié)數(shù)組。當(dāng)redis中存入的數(shù)據(jù)是可讀形式而非字節(jié)數(shù)組時(shí),使用redisTemplate取值的時(shí)候會(huì)無法獲取導(dǎo)出數(shù)據(jù),獲得的值為null??梢允褂肧tringRedisTemplate 試試。
StringRedisTemplate對(duì)于Redis的操作方法:
StringRedisTemplate.opsForValue().* //操作String字符串類型 StringRedisTemplate.delete(key/collection) //根據(jù)key/keys刪除 StringRedisTemplate.opsForList().* //操作List類型 StringRedisTemplate.opsForHash().* //操作Hash類型 StringRedisTemplate.opsForSet().* //操作set類型 StringRedisTemplate.opsForZSet().* //操作有序set
接口實(shí)現(xiàn)代碼如下:
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服務(wù)測(cè)試接口實(shí)現(xiàn)
* @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 根據(jù)key刪除redis的數(shù)據(jù)
* @param name
* @return
*/
@Override
public String delNameValue(String name) {
redisTemplate.delete(name);
return name;
}
/**
* @Description 根據(jù)key獲取list類型的value(范圍)
* @param key
* @return
*/
@Override
public List<String> findList(String key,int start,int end) {
log.info("=====================按照范圍查詢r(jià)edis中List類型=======================================");
return redisTemplate.opsForList().range(key,start,end);
}
/**
* @Description 插入多條數(shù)據(jù)
* @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最新記錄(右側(cè))
* @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數(shù)據(jù)
* @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();
}
}到此這篇關(guān)于Java中StringRedisTemplate和RedisTemplate的區(qū)別及使用方法的文章就介紹到這了,更多相關(guān)StringRedisTemplate和RedisTemplate區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用RedisTemplate如何根據(jù)前綴獲取key列表
- 使用redisTemplate從redis獲取所有數(shù)據(jù)
- SpringBoot整合Redis使用RedisTemplate和StringRedisTemplate
- 使用StringRedisTemplate操作Redis方法詳解
- Spring Boot中RedisTemplate的使用示例詳解
- Spring中RedisTemplate使用方法詳解
- Java使用RedisTemplate操作Redis遇到的坑
- Redis使用RedisTemplate導(dǎo)致key亂碼問題解決
- RedisTemplate的使用與注意事項(xiàng)小結(jié)
相關(guān)文章
IDEA使用SpringAssistant插件創(chuàng)建SpringCloud項(xiàng)目
IDEA 功能強(qiáng)大,可以用來高效的開發(fā)應(yīng)該程序。它還支持第三方插件、用戶可以根據(jù)需要添加自己喜歡的插件。下面介紹如何使用 IDEA 創(chuàng)建 Spring Cloud 項(xiàng)目2021-06-06
解決java.lang.NullPointerException問題(空指針異常)
本文詳細(xì)介紹了Java中的NullPointerException異常及其常見原因,包括對(duì)象引用為null、數(shù)組元素為null和方法返回null等情況,文章還提供了幾種解決空指針異常的方法,如使用if語句、Optional類、三元運(yùn)算符和異常處理等,通過這些方法,可以有效地避免空指針異常2025-02-02
Redis Java Lettuce驅(qū)動(dòng)框架原理解析
這篇文章主要介紹了Redis Java Lettuce驅(qū)動(dòng)框架原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
java hasNextInt判斷是否為數(shù)字的方法
今天小編就為大家分享一篇java hasNextInt判斷是否為數(shù)字的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Java實(shí)現(xiàn)后臺(tái)發(fā)送及接收json數(shù)據(jù)的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)后臺(tái)發(fā)送及接收json數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了java針對(duì)json格式數(shù)據(jù)的傳輸與操作相關(guān)技巧,需要的朋友可以參考下2018-12-12
Java?遠(yuǎn)程調(diào)用失敗重試的操作方法
這篇文章主要介紹了Java?遠(yuǎn)程調(diào)用失敗重試的操作方法,今天給大家介紹了一下?Spring??的?@Retryable?注解使用,并通過幾個(gè) demo 來帶大家編寫了自己重試攔截器以及回滾方法,需要的朋友可以參考下2022-09-09
Java發(fā)送form-data請(qǐng)求的實(shí)例代碼
在Java中發(fā)送form-data請(qǐng)求,可以使用Apache?HttpClient或OkHttp這樣的HTTP客戶端庫來發(fā)送請(qǐng)求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10

