Spring Boot + RedisTemplate 數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)操作大全
?? 一、Redis簡介與Spring Boot集成
Redis核心數(shù)據(jù)類型
Redis支持5種主要數(shù)據(jù)結(jié)構(gòu):
- String:字符串,最基本的數(shù)據(jù)類型
- Hash:哈希表,適合存儲對象
- List:列表,支持順序操作
- Set:無序集合,支持交并差運(yùn)算
- ZSet:有序集合,適合排行榜場景
Spring Boot集成配置
依賴配置(pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>配置文件(application.yml):
spring:
redis:
host: localhost
port: 6379
database: 0
timeout: 3000ms
lettuce:
pool:
max-active: 8
max-idle: 8?? 二、RedisTemplate配置與初始化
序列化配置類
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 設(shè)置key序列化為String
template.setKeySerializer(new StringRedisSerializer());
// 設(shè)置value序列化為JSON
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}注入操作對象
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private ValueOperations<String, Object> valueOps; // String操作
@Autowired
private HashOperations<String, String, Object> hashOps; // Hash操作
@Autowired
private ListOperations<String, Object> listOps; // List操作
@Autowired
private SetOperations<String, Object> setOps; // Set操作
@Autowired
private ZSetOperations<String, Object> zSetOps; // ZSet操作
}?? 三、5種數(shù)據(jù)類型操作詳解
1. String類型 - 基礎(chǔ)鍵值存儲
// 基本操作
valueOps.set("username", "張三"); // SET
valueOps.get("username"); // GET
valueOps.increment("counter"); // INCR
valueOps.set("token", "abc123", 30, TimeUnit.MINUTES); // 帶過期時間
// 進(jìn)階操作
valueOps.setIfAbsent("lock", "locked"); // SETNX(分布式鎖)
valueOps.getAndSet("key", "newValue"); // GETSET2. Hash類型 - 對象存儲
// 存儲用戶對象
Map<String, Object> user = new HashMap<>();
user.put("name", "張三");
user.put("age", 25);
user.put("email", "zhangsan@example.com");
hashOps.putAll("user:1001", user); // HMSET
// 操作字段
hashOps.get("user:1001", "name"); // HGET
hashOps.hasKey("user:1001", "age"); // HEXISTS
hashOps.keys("user:1001"); // HKEYS
hashOps.increment("user:1001", "age", 1); // HINCRBY3. List類型 - 隊列和棧
// 隊列操作(左進(jìn)右出)
listOps.leftPush("tasks", "task1"); // LPUSH
listOps.leftPushAll("tasks", "task2", "task3");
listOps.rightPop("tasks"); // RPOP
// 列表操作
listOps.range("messages", 0, 10); // LRANGE
listOps.index("messages", 0); // LINDEX
listOps.trim("messages", 0, 99); // LTRIM(保留最近100條)4. Set類型 - 無序集合
// 標(biāo)簽系統(tǒng)示例
setOps.add("user:tags:1001", "java", "redis", "spring"); // SADD
setOps.members("user:tags:1001"); // SMEMBERS
// 集合運(yùn)算
setOps.intersect("user:tags:1001", "user:tags:1002"); // SINTER(交集)
setOps.union("tag:java:users", "tag:redis:users"); // SUNION(并集)
setOps.isMember("user:tags:1001", "java"); // SISMEMBER5. ZSet類型 - 有序集合(排行榜)
// 游戲排行榜
zSetOps.add("leaderboard", "player1", 1000); // ZADD
zSetOps.add("leaderboard", "player2", 2000);
zSetOps.incrementScore("leaderboard", "player1", 500); // ZINCRBY
// 查詢操作
zSetOps.reverseRange("leaderboard", 0, 9); // ZREVRANGE(前10名)
zSetOps.rank("leaderboard", "player1"); // ZRANK(排名)
zSetOps.score("leaderboard", "player1"); // ZSCORE(分?jǐn)?shù))
zSetOps.count("leaderboard", 1000, 3000); // ZCOUNT(分?jǐn)?shù)區(qū)間統(tǒng)計)? 四、高級特性與實(shí)戰(zhàn)應(yīng)用
事務(wù)支持
redisTemplate.execute(new SessionCallback<List<Object>>() {
@Override
public List<Object> execute(RedisOperations operations) throws DataAccessException {
operations.multi(); // 開啟事務(wù)
operations.opsForValue().set("key1", "value1");
operations.opsForValue().increment("counter");
return operations.exec(); // 執(zhí)行事務(wù)
}
});管道技術(shù)(批量操作)
List<Object> results = redisTemplate.executePipelined(new SessionCallback<Object>() {
@Override
public Object execute(RedisOperations operations) throws DataAccessException {
for (int i = 0; i < 1000; i++) {
operations.opsForValue().set("key:" + i, "value:" + i);
}
return null;
}
});到此這篇關(guān)于Spring Boot + RedisTemplate 數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)操作的文章就介紹到這了,更多相關(guān)Spring Boot RedisTemplate 數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot引入Redis報org.springframework.data.redis.core.RedisTemplate類找不到錯誤問題
- Springboot中RedisTemplate設(shè)置String、Hash、List過期時間
- Spring Boot中RedisTemplate的使用示例詳解
- Spring?boot?RedisTemplate?序列化服務(wù)化配置方式
- springboot使用redisTemplate操作lua腳本
- SpringBoot整合Redis使用@Cacheable和RedisTemplate
- SpringBoot使用RedisTemplate.delete刪除指定key失敗的解決辦法
- springboot攔截器無法注入redisTemplate的解決方法
- Redis整合SpringBoot的RedisTemplate實(shí)現(xiàn)類(實(shí)例詳解)
相關(guān)文章
Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報文方式
這篇文章主要介紹了Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報文方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
JavaApi實(shí)現(xiàn)更新刪除及讀取節(jié)點(diǎn)
這篇文章主要介紹了JavaApi實(shí)現(xiàn)更新刪除及讀取節(jié)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Spring中@Import的各種用法以及ImportAware接口詳解
這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
在Spring?MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法
在Spring?MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來定義全局異常處理器類,并使用?@ExceptionHandler注解來定義處理特定異常的方法,本文就給大家介紹了Spring?MVC?@ControllerAdvice創(chuàng)建處理器的方法,需要的朋友可以參考下2023-08-08
mybatis類型處理器JSR310標(biāo)準(zhǔn)詳解
這篇文章主要介紹了mybatis類型處理器JSR310標(biāo)準(zhǔn)詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
深入了解Spring Boot2.3.0及以上版本的Liveness和Readiness功能
這篇文章主要介紹了Spring Boot2.3.0及以上版本的Liveness和Readiness功能示例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

