【实践篇】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从入门到精通系列文章

相关推荐
向阳25611 分钟前
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
java·vue.js·spring boot·后端·sa-token·springboot·登录流程
XiaoLeisj28 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
风象南29 分钟前
SpringBoot实现数据库读写分离的3种方案
java·spring boot·后端
振鹏Dong35 分钟前
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
java·策略模式
千层冷面43 分钟前
RabbitMQ 发送者确认机制详解
分布式·rabbitmq·ruby
ChinaRainbowSea44 分钟前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
雾月551 小时前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
敖正炀1 小时前
基于RocketMQ的可靠消息最终一致性分布式事务解决方案
分布式
melck1 小时前
liunx日志查询常用命令总结
java·服务器·网络
守护者1701 小时前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习