【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南

文章目录

  • [0. 前言](#0. 前言)
  • 1.Ression分布式集合
    • [1.1 分布式列表](#1.1 分布式列表)
      • [1.1.1 使用场景和实现原理:](#1.1.1 使用场景和实现原理:)
      • [1.1.2 基本概念和使用方法:](#1.1.2 基本概念和使用方法:)
    • [1.2 分布式集合](#1.2 分布式集合)
      • [1.2.1 使用场景和实现原理:](#1.2.1 使用场景和实现原理:)
      • [1.2.2 基本概念和使用方法:](#1.2.2 基本概念和使用方法:)
    • [1.3 分布式映射](#1.3 分布式映射)
      • [1.3.1 使用场景和实现原理:](#1.3.1 使用场景和实现原理:)
      • [1.3.2 基本概念和使用方法:](#1.3.2 基本概念和使用方法:)
    • [1.4 分布式有序集合](#1.4 分布式有序集合)
      • [1.4.1 使用场景和实现原理:](#1.4.1 使用场景和实现原理:)
      • [1.4.2 基本概念和使用方法:](#1.4.2 基本概念和使用方法:)
    • [1.5 分布式队列](#1.5 分布式队列)
      • [1.5.1 使用场景和实现原理:](#1.5.1 使用场景和实现原理:)
      • [1.5.2 基本概念和使用方法:](#1.5.2 基本概念和使用方法:)
    • [1.6 分布式双端队列](#1.6 分布式双端队列)
      • [1.6.1 使用场景和实现原理:](#1.6.1 使用场景和实现原理:)
      • [1.6.2 基本概念和使用方法:](#1.6.2 基本概念和使用方法:)
    • [1.7 分布式阻塞队列](#1.7 分布式阻塞队列)
      • [1.7.1 使用场景和实现原理:](#1.7.1 使用场景和实现原理:)
      • [1.7.2 基本概念和使用方法:](#1.7.2 基本概念和使用方法:)
  • [2. 完整代码示例](#2. 完整代码示例)
  • [3. 参考资料](#3. 参考资料)
  • [4. 源码地址](#4. 源码地址)
  • [5. Redis从入门到精通系列文章](#5. Redis从入门到精通系列文章)

0. 前言

前两章我们了解了《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》《【实践篇】Redis最强Java客户端(二)之Redisson基础概念》

本章第四章主要介绍Ression分布式集合使用指南。

上一章《Redisson 7种分布式锁使用指南》回顾。

本章我们介绍了在Redisson中实现的各种分布式集合,这些集合适应于各种不同类型的使用场景。每个分布式集合的实现原理都基于对应的Redis数据结构。 每种集合的简要总结:

  • 分布式列表:基于Redis的List数据结构,操作简单且原子性强,主要用于日志记录、收藏列表等。

  • 分布式集合:基于Redis的Set数据结构,能够高效地完成添加、删除和查找等操作,适合用于标签系统、好友关系等。

  • 分布式映射:基于Redis的Hash数据结构,即使在处理大量键值对时,也能保持高效的读写性能,适合存储用户信息、配置信息等。

  • 分布式有序集合:基于Redis的Sorted set数据结构,常用于实现需要排序的场景,例如排名系统、时间序列数据等。

  • 分布式队列:基于Redis的List数据结构,满足先进先出(FIFO)规则,适合用于消息队列、任务队列等。

  • 分布式双端队列:同样基于Redis的List数据结构,两端都可以进行入队和出队操作,更具灵活性,适用于实现LRU缓存、多任务调度等。

  • 分布式阻塞队列:也是基于Redis的List数据结构,可以阻塞操作,适合于实现高并发场景下的生产者-消费者模型。

1.Ression分布式集合

1.1 分布式列表

1.1.1 使用场景和实现原理:

Redisson的分布式列表基于Redis的List数据结构,操作简单、原子性强,适合用于实现日志记录、收藏列表等场景。

1.1.2 基本概念和使用方法:

分布式列表是一种有序集合,用户可在列表的任意位置插入或删除元素。以下是在Redisson中创建和操作分布式列表的示例:

java 复制代码
RList<String> list = redisson.getList("myList");
list.add("1");
list.add("2");
list.add("3");

1.2 分布式集合

1.2.1 使用场景和实现原理:

Redisson的分布式集合基于Redis的Set数据结构,能高效地完成添加、删除和查找等操作,适合实现标签系统、好友关系等功能。

1.2.2 基本概念和使用方法:

分布式集合是一种无序集合,所有存入其中的元素都是唯一的。以下是在Redisson中创建和操作分布式集合的示例:

java 复制代码
RSet<String> set = redisson.getSet("mySet");
set.add("A");
set.add("B");
set.add("C");

1.3 分布式映射

1.3.1 使用场景和实现原理:

Redisson的分布式映射基于Redis的Hash数据结构,即使面对大量键值对,也能保持高效的读写性能,适合存储用户信息、配置信息等数据。

1.3.2 基本概念和使用方法:

分布式映射是一种键值对的集合。以下是在Redisson中创建和操作分布式映射的示例:

java 复制代码
RMap<String, Integer> map = redisson.getMap("myMap");
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

1.4 分布式有序集合

1.4.1 使用场景和实现原理:

分布式有序集合基于Redis的Sorted set数据结构,可以用于实现排名系统、时间序列数据等需要排序的场景。

1.4.2 基本概念和使用方法:

分布式有序集合是一种有序的集合。以下是在Redisson中创建和操作分布式有序集合的示例:

java 复制代码
RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet");
sortedSet.add(3);
sortedSet.add(1);
sortedSet.add(2);

1.5 分布式队列

1.5.1 使用场景和实现原理:

Redisson的分布式队列实现基于Redis的List数据结构,操作简单,适合用于消息队列、任务队列等需要严格按照加入顺序进行处理的场景。

1.5.2 基本概念和使用方法:

分布式队列是一种遵循先进先出(FIFO)原则的数据结构。以下是在Redisson中创建和操作分布式队列的示例:

java 复制代码
RQueue<String> queue = redisson.getQueue("myQueue");
queue.add("A");
queue.add("B");
queue.add("C");

1.6 分布式双端队列

1.6.1 使用场景和实现原理:

Redisson的分布式双端队列基于Redis的List数据结构,与分布式队列相比更加灵活,适合实现LRU缓存、多任务调度等场景。

1.6.2 基本概念和使用方法:

分布式双端队列是一种两端都可以进行入队和出队操作的队列。以下是在Redisson中创建和操作分布式双端队列的示例:

java 复制代码
RDeque<String> deque = redisson.getDeque("myDeque");
deque.addFirst("D");
deque.addLast("E");
deque.addLast("F");

1.7 分布式阻塞队列

1.7.1 使用场景和实现原理:

分布式阻塞队列基于Redis的List数据结构,支持阻塞操作,适合于实现生产者-消费者模型的高并发场景。

1.7.2 基本概念和使用方法:

分布式阻塞队列是一种支持阻塞操作的队列。以下是在Redisson中创建和操作分布式阻塞队列的示例:

java 复制代码
RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue");
blockingQueue.put("G");

2. 完整代码示例

在Controller类中使用Redisson分布式集合

pom.xml配置相应依赖

xml 复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.16.3</version>
</dependency>

配置文件(application.yml):

yaml 复制代码
# application.yml
spring:
  application:
    name: redisson-example-app

redisson:
  config: classpath:redisson.yaml

Redisson的配置文件(redisson.yaml):

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"
java 复制代码
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

java 复制代码
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

java 复制代码
@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. 参考资料

  1. Redisson官方网站:https://redisson.org/

  2. Redisson GitHub仓库:https://github.com/redisson/redisson

  3. redisson 参考文档 https://redisson.org/documentation.html

4. 源码地址

https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023

5. Redis从入门到精通系列文章

相关推荐
考虑考虑6 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261356 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊7 小时前
Java学习第22天 - 云原生与容器化
java
渣哥9 小时前
原来 Java 里线程安全集合有这么多种
java
间彧9 小时前
Spring Boot集成Spring Security完整指南
java
间彧9 小时前
Spring Secutiy基本原理及工作流程
java
Java水解10 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆12 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学13 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole13 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端