
0. 前言
前兩章我們了解了《【實(shí)踐篇】Redis最強(qiáng)Java客戶端(一)之Redisson入門介紹》和《【實(shí)踐篇】Redis最強(qiáng)Java客戶端(二)之Redisson基礎(chǔ)概念》
本章第四章主要介紹Ression分布式集合使用指南。
上一章《Redisson 7種分布式鎖使用指南》回顧。
本章我們介紹了在Redisson中實(shí)現(xiàn)的各種分布式集合,這些集合適應(yīng)于各種不同類型的使用場景。每個(gè)分布式集合的實(shí)現(xiàn)原理都基于對(duì)應(yīng)的Redis數(shù)據(jù)結(jié)構(gòu)。 每種集合的簡要總結(jié):
-
分布式列表:基于Redis的List數(shù)據(jù)結(jié)構(gòu),操作簡單且原子性強(qiáng),主要用于日志記錄、收藏列表等。
-
分布式集合:基于Redis的Set數(shù)據(jù)結(jié)構(gòu),能夠高效地完成添加、刪除和查找等操作,適合用于標(biāo)簽系統(tǒng)、好友關(guān)系等。
-
分布式映射:基于Redis的Hash數(shù)據(jù)結(jié)構(gòu),即使在處理大量鍵值對(duì)時(shí),也能保持高效的讀寫性能,適合存儲(chǔ)用戶信息、配置信息等。
-
分布式有序集合:基于Redis的Sorted set數(shù)據(jù)結(jié)構(gòu),常用于實(shí)現(xiàn)需要排序的場景,例如排名系統(tǒng)、時(shí)間序列數(shù)據(jù)等。
-
分布式隊(duì)列:基于Redis的List數(shù)據(jù)結(jié)構(gòu),滿足先進(jìn)先出(FIFO)規(guī)則,適合用于消息隊(duì)列、任務(wù)隊(duì)列等。
-
分布式雙端隊(duì)列:同樣基于Redis的List數(shù)據(jù)結(jié)構(gòu),兩端都可以進(jìn)行入隊(duì)和出隊(duì)操作,更具靈活性,適用于實(shí)現(xiàn)LRU緩存、多任務(wù)調(diào)度等。
-
分布式阻塞隊(duì)列:也是基于Redis的List數(shù)據(jù)結(jié)構(gòu),可以阻塞操作,適合于實(shí)現(xiàn)高并發(fā)場景下的生產(chǎn)者-消費(fèi)者模型。
1.Ression分布式集合
1.1 分布式列表
1.1.1 使用場景和實(shí)現(xiàn)原理:
Redisson的分布式列表基于Redis的List數(shù)據(jù)結(jié)構(gòu),操作簡單、原子性強(qiáng),適合用于實(shí)現(xiàn)日志記錄、收藏列表等場景。
1.1.2 基本概念和使用方法:
分布式列表是一種有序集合,用戶可在列表的任意位置插入或刪除元素。以下是在Redisson中創(chuàng)建和操作分布式列表的示例:
RList<String> list = redisson.getList("myList");
list.add("1");
list.add("2");
list.add("3");
1.2 分布式集合
1.2.1 使用場景和實(shí)現(xiàn)原理:
Redisson的分布式集合基于Redis的Set數(shù)據(jù)結(jié)構(gòu),能高效地完成添加、刪除和查找等操作,適合實(shí)現(xiàn)標(biāo)簽系統(tǒng)、好友關(guān)系等功能。
1.2.2 基本概念和使用方法:
分布式集合是一種無序集合,所有存入其中的元素都是唯一的。以下是在Redisson中創(chuàng)建和操作分布式集合的示例:
RSet<String> set = redisson.getSet("mySet");
set.add("A");
set.add("B");
set.add("C");
1.3 分布式映射
1.3.1 使用場景和實(shí)現(xiàn)原理:
Redisson的分布式映射基于Redis的Hash數(shù)據(jù)結(jié)構(gòu),即使面對(duì)大量鍵值對(duì),也能保持高效的讀寫性能,適合存儲(chǔ)用戶信息、配置信息等數(shù)據(jù)。
1.3.2 基本概念和使用方法:
分布式映射是一種鍵值對(duì)的集合。以下是在Redisson中創(chuàng)建和操作分布式映射的示例:
RMap<String, Integer> map = redisson.getMap("myMap");
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
1.4 分布式有序集合
1.4.1 使用場景和實(shí)現(xiàn)原理:
分布式有序集合基于Redis的Sorted set數(shù)據(jù)結(jié)構(gòu),可以用于實(shí)現(xiàn)排名系統(tǒng)、時(shí)間序列數(shù)據(jù)等需要排序的場景。
1.4.2 基本概念和使用方法:
分布式有序集合是一種有序的集合。以下是在Redisson中創(chuàng)建和操作分布式有序集合的示例:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);
1.5 分布式隊(duì)列
1.5.1 使用場景和實(shí)現(xiàn)原理:
Redisson的分布式隊(duì)列實(shí)現(xiàn)基于Redis的List數(shù)據(jù)結(jié)構(gòu),操作簡單,適合用于消息隊(duì)列、任務(wù)隊(duì)列等需要嚴(yán)格按照加入順序進(jìn)行處理的場景。
1.5.2 基本概念和使用方法:
分布式隊(duì)列是一種遵循先進(jìn)先出(FIFO)原則的數(shù)據(jù)結(jié)構(gòu)。以下是在Redisson中創(chuàng)建和操作分布式隊(duì)列的示例:
RQueue<String> queue = redisson.getQueue("myQueue");
queue.add("A");
queue.add("B");
queue.add("C");
1.6 分布式雙端隊(duì)列
1.6.1 使用場景和實(shí)現(xiàn)原理:
Redisson的分布式雙端隊(duì)列基于Redis的List數(shù)據(jù)結(jié)構(gòu),與分布式隊(duì)列相比更加靈活,適合實(shí)現(xiàn)LRU緩存、多任務(wù)調(diào)度等場景。
1.6.2 基本概念和使用方法:
分布式雙端隊(duì)列是一種兩端都可以進(jìn)行入隊(duì)和出隊(duì)操作的隊(duì)列。以下是在Redisson中創(chuàng)建和操作分布式雙端隊(duì)列的示例:
RDeque<String> deque = redisson.getDeque("myDeque");
deque.addFirst("D");
deque.addLast("E");
deque.addLast("F");
1.7 分布式阻塞隊(duì)列
1.7.1 使用場景和實(shí)現(xiàn)原理:
分布式阻塞隊(duì)列基于Redis的List數(shù)據(jù)結(jié)構(gòu),支持阻塞操作,適合于實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者模型的高并發(fā)場景。
1.7.2 基本概念和使用方法:
分布式阻塞隊(duì)列是一種支持阻塞操作的隊(duì)列。以下是在Redisson中創(chuàng)建和操作分布式阻塞隊(duì)列的示例:
RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue");
blockingQueue.put("G");
2. 完整代碼示例
在Controller類中使用Redisson分布式集合
pom.xml配置相應(yīng)依賴
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.3</version>
</dependency>
配置文件(application.yml):
# application.yml
spring:
application:
name: redisson-example-app
redisson:
config: classpath:redisson.yaml
Redisson的配置文件(redisson.yaml):
singleServerConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: null
subscriptionsPerConnection: 5
clientName: null
address: "redis://127.0.0.1:6379" # adjust this address to your Redis server
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 24
connectionPoolSize: 64
database: 0
dnsMonitoringInterval: 5000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
transportMode: "NIO"
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RedissonExampleApplication {
public static void main(String[] args) {
SpringApplication.run(RedissonExampleApplication.class, args);
}
}
RedissonExampleController
import org.redisson.api.RList;
import org.redisson.api.RSet;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/redisson")
public class RedissonExampleController {
@Autowired
private RedissonClient redissonClient;
@PostMapping("/list")
public void addToList(@RequestParam String element) {
RList<String> list = redissonClient.getList("myList");
list.add(element);
}
@GetMapping("/list")
public RList<String> readFromList() {
return redissonClient.getList("myList");
}
@PostMapping("/set")
public void addToSet(@RequestParam String element) {
RSet<String> set = redissonClient.getSet("mySet");
set.add(element);
}
@GetMapping("/set")
public RSet<String> readFromSet() {
return redissonClient.getSet("mySet");
}
}
Service
@Autowired
private RedissonClient redissonClient;
public void listExample() {
RList<String> list = redissonClient.getList("myList");
list.add("1");
list.add("2");
list.add("3");
}
public void setExample() {
RSet<String> set = redissonClient.getSet("mySet");
set.add("A");
set.add("B");
set.add("C");
}
public void mapExample() {
RMap<String, Integer> map = redissonClient.getMap("myMap");
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
}
public void sortedSetExample() {
RSortedSet<Integer> sortedSet = redissonClient.getSortedSet("mySortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);
}
public void queueExample() {
RQueue<String> queue = redissonClient.getQueue("myQueue");
queue.add("A");
queue.add("B");
queue.add("C");
}
public void dequeExample() {
RDeque<String> deque = redissonClient.getDeque("myDeque");
deque.addFirst("D");
deque.addLast("E");
deque.addLast("F");
}
public void blockingQueueExample() throws InterruptedException {
RBlockingQueue<String> blockingQueue = redissonClient.getBlockingQueue("myBlockingQueue");
blockingQueue.put("G");
}
3. 參考資料
-
Redisson官方網(wǎng)站:https://redisson.org/
-
Redisson GitHub倉庫:https://github.com/redisson/redisson
-
redisson 參考文檔 https://redisson.org/documentation.html文章來源:http://www.zghlxwxcb.cn/news/detail-705965.html
4. 源碼地址
https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023文章來源地址http://www.zghlxwxcb.cn/news/detail-705965.html
5. Redis從入門到精通系列文章
- 《【Redis實(shí)踐篇】使用Redisson 優(yōu)雅實(shí)現(xiàn)項(xiàng)目實(shí)踐過程中的5種場景》
- 《Redis使用Lua腳本和Redisson來保證庫存扣減中的原子性和一致性》
- 《SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式》
- 《Redis【應(yīng)用篇】之RedisTemplate基本操作》
- 《Redis 從入門到精通【實(shí)踐篇】之SpringBoot配置Redis多數(shù)據(jù)源》
- 《Redis 從入門到精通【進(jìn)階篇】之三分鐘了解Redis HyperLogLog 數(shù)據(jù)結(jié)構(gòu)》
- 《Redis 從入門到精通【進(jìn)階篇】之三分鐘了解Redis地理位置數(shù)據(jù)結(jié)構(gòu)GeoHash》
- 《Redis 從入門到精通【進(jìn)階篇】之高可用哨兵機(jī)制(Redis Sentinel)詳解》
- 《Redis 從入門到精通【進(jìn)階篇】之redis主從復(fù)制詳解》
- 《Redis 從入門到精通【進(jìn)階篇】之Redis事務(wù)詳解》
- 《Redis從入門到精通【進(jìn)階篇】之對(duì)象機(jī)制詳解》
- 《Redis從入門到精通【進(jìn)階篇】之消息傳遞發(fā)布訂閱模式詳解》
- 《Redis從入門到精通【進(jìn)階篇】之持久化 AOF詳解》
- 《Redis從入門到精通【進(jìn)階篇】之持久化RDB詳解》
- 《Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)字典(Dictionary)詳解》
- 《Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)快表QuickList詳解》
- 《Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)簡單動(dòng)態(tài)字符串(SDS)詳解》
- 《Redis從入門到精通【高階篇】之底層數(shù)據(jù)結(jié)構(gòu)壓縮列表(ZipList)詳解》
-
《Redis從入門到精通【進(jìn)階篇】之?dāng)?shù)據(jù)類型Stream詳解和使用示例》
大家好,我是冰點(diǎn),今天的【實(shí)踐篇】Redis最強(qiáng)Java客戶端(四)之Ression分布式集合使用指南。如果你有疑問或見解可以在評(píng)論區(qū)留言。
到了這里,關(guān)于【實(shí)踐篇】Redis最強(qiáng)Java客戶端(四)之Ression分布式集合使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!