码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【实践篇】Redis最强Java客户端Redisson


    文章目录

    • 1. 前言
    • 2. Redisson基础概念
      • 2.1 数据结构和并发工具
        • 2.1.1 对Redis原生数据类型的封装和使用
        • 2.1.2 分布式锁实现和应用
        • 2.1.3 分布式集合使用方法
      • 2.2 Redisson的高级特性
        • 2.2.1 分布式对象实现和使用
        • 2.2.2 分布式消息队列实现和使用
        • 2.2.3 分布式计数器实现和使用
    • 3. 参考资料
    • 4. 源码地址
    • 5. Redis从入门到精通系列文章

    在这里插入图片描述

    1. 前言

    在我们的上一篇文章中,我们介绍了 Redisson 的相关概念 历史背景,发展现状。现在我们已经准备好进一步深入了解 Redisson基础概念,并了解它如何以及在哪些场景中提供出色、可靠的性能。在本篇文章中, 我们将 进一步理解和使用 Redisson,这是一种为 Java 提供的高级 Redis 客户端。
    上一章内容 《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》

    2. Redisson基础概念

    在这里插入图片描述

    2.1 数据结构和并发工具

    2.1.1 对Redis原生数据类型的封装和使用

    Redisson对Redis基本数据类型进行了封装,为Java开发者提供了丰富的数据结构和并发工具。例如:

    • RBucket:封装了Redis的string字符串;
    • RMap:封装了Redis的HashTable,也即Redis的hash命令;
    • RList:封装了Redis的List,实现了List接口;
    • RSet:封装了Redis的Set,实现了Set接口;
    • RSortedSet:封装了Redis的Zset接口;
    • RQueue:封装了Redis的list命令,实现了Queue接口;
    • RDeque:封装了Redis的list命令,实现了Deque接口;
    • RAtomicLong:封装了Redis的string(字符串),实现了原子性的long。
    1. RBucket: RBucket 用于对单一值进行缓存,代替 Java 中的 AtomicReference。在分布式环境中,提供了对单一值的持久化存储和原子操作。例如:

      RBucket<String> bucket = redisson.getBucket("bucket");
      bucket.set("redisson");
      String value = bucket.get();
      
      • 1
      • 2
      • 3
    2. RMap: RMap 用于存储需要多个键值对,代替 Java 中的 HashMap。在分布式环境中,提供了 Map 实现,支持事务和原子操作。例如:

      RMap<String, Integer> map = redisson.getMap("map");
      map.put("a", 1);
      map.put("b", 2);
      Integer bValue = map.get("b");
      
      • 1
      • 2
      • 3
      • 4
    3. RList: RList 用于有序存储多个元素,并可能存储重复元素,代替 Java 中的 ArrayList。实现了分布式环境下的可变数组,支持正向和反向遍历。例如:

      RList<Integer> list = redisson.getList("list");
      list.add(1);
      list.add(2);
      list.add(3);
      Integer secondElement = list.get(1);
      
      • 1
      • 2
      • 3
      • 4
      • 5
    4. RSet: RSet 用于存储无序且不重复的多个元素,代替 Java 中的 HashSet。在分布式环境中,提供了无序集合的实现,支持常见的集合操作。例如:

      RSet<Integer> set = redisson.getSet("set");
      set.add(1);
      set.add(2);
      set.add(3);
      boolean containsTwo = set.contains(2);
      
      • 1
      • 2
      • 3
      • 4
      • 5
    5. RSortedSet: RSortedSet 用于有序存储元素,并能根据元素的自然顺序或自定义比较器进行排序,代替 Java 中的 TreeSet。在分布式环境下,实现了有序集合,支持快速地获取有序集中的最大或最小元素。例如:

      RSortedSet<Integer> sortedSet = redisson.getSortedSet("sortedSet");
      sortedSet.add(3);
      sortedSet.add(1);
      sortedSet.add(2);
      Integer firstElement = sortedSet.first();
      
      • 1
      • 2
      • 3
      • 4
      • 5
    6. RQueue: RQueue 用于多个元素按一定顺序进行存储,并按该顺序进行检索,代替 Java 中的 Queue。在分布式环境中,提供了队列实现,尤其有利于实现生产者-消费者模型。例如:

      RQueue<Integer> queue = redisson.getQueue("queue");
      queue.add(1);
      Integer item = queue.poll();
      
      • 1
      • 2
      • 3
    7. RDeque: RDeque 用于需要从两端插入或删除元素的数据结构,代替 Java 中的 LinkedList。在分布式环境中,提供了双端队列实现,支持从头部或尾部插入和删除元素。例如:

      RDeque<Integer> deque = redisson.getDeque("deque");
      deque.addFirst(1);
      deque.addLast(2);
      Integer firstElement = deque.getFirst();
      Integer lastElement = deque.getLast();
      
      • 1
      • 2
      • 3
      • 4
      • 5
    8. RAtomicLong: RAtomicLong 用于对单一值进行原子操作,如自增、自减等,代替 Java 中的 AtomicLong。在分布式环境下,进行原子增减操作,避免并发问题。例如:

      RAtomicLong atomicLong = redisson.getAtomicLong("atomicLong");
      atomicLong.set(1);
      atomicLong.incrementAndGet();
      long atomicLongValue = atomicLong.get();
      
      • 1
      • 2
      • 3
      • 4

    2.1.2 分布式锁实现和应用

    Redisson支持多种分布式锁和同步器,如:RLock,RSemaphore,RCountDownLatch,RReadWriteLock等。这些锁具有超时自动解锁、阻塞等待锁和公平锁等特性。

    例如,使用RLock实现分布式锁:

    RLock lock = redisson.getLock("anyLock");
    lock.lock();
    try {
       // 执行业务代码
    } finally {
       lock.unlock();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.1.3 分布式集合使用方法

    Redisson提供了分布式的List、Set、SortedSet、Map和Queue,适用于各种场景。例如,使用RList实现分布式列表:

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

    2.2 Redisson的高级特性

    2.2.1 分布式对象实现和使用

    Redisson提供了一些分布式对象,如RBloomFilter(布隆过滤器),RHyperLogLog,RLexSortedSet等。例如,使用RBloomFilter实现分布式布隆过滤器:

    RBloomFilter<String> bloomFilter = redisson.getBloomFilter("sampleFilter");
    bloomFilter.tryInit(10000L, 0.03); 
    bloomFilter.add("item");
    
    • 1
    • 2
    • 3

    2.2.2 分布式消息队列实现和使用

    Redisson支持RQueue、RBlockingQueue、RDelayedQueue等分布式队列和阻塞队列。例如,使用RQueue实现分布式消息队列:

    RQueue<String> queue = redisson.getQueue("anyQueue");
    queue.offer("item");
    String item = queue.poll();
    
    • 1
    • 2
    • 3

    2.2.3 分布式计数器实现和使用

    Redisson提供了一些分布式计数器,如RAtomicLong、RAtomicDouble、RCountDownLatch等。例如,使用RAtomicLong实现分布式原子长整数:

    RAtomicLong atomicLong = redisson.getAtomicLong("anyLong");
    atomicLong.set(3);
    atomicLong.incrementAndGet();
    
    • 1
    • 2
    • 3

    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客户端(二)之Redisson基础概念,全部内容就是这些。如果你有疑问或见解可以在评论区留言。

    在这里插入图片描述

  • 相关阅读:
    优先级队列
    深度学习之卷积模型应用
    美摄科技对抗网络数字人解决方案
    包管理器 npm
    (121)DAC接口--->(006)基于FPGA实现DAC8811接口
    【高项笔记】No.1 信息系统与信息化
    动画效果:实现卡片翻转抽奖动画(正反面内容不一样)
    关于有依赖关系的算法怎么做--拓扑排序,课程表|| 力扣210题
    基于局部自适应阈值分割和Hough变换的答题卡识别算法-含Matlab代码
    7-2 时间换算
  • 原文地址:https://blog.csdn.net/wangshuai6707/article/details/132789959
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号