分布式锁RedLock的java实现Redisson

1. 概述
在这里插入图片描述Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

关于Redisson项目的详细介绍可以在官方网站找到。

每个Redis服务实例都能管理多达1TB的内存。

能够完美的在云计算环境里使用,并且支持AWS ElastiCache主备版,AWS ElastiCache集群版,Azure Redis Cache和阿里云(Aliyun)的云数据库Redis版

以下是Redisson的结构:

Redisson作为独立节点 可以用于独立执行其他节点发布到分布式执行服务 和 分布式调度任务服务 里的远程任务。
在这里插入图片描述
如果你现在正在使用其他的Redis的Java客户端,那么Redis命令和Redisson对象匹配列表 能够帮助你轻松的将现有代码迁徙到Redisson框架里来。
Redisson底层采用的是Netty 框架。支持Redis 2.8以上版本,支持Java1.6+以上版本。
欢迎试用高性能Redisson PRO版。

2.使用Redisson
2.1引入Maven依赖

<!-- JDK 1.8+ compatible -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.5.4</version>
</dependency>  <!-- JDK 1.6+ compatible -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>2.10.4</version>
</dependency>

注意一下几点:
1:文档里面说明了支持Redis 2.8以上版本,支持Java1.6+以上版本。根据自己的环境选择合适的版本!
2:2.8.1的redisson 需要使用 netty的jar包, 否则报错:Hopper: java.lang.NoClassDefFoundError: io/netty/channel/EventLoopGroup。
3:2.8.1的redisson需要jackson 2.5+版本,否则报错bjectMapper.addMixIn method not fond。

2.2配置
Redisson配置文档
本文以哨兵模式为例分别给出 json yml xml

{"sentinelServersConfig":{"idleConnectionTimeout":10000,"connectTimeout":10000,"timeout":3000,"retryAttempts":3,"retryInterval":1500,"failedSlaveReconnectionInterval":3000,"failedSlaveCheckInterval":60000,"password":null,"subscriptionsPerConnection":5,"clientName":null,"loadBalancer":{"class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"},"subscriptionConnectionMinimumIdleSize":1,"subscriptionConnectionPoolSize":50,"slaveConnectionMinimumIdleSize":32,"slaveConnectionPoolSize":64,"masterConnectionMinimumIdleSize":32,"masterConnectionPoolSize":64,"readMode":"SLAVE","subscriptionMode":"SLAVE","sentinelAddresses":["redis://127.0.0.1:26379","redis://127.0.0.1:26389"],"masterName":"mymaster","database":0},"threads":0,"nettyThreads":0,"codec":{"class":"org.redisson.codec.FstCodec"},"transportMode":"NIO"
}sentinelServersConfig:idleConnectionTimeout: 10000connectTimeout: 10000timeout: 3000retryAttempts: 3retryInterval: 1500failedSlaveReconnectionInterval: 3000failedSlaveCheckInterval: 60000password: nullsubscriptionsPerConnection: 5clientName: nullloadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}subscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50slaveConnectionMinimumIdleSize: 32slaveConnectionPoolSize: 64masterConnectionMinimumIdleSize: 32masterConnectionPoolSize: 64readMode: "SLAVE"subscriptionMode: "SLAVE"sentinelAddresses:- "redis://127.0.0.1:26379"- "redis://127.0.0.1:26389"masterName: "mymaster"database: 0
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.FstCodec> {}
transportMode: "NIO"<redisson:clientid="redisson"name="redisson1,redisson2"threads="0"netty-threads="0"codec-ref="myCodec" transport-mode="NIO"reference-enabled="true"reference-codec-provider-ref="myCodecProvider"executor-ref="myExecutor"event-loop-group-ref="myEventLoopGroup"
><!--You can't have both name attribute and qualifier element atthe same time. Both id attribute and name attribute can be used as qualifiercandidates.--><!--<qualifier value="redisson3"/>--><redisson:sentinel-serversidle-connection-timeout="10000"ping-timeout="1000"connect-timeout="10000"timeout="3000"retry-attempts="3"retry-interval="1500"reconnection-timeout="3000"failed-attempts="3"password="do_not_use_if_it_is_not_set"subscriptions-per-connection="5"client-name="none"load-balancer-ref="myLoadBalancer"subscription-connection-minimum-idle-size="1"subscription-connection-pool-size="50"slave-connection-minimum-idle-size="10"slave-connection-pool-size="64"master-connection-minimum-idle-size="10"master-connection-pool-size="64"read-mode="SLAVE"subscription-mode="SLAVE"master-name="myMaster"database="0"><redisson:sentinel-address value="redis://127.0.0.1:26379" /><redisson:sentinel-address value="redis://127.0.0.1:26380" /></redisson:sentinel-servers>
</redisson:client><!-- minimal settings -->
<redisson:client><redisson:sentinel-servers master-name="myMaster"><redisson:sentinel-address value="redis://127.0.0.1:26379" /><redisson:sentinel-address value="redis://127.0.0.1:26380" />....</redisson:sentinel-servers>
</redisson:client>

2.3举个栗子

 Config config = new Config();config.useSentinelServers().setMasterName("dongshuo").addSentinelAddress("redis://127.0.0.1:6379");RedissonClient redissonClient = Redisson.create(config);RLock lock = redissonClient.getLock("dongshuo");lock.lock(1000, TimeUnit.SECONDS);try {System.out.println("获取到Redisson锁");}finally {lock.unlock();}redissonClient.shutdown();
  •  

2.4监控Redis命令

127.0.0.1:6379> monitor
OK
1434959509.494805 [0 127.0.0.1:57911] "SETNX" "dongshuo" "{\"@class\":\"org.redisson.RedissonLock$LockValue\",\"counter\":1,\"id\":\"c374addc-523f-4943-b6e0-c26f7ab061e3\",\"threadId\":1}"
1434959509.494805 [0 127.0.0.1:57911] "GET" "dongshuo"
1434959509.524805 [0 127.0.0.1:57911] "MULTI"
1434959509.529805 [0 127.0.0.1:57911] "DEL" "dongshuo"
1434959509.529805 [0 127.0.0.1:57911] "PUBLISH" "redisson__lock__channel__{dongshuo}" "0"
1434959509.529805 [0 127.0.0.1:57911] "EXEC"
  •  

看起来还是用到了sentnx命令\

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我三年开发经验,从字节跳动抖音离职后,看看这篇文章吧!

最新BAT大厂面试者整理的Android面试题目&#xff01; 近期根据网友分享大厂面试题目&#xff0c;今天我将网友面试的BAT等大厂Android面试题目整理出来&#xff0c;希望能够帮助大家&#xff01; 珍藏版&#xff08;1&#xff09;——高级 UI 晋升 第一节、触摸事件分发机制…

arthas命令redefine实现Java热更新

Arthas非常重要的命令redefine&#xff0c;主要作用是加载外部的.class文件&#xff0c;用来替换JVM已经加载的类&#xff0c;总结起来就是实现了Java的热更新。 redefine在一下几种情况中会失败&#xff1a;1、增加了field&#xff1b;2、增加了method&#xff1b;3、替换正在…

我了解到的面试的一些小内幕!附面试题答案

背景 首先我是个菜鸡&#xff0c;工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发&#xff0c;干了快两年的时候&#xff0c;跳槽到了一家伪大厂干安全。投了不少简历都没有回音&#xff0c;只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西&#xff0c;然而…

学习单调队列小结

因为一直在听身边的人说什么单调队列/斜率优化dp/背包&#xff0c;(ps:我也不清楚这样称呼对不对&#xff0c;因为我真心是没见过这些东西)我都觉得那是神一样的东西。终于抽出时间学了一下。 昨天在朋友一本书里面看到一句话&#xff0c;这里先跟大家分享一下&#xff1a; 没有…

我们究竟还要学习哪些Android知识?完整版开放下载

前言 移动研发火热不停&#xff0c;越来越多人开始学习 android 开发。但很多人感觉入门容易成长很难&#xff0c;对未来比较迷茫&#xff0c;不知道自己技能该怎么提升&#xff0c;到达下一阶段需要补充哪些内容。市面上也多是谈论知识图谱&#xff0c;缺少体系和成长节奏感&a…

ELK7.8.1的Docker搭建过程

在linux下首先在目录准备文件 首先说明&#xff0c;我的电脑宿主机的IP是192.168.1.5 为es准备文件 mkdir -p /opt/elk7/es cd /opt/elk7/es #创建对应的文件夹 数据 / 日志 / 配置 mkdir conf data logs #授权 chmod 777 -R conf data logs然后进入到/opt/elk7/es/conf下 …

如何使用git创建项目,创建分支

git config -global user.name "Your name" git config -global user.email "youexample.com" 建立一个存放工程的文件夹 git init命令用于初始化当前所在目录的这个项目 会创建一个隐藏文件 .git 创建 main.c 文件 创建 .gitignore文件&#xff0c;忽略…

我们究竟还要学习哪些Android知识?附赠课程+题库

2021新的一年&#xff0c;开启新的征程&#xff0c;回顾2020&#xff0c;真是太“南”了。 从年初各大厂裁员&#xff0c;竟然成为一件理所应当的事情&#xff0c;到四月份 GitHub 上“996.ICU” 引起了大家的共鸣。即使我们兢兢业业“996”&#xff0c;但依旧难以抵御 35 岁时…

WINDOWS上KAFKA运行环境安装

WINDOWS上KAFKA运行环境安装 1. 安装JDK 1.1 安装文件&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK 1.2 安装完成后需要添加以下的环境变量&#xff08;右键点击“我的电脑” -> "高级系统设置" -> "环境变…

架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)

前天在公司分享了一些学习经验,园子中感兴趣可以看看。建议大家使用pptPlex来看这个片子。 首先从我在成长中不同阶段的工作和体会来谈不同阶段的学习内容谈起&#xff0c;为了做好这些必修课&#xff0c;我会对知识&#xff0b;实践&#xff0b;思考&#xff0b;心态&#xff…

我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?这原因我服了

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

模板概述

模板&#xff0c;按建筑学的说法是&#xff1a;施工时浇筑混凝土用的成组模型板&#xff1b;而模板之词&#xff0c;恐怕可释之为模型之板&#xff0c;顾名思义&#xff0c;模板为一套规定好了规范准则的样板。既然为样板&#xff0c;自然是可被多方使用&#xff1b;而准则既已…

我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?通用流行框架大全

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

解决读写分离过期读的几个方案

mysql读写分离的坑 读写分离的主要目标是分摊主库的压力&#xff0c;由客户端选择后端数据库进行查询。还有种架构就是在MYSQL和客户端之间有一个中间代理层proxy&#xff0c;客户端之连接proxy&#xff0c;由proxy根据请求类型和上下文决定请求的分发路由。 客户端直连方案&am…

Feign接口 多线程问题

Spring Cloud Feign传输Header&#xff0c;并保证多线程情况下也适用 一、现象 微服务在生产中&#xff0c;常遇到需要把 header 传递到下一子服务的情况&#xff08;如服务A访问服务B的接口&#xff0c;需要传递header&#xff09;&#xff0c;网上大多数的方案是实现 Request…

我在华为做Android外包的真实经历!吊打面试官系列!

导语 本部分内容是关于Android进阶的一些知识总结&#xff0c;涉及到的知识点比较杂&#xff0c;不过都是面试中几乎常问的知识点&#xff0c;也是加分的点。 关于这部分内容&#xff0c;可能需要有一些具体的项目实践。在面试的过程中&#xff0c;结合具体自身实践经历&…

logstash windows

最新在研究elastic stack (elk) &#xff1a; logstash 安装&#xff0c;下载最新版本的logstash: 点击打开链接 解压到磁盘根目录下&#xff1a;在logstash>bin 1、目录下创建&#xff1a;logstash.conf 2、输入内容: # Sample Logstash configuration for creating …

H3C端口状态

转载于:https://www.cnblogs.com/fanweisheng/p/11153315.html

还有人不知道什么是AndroidX的吗?文末领取面试资料

谈起Android框架体系架构&#xff0c;我先提个问&#xff1a;什么是Android框架体系架构 &#xff1f; Android系统构架是安卓系统的体系结构&#xff0c;android的系统架构和其操作系统一样&#xff0c;采用了分层的架构&#xff0c;共分为四层&#xff0c;从高到低分别是And…

zookeeper+kafka+logstash+elasticsearc+kibana

研究背景 1、之所以选用kafka是因为量起来的话单台logstash的抗压能力比较差 2、为了解决整个链路查询的问题&#xff0c;多个Feign传层的话&#xff0c;可以按照一个ID进行穿层&#xff0c;所以采用logback的MDC进行对唯一标识存储并且在Feign的调用链放在Header里&#xff…