RedisTemplate的使用與注意事項小結(jié)
一.什么是RedisTemplate
RedisTemplate 是一個工具類,由 Spring 官方提供的方便操作 Redis 數(shù)據(jù)庫的一個工具類,來源于 org.springframework.data.redis.core 包下。其本質(zhì)屬于 Spring-Data 模塊下的 Spring-Data-Redis 部分,它提供了從 Spring 應(yīng)用程序輕松配置和訪問 Redis的功能。

Spring-Data-Redis 是通過整合Lettuce和Jedis這倆種Redis客戶端產(chǎn)生的,對外則提供了RedisTemplate這樣統(tǒng)一的API來供調(diào)用者訪問。它既支持Luttuce的響應(yīng)式編程也支持JDK中集合的實現(xiàn)。
二.如何使用RedisTemplate
首先要導(dǎo)入相關(guān)依賴
<!--Redis依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> <!--連接池依賴-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>導(dǎo)入相關(guān)依賴之后,通過配置文件 application.yml 進(jìn)行配置,由于 RedisTemplate 是整合的Lettuce和Jedis,因此在配置連接池的時候需要進(jìn)行選擇是使用Lettuce還是Jedis(默認(rèn)是Lettuce)
spring:
data:
redis:
host: Redis所在主機(jī)地址
port: Redis對應(yīng)端口號默認(rèn)6379
password: 密碼
lettuce:
pool:
max-active: 最大連接數(shù)
max-wait: 等待時長
max-idle: 最大空閑連接
min-idle: 最小空閑連接在配置完成后,通過依賴注入就可以直接使用
@Autowired
private RedisTemplate redisTemplate;
@Test
void testCode() {
String checheCode = "cheche_code";
String code = "168901";
//寫入Redis
redisTemplate.opsForValue().set(checheCode, code);
//讀出Redis
Object o = redisTemplate.opsForValue().get(checheCode);
System.out.println("驗證碼為" + o);
}運行結(jié)果:

RedisTemplate的API
RedisTemplate 提供了豐富的方法來實現(xiàn)對 Redis 的各種操作,包括但不限于字符串、哈希、列表、集合和有序集合等數(shù)據(jù)結(jié)構(gòu)的操作。以下是一些常用的 RedisTemplate API:
字符串操作
opsForValue().set(key, value): 設(shè)置字符串值。opsForValue().get(key): 獲取字符串值。opsForValue().incr(key): 字符串值自增。opsForValue().decr(key): 字符串值自減。
哈希操作
opsForHash().getOperations().put(key, hashKey, value): 向哈希中添加鍵值對。opsForHash().getOperations().get(key, hashKey): 獲取哈希中的值。opsForHash().getOperations().entries(key): 獲取哈希中的所有鍵值對。
列表操作
opsForList().leftPush(key, value): 從列表左側(cè)添加元素。opsForList().rightPush(key, value): 從列表右側(cè)添加元素。opsForList().leftPop(key): 從列表左側(cè)彈出元素。opsForList().rightPop(key): 從列表右側(cè)彈出元素。
集合操作
opsForSet().add(key, value): 向集合中添加元素。opsForSet().members(key): 獲取集合中的所有元素。opsForSet().remove(key, value): 從集合中移除元素。
有序集合操作
opsForZSet().add(key, value, score): 向有序集合中添加元素,并指定分?jǐn)?shù)。opsForZSet().range(key, start, end): 獲取有序集合中指定分?jǐn)?shù)范圍內(nèi)的元素。opsForZSet().removeRangeByScore(key, minScore, maxScore): 按分?jǐn)?shù)范圍移除有序集合中的元素。
鍵操作
delete(key): 刪除鍵。hasKey(key): 檢查鍵是否存在。keys(pattern): 根據(jù)模式匹配獲取所有鍵。
事務(wù)
multi(): 開啟事務(wù)。exec(): 提交事務(wù)。
發(fā)布/訂閱
convertAndSend(channel, message): 發(fā)布消息。subscribe(RedisMessageListenerContainer, MessageListener): 訂閱消息。
連接管理
getConnectionFactory(): 獲取連接工廠。getExecutor(): 獲取執(zhí)行器。
序列化
setKeySerializer(Serializer): 設(shè)置鍵的序列化器。setValueSerializer(Serializer): 設(shè)置值的序列化器。
更多操作可以查看官方提供的API文檔:RedisTemplate (Spring Data Redis 3.3.2 API)
序列化
我們打開Redis圖形化工具查看一下剛才的驗證碼會發(fā)現(xiàn)剛才存入的驗證碼變成了一堆亂碼

這是因為Redis的序列化并沒有按照我們預(yù)期的進(jìn)行轉(zhuǎn)化,我們需要自己去重寫一個序列化,如下將key設(shè)置為String類型、value設(shè)置為json類型,最后將這個對象交給Spring管理,之后在調(diào)用該對象的時候就會自動選擇我們配置的這個
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
//創(chuàng)建RedisTemplate對象
RedisTemplate<String, Object> template = new RedisTemplate<>();
//設(shè)置連接工廠
template.setConnectionFactory(connectionFactory);
//創(chuàng)建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();
//設(shè)置key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashValueSerializer(RedisSerializer.string());
//設(shè)置value的序列化
template.setValueSerializer(jsonSerializer);
template.setHashValueSerializer(jsonSerializer);
return template;
}
}
對于JSON序列化工具,我們也需要引入依賴:
<!--jackson依賴-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
</dependency>我們再次打開測試觀察結(jié)果:
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
void testCode() {
String checheCode = "cheche_code";
String code = "168901";
//寫入Redis
redisTemplate.opsForValue().set(checheCode, code);
//讀出Redis
Object o = redisTemplate.opsForValue().get(checheCode);
System.out.println("驗證碼為" + o);
}
}我們可以發(fā)現(xiàn)數(shù)據(jù)已經(jīng)正常顯示出來了

三.StringRedisTemplate
由于存儲在 Redis 中的 key 和 value 通常是很常見的 String 類型,Redis模塊提供了 RedisConnection 和 RedisTemplate 的擴(kuò)展,分是 StringRedisConnection 和 StringRedisTemplate,作為字符串操作的解決方案。
打開源碼我們可以看見對于Key、Value、HashKey、HashValue都是進(jìn)行String類型的序列化。

因此對于一些復(fù)雜類型,如對象在StringRedisTemplate的時候往往需要自己手動序列化將對象轉(zhuǎn)為JSON再存入Redis。
到此這篇關(guān)于RedisTemplate的使用與注意事項小結(jié)的文章就介紹到這了,更多相關(guān)RedisTemplate使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
阿里云官方Redis開發(fā)規(guī)范總結(jié)
本文主要介紹了阿里云官方Redis開發(fā)規(guī)范總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Redis集群利用Redisson實現(xiàn)分布式鎖方式
這篇文章主要介紹了Redis集群利用Redisson實現(xiàn)分布式鎖方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Redis中RedisSearch使用及應(yīng)用場景
RedisSearch是一個強(qiáng)大的全文搜索和索引模塊,可以為Redis添加高效的搜索功能,下面就來介紹一下RedisSearch使用及應(yīng)用場景,感興趣的可以了解一下2025-05-05
Redis數(shù)據(jù)結(jié)構(gòu)ZipList,QuickList,SkipList使用及說明
文章介紹了ZipList數(shù)據(jù)結(jié)構(gòu)及其在Redis中的應(yīng)用,詳細(xì)解釋了其緊湊的內(nèi)存存儲方式和特點和應(yīng)用場景,同時探討了QuickList及其在Redis中的作用,以及不同數(shù)據(jù)類型的編碼方式和應(yīng)用場景2026-04-04

