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


    Redisson入门介绍

    文章目录

    • Redisson入门介绍
      • 1.1 Redisson简介
        • 1.1.1 起源和历史
        • 1.1.2 优势和特点
        • 1.1.3 与其他Java Redis客户端的比较
      • 1.2 使用和配置
        • 1.2.1 依赖和SDK
        • 1.2.2 配置文件解析
        • 1.2.3 连接池配置
    • 1.3 优雅的让Hash的某个Field过期
    • 2. 参考资料
    • 3. 源码地址
    • 4. Redis从入门到精通系列文章

    在这里插入图片描述

    1.1 Redisson简介

    在这里插入图片描述

    1.1.1 起源和历史

    Redisson 最初由 GitHub 用户 “mrniko” 创建,并在 Apache 2.0 许可证下发布。它的目标是提供一组强大的工具和 API,帮助开发人员在分布式环境中处理数据,并解决并发和一致性的问题。

    Redisson 是一款在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)。它提供了很多分布式的java对象并直接映射到Redis服务器的数据结构。

    1.1.2 优势和特点

    Redisson 提供了一系列丰富的 Redis 对象供用户使用,比如:Bucket, Deque, Set, SortedSet, Map, Lock, AtomicLong, CountDownLatch,Publish / Subscribe,Bloom filter, HyperLogLog 等等。它能使开发者可以直接在代码中操纵这些对象,而不是维护细节,提高了开发的效率。
    Redisson 具有以下优势和特点:

    • 简单易用:Redisson 提供了简单、一致的 API,使得开发人员可以像使用本地对象一样使用分布式对象。
    • 高性能:Redisson 使用了异步和无锁的设计,以最大程度地提高性能和吞吐量。
    • 分布式数据结构:Redisson 提供了一系列分布式数据结构,如分布式集合、分布式映射、分布式列表等,使得处理大规模数据变得更加高效。
    • 分布式锁:Redisson 提供了可重入的分布式锁,帮助开发人员解决并发访问的问题。
    • 分布式队列:Redisson 提供了分布式队列,支持先进先出和优先级队列,适用于任务调度和消息传递等场景。
    • 高可用和故障恢复:Redisson 支持主从复制和哨兵模式,确保系统的高可用性和故障恢复能力。

    1.1.3 与其他Java Redis客户端的比较

    和Jedis以及Lettuce等其他Redis Java客户端比较,Redisson提供了更丰富的分布式对象模型,以及更强大的并发处理和故障恢复特性。
    Redisson的高级特性,包括高级Java对象、故障转移、母子复制支持、公平锁支持和分布式服务等,使它成为Java环境中最强大、最灵活的Redis客户端之一。
    Redisson与其他Java Redis客户端(Jedis和Lettuce)的比较,足以看出来他的天下无敌。

    RedissonJedisLettuce
    Redis数据类型支持支持全部(包括流)支持全部支持全部
    高级Java对象多班并发和分布式Java对象没有没有
    连接池有有有
    集群支持有有有
    故障转移有没有有
    母子复制支持有没有有
    SSL支持有有有
    LUA scripting有有(只读)有(只读)
    响应式API有没有有
    事务支持有有有
    分布式锁有(包括公平锁)没有没有
    公平锁支持有没有没有
    发布和订阅有有有
    异步API有没有有
    分布式服务有(例如BloomFilter,BitSet,AtomicLong等)没有没有

    1.2 使用和配置

    1.2.1 依赖和SDK

    通过在Maven或Gradle中添加以下依赖来使用Redisson

    <dependencies>
        <dependency>
            <groupId>org.redissongroupId>
            <artifactId>redissonartifactId>
            <version>3.13.6version>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.2.2 配置文件解析

    Redisson可以通过JSON, YAML, Map或者编程配置。以下是一个配置示例:

    # Redisson 配置文件
    
    # Redisson 服务器地址
    # 可以是单个服务器或多个服务器
    # 多个服务器之间使用逗号分隔
    redisson.address = "redis://127.0.0.1:6379,redis://127.0.0.2:6379"
    
    # Redisson 连接超时时间(毫秒)
    redisson.connectionTimeout = 3000
    
    # Redisson 密码
    redisson.password = "password"
    
    # Redisson 连接池配置
    
    # 最小空闲连接数
    redisson.connectionPool.minIdle = 10
    
    # 最大连接数
    redisson.connectionPool.maxSize = 100
    
    # 连接空闲超时时间(毫秒)
    redisson.connectionPool.idleTimeout = 10000
    
    # 连接最大空闲时间(毫秒)
    redisson.connectionPool.maxIdleTime = 60000
    
    # Redisson 重试配置
    
    # 重试次数
    redisson.retryAttempts = 3
    
    # 重试间隔时间(毫秒)
    redisson.retryInterval = 1000
    
    # Redisson 序列化配置
    # 可以选择不同的序列化方式,如 JSON、Jackson、Kryo 等
    redisson.codec = org.redisson.codec.JsonJacksonCodec
    
    # Redisson 事件监听器配置
    
    # 是否启用事件监听器
    redisson.listener.enable = true
    
    # 事件监听器线程池大小
    redisson.listener.threadPoolSize = 10
    
    # Redisson 集群配置
    
    # 是否启用集群模式
    redisson.cluster.enabled = false
    
    # 集群节点地址
    redisson.cluster.nodes = "redis://127.0.0.1:6379,redis://127.0.0.2:6379"
    
    # 集群扫描间隔时间(毫秒)
    redisson.cluster.scanInterval = 2000
    
    • 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
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    1.2.3 连接池配置

    通过在配置中设置 connectionMinimumIdleSize 和 connectionPoolSize 参数,可以进行Redisson的连接池配置。

    • connectionMinimumIdleSize:最小空闲连接数,表示即使没有数据库连接时依然维持的空闲连接数量。默认值:32
    • connectionPoolSize:最大连接池数量,对所有ROUTER节点来说,都是公用的。默认值:64

    注意配置中的其它参数也会影响Redisson的性能和行为,比如timeout, retryAttempts, retryInterval等等。应根据实际应用需要来调整这些参数。
    当然,我们可以为每个配置项添加注释,以方便理解每个参数的作用。下面是带注释的YAML配置文件:

    singleServerConfig:
      idleConnectionTimeout: 10000 # 空闲连接超时,单位:毫秒
      connectTimeout: 10000 # 连接超时,单位:毫秒
      timeout: 3000 # 命令等待超时,单位:毫秒
      retryAttempts: 3 # 命令失败重试次数
      retryInterval: 1500 # 命令重试发送间隔,单位:毫秒
      password: null # Redis 服务器密码
      subscriptionsPerConnection: 5 # 每个连接的最大订阅数量
      clientName: null # Redis 客户端名称
      address: "redis://127.0.0.1:6379" # Redis 服务器地址
      subscriptionConnectionMinimumIdleSize: 1 # 订阅连接的最小空闲数量
      subscriptionConnectionPoolSize: 50 # 订阅连接的最大连接数量
      connectionMinimumIdleSize: 10 # 正常连接的最小空闲数量,至少保持10个空闲连接
      connectionPoolSize: 50 # 正常连接的最大连接数量,最多可以创建50个连接
      database: 0 # 连接的数据库编号,默认是0
      dnsMonitoringInterval: 5000 # DNS监控间隔,单位:毫秒
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    1.3 优雅的让Hash的某个Field过期

    为了感受 redisson 的强大,我们写一个redis其他客户端不具备的能力。
    使用redisson 设置 hash结构的二级key过期。也就是设置hash 结构的 field 设置过期时间。我们使用redisson优雅的使Hash的某个Field过期。

    引入依赖。

        <dependency>
          <groupId>org.redissongroupId>
          <artifactId>redissonartifactId>
          <version>3.16.1version>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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"
      subscriptionConnectionMinimumIdleSize: 1
      subscriptionConnectionPoolSize: 50
      connectionMinimumIdleSize: 10
      connectionPoolSize: 50
      database: 0
      dnsMonitoringInterval: 5000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试

    package com.icepip,redisson.example;
    
    import org.redisson.Redisson;
    import org.redisson.api.RBucket;
    import org.redisson.api.RMap;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    
    import java.util.concurrent.TimeUnit;
    
    public class Main {
    
        public static void main(String[] args) {
            Config config = Config.fromYAML(Main.class.getClassLoader().getResource("redisson.yaml"));
            RedissonClient redisson = Redisson.create(config);
    
            // 设置Hash的key和value
            RMap<String, String> map = redisson.getMap("hash");
            map.put("field", "value");
    
            // 对于相应的key设置过期时间
            RBucket<String> bucket = redisson.getBucket("hash:field:expire");
            bucket.set("dummyValue", 5, TimeUnit.MINUTES);
     
        }
    }
    
    • 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

    2. 参考资料

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

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

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

    3. 源码地址

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

    4. 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入门介绍,全部内容就是这些。如果你有疑问或见解可以在评论区留言。
  • 相关阅读:
    2022-10-30 mysql列存储引擎-自定义函数-return返回select语句结果异常-问题定位
    【PR #5 A】双向奔赴(状压DP)
    it运维监控运维方案主要应用在哪些场景
    Redis-----SSM整合redis及redis的注解式开发以及redis的击穿,穿透,雪崩三种解决方案
    深入浅出Spring Boot整合minio
    java学习--day8 (面向对象)
    gcc 和 g++的区别
    Apifox能否替代Postman?
    猿创征文|ZooKeeper(伪)集群搭建
    神经网络 torch.nn---nn.LSTM()
  • 原文地址:https://blog.csdn.net/wangshuai6707/article/details/132789753
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号