码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南


    文章目录

    • 0. 前言
    • 1.Ression分布式集合
      • 1.1 分布式列表
        • 1.1.1 使用场景和实现原理:
        • 1.1.2 基本概念和使用方法:
      • 1.2 分布式集合
        • 1.2.1 使用场景和实现原理:
        • 1.2.2 基本概念和使用方法:
      • 1.3 分布式映射
        • 1.3.1 使用场景和实现原理:
        • 1.3.2 基本概念和使用方法:
      • 1.4 分布式有序集合
        • 1.4.1 使用场景和实现原理:
        • 1.4.2 基本概念和使用方法:
      • 1.5 分布式队列
        • 1.5.1 使用场景和实现原理:
        • 1.5.2 基本概念和使用方法:
      • 1.6 分布式双端队列
        • 1.6.1 使用场景和实现原理:
        • 1.6.2 基本概念和使用方法:
      • 1.7 分布式阻塞队列
        • 1.7.1 使用场景和实现原理:
        • 1.7.2 基本概念和使用方法:
    • 2. 完整代码示例
    • 3. 参考资料
    • 4. 源码地址
    • 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中创建和操作分布式列表的示例:

    RList<String> list = redisson.getList("myList");
    list.add("1");
    list.add("2");
    list.add("3");
    
    • 1
    • 2
    • 3
    • 4

    1.2 分布式集合

    1.2.1 使用场景和实现原理:

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

    1.2.2 基本概念和使用方法:

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

    RSet<String> set = redisson.getSet("mySet");
    set.add("A");
    set.add("B");
    set.add("C");
    
    • 1
    • 2
    • 3
    • 4

    1.3 分布式映射

    1.3.1 使用场景和实现原理:

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

    1.3.2 基本概念和使用方法:

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

    RMap<String, Integer> map = redisson.getMap("myMap");
    map.put("A", 1);
    map.put("B", 2);
    map.put("C", 3);
    
    • 1
    • 2
    • 3
    • 4

    1.4 分布式有序集合

    1.4.1 使用场景和实现原理:

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

    1.4.2 基本概念和使用方法:

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

    RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet");
    sortedSet.add(3);
    sortedSet.add(1);
    sortedSet.add(2);
    
    • 1
    • 2
    • 3
    • 4

    1.5 分布式队列

    1.5.1 使用场景和实现原理:

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

    1.5.2 基本概念和使用方法:

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

    RQueue<String> queue = redisson.getQueue("myQueue");
    queue.add("A");
    queue.add("B");
    queue.add("C");
    
    • 1
    • 2
    • 3
    • 4

    1.6 分布式双端队列

    1.6.1 使用场景和实现原理:

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

    1.6.2 基本概念和使用方法:

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

    RDeque<String> deque = redisson.getDeque("myDeque");
    deque.addFirst("D");
    deque.addLast("E");
    deque.addLast("F");
    
    • 1
    • 2
    • 3
    • 4

    1.7 分布式阻塞队列

    1.7.1 使用场景和实现原理:

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

    1.7.2 基本概念和使用方法:

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

    RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue");
    blockingQueue.put("G");
    
    • 1
    • 2

    2. 完整代码示例

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

    pom.xml配置相应依赖

    <dependency>
        <groupId>org.redissongroupId>
        <artifactId>redisson-spring-boot-starterartifactId>
        <version>3.16.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置文件(application.yml):

    # application.yml
    spring:
      application:
        name: redisson-example-app
    
    redisson:
      config: classpath:redisson.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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: ! {}
    transportMode: "NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    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);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    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");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    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从入门到精通系列文章

    • 《【Redis实践篇】使用Redisson 优雅实现项目实践过程中的5种场景》
    • 《Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性》
    • 《SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式》
    • 《Redis【应用篇】之RedisTemplate基本操作》
    • 《Redis 从入门到精通【实践篇】之SpringBoot配置Redis多数据源》
    • 《Redis 从入门到精通【进阶篇】之三分钟了解Redis HyperLogLog 数据结构》
    • 《Redis 从入门到精通【进阶篇】之三分钟了解Redis地理位置数据结构GeoHash》
    • 《Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解》
    • 《Redis 从入门到精通【进阶篇】之redis主从复制详解》
    • 《Redis 从入门到精通【进阶篇】之Redis事务详解》
    • 《Redis从入门到精通【进阶篇】之对象机制详解》
    • 《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
    • 《Redis从入门到精通【进阶篇】之持久化 AOF详解》
    • 《Redis从入门到精通【进阶篇】之持久化RDB详解》
    • 《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
    • 《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
    • 《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
    • 《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
    • 《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
      在这里插入图片描述大家好,我是冰点,今天的【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南。如果你有疑问或见解可以在评论区留言。
  • 相关阅读:
    ai创作工具,怎么使用AI创作工具
    弱鸡记录一道模拟题
    Bootstrap的导航元素和Well详解【前端Bootstrap框架】
    小黑子—Maven基础
    OpenResty使用漏桶算法实现限流
    精通中间件测试:Asp.Net Core实战指南,提升应用稳定性和可靠性
    在线Excel转JSON工具
    从零开始搭建仿抖音短视频APP-后端开发评论业务模块(2)
    跨区互联组网怎么做?SD-WAN专线可以实现吗?
    WebGL使用WebRequest通讯编辑器没问题打包失效
  • 原文地址:https://blog.csdn.net/wangshuai6707/article/details/132791950
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号