/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cloud.cluster.redis.lock;
import java.util.concurrent.locks.Lock;
import org.springframework.cloud.cluster.lock.DistributedLock;
import org.springframework.cloud.cluster.lock.LockService;
import org.springframework.cloud.cluster.lock.support.DelegatingDistributedLock;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.integration.redis.util.RedisLockRegistry;
/**
* {@link LockService} implementation based on Redis.
*
* <p>This implementation delegates to {@link RedisLockRegistry} from Spring
* Integration.
*
* @author Janne Valkealahti
*
*/
public class RedisLockService implements LockService {
public static final String DEFAULT_REGISTRY_KEY = "spring-cloud";
private final RedisLockRegistry redisLockRegistry;
/**
* Instantiates a new redis lock service.
*
* @param connectionFactory the redis connection factory
*/
public RedisLockService(RedisConnectionFactory connectionFactory) {
this(connectionFactory, DEFAULT_REGISTRY_KEY);
}
/**
* Instantiates a new redis lock service.
*
* @param connectionFactory the redis connection factory
* @param registryKey The key prefix for locks.
*/
public RedisLockService(RedisConnectionFactory connectionFactory, String registryKey) {
this.redisLockRegistry = new RedisLockRegistry(connectionFactory, registryKey);
}
/**
* Instantiates a new redis lock service.
*
* @param connectionFactory the redis connection factory
* @param expireAfter The expiration in milliseconds.
*/
public RedisLockService(RedisConnectionFactory connectionFactory, long expireAfter) {
this.redisLockRegistry = new RedisLockRegistry(connectionFactory, DEFAULT_REGISTRY_KEY, expireAfter);
}
/**
* Instantiates a new redis lock service.
*
* @param connectionFactory the redis connection factory
* @param registryKey The key prefix for locks.
* @param expireAfter The expiration in milliseconds.
*/
public RedisLockService(RedisConnectionFactory connectionFactory, String registryKey, long expireAfter) {
this.redisLockRegistry = new RedisLockRegistry(connectionFactory, registryKey, expireAfter);
}
@Override
public DistributedLock obtain(String lockKey) {
Lock lock = redisLockRegistry.obtain(lockKey);
return new DelegatingDistributedLock(lockKey, lock);
}
}
- 浏览: 5063059 次
- 性别:
- 来自: 南京
-
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20701、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6302严重: Servlet.service() for ser ... -
spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
2017-12-01 17:09 3020spring 封装了非常强大的异常处理机制。本文选取@Co ... -
springboot注解
2017-12-01 09:44 1045@RestController和@RequestMappin ... -
Spring 4 xml 注解配置谅解
2017-12-01 09:39 1140《Spring in Action》4th E ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1466平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 876在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2159可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1619阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1163质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
spring cloud config实现datasource的热部署
2017-11-21 16:44 1643关于spring cloud config的基本使用,前面的 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2864本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1125百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1369使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1617package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 652DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4782java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 566HTTP 是一种"无状 ...
相关推荐
Spring Cloud 分布式锁通常借助 Redis 或 ZooKeeper 实现。 9. **领导选举** (Leader Election): 当服务集群需要一个领导者来协调工作或者做出决策时,领导选举是必要的。Spring Cloud Zookeeper 或者 Consul 可以...
这份"Java基础、JVM、并发编程与线程、设计模式、SpringBoot、SpringCloud、MyBatis、Redis面试题等"的资源集合,显然是为准备Java开发者面试而设计的,涵盖了广泛的知识点,下面将对这些关键领域进行深入讲解。...
leader-by-lock 使用Redis Lock轻松实现集群领导者选举仅使用Spring-Boot和Redis动机几乎所有使用Spring Boot进行领导力选举的例子都转到Hazelcast(现在已弃用)和Zookeeper(在简单情况下过强)中的Spring Cloud ...
SpringCloud提供了分布式锁的解决方案,如RedisLock或ZookeeperLock,以及分布式事务的处理,如Seata(原名AT模式)来解决跨服务的事务一致性问题。 **8. 监控与日志** SpringCloud还集成了Spring Boot Actuator,...
使用Spring Data Redis库,可以通过注解`@Cacheable`实现缓存操作,`@RedisLock`实现分布式锁。此外,Spring Cloud Config也可以利用Redis存储配置信息,实现配置中心功能。 总之,Redis作为一款轻量级、高性能的...
在本项目"redisson_demo.rar"中,我们探讨了如何利用Spring Cloud、Redisson以及Feign来构建一个高效的分布式锁系统,以实现多节点环境下的秒杀功能。这个系统的关键在于处理并发请求,确保数据的一致性和事务性,...
SpringCloud是中国Java开发人员广泛使用的微服务框架,它基于Spring Boot进行快速构建分布式系统中的服务发现、配置中心、断路器、智能路由、微代理、控制总线、全局锁、领导选举、分布式会话、集群状态等核心功能。...
【Redis分布式锁实现原理】 Redis 分布式锁是一种在分布式系统中实现锁的常见...在实际项目中,可以考虑使用现成的成熟解决方案,如`Redlock`,或者Spring Cloud的`Redisson`客户端,它们提供了更完善的分布式锁实现。
实现SpringBoot与Zookeeper的集成,首先需要在项目中添加Zookeeper的相关依赖,例如使用Spring Cloud Zookeeper组件。在`pom.xml`中添加如下依赖: ```xml <groupId>org.springframework.cloud <artifactId>...
面试中可能会涉及Spring Boot、Spring Cloud、Spring Data JPA等相关技术。 3. **JVM**:理解JVM的工作原理对于优化代码性能至关重要。面试中可能涉及内存模型(堆、栈、方法区),垃圾回收机制(新生代、老年代、...
基于redis的分布式锁spring-boot starter组件,由于项目拥有多样化的锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 弹簧靴 1.添加锁启动器组件依赖,目前还没上传到公共仓库,需要...
Spring-Boot和Spring-Cloud技术:Spring-Boot是一个用于简化Spring应用开发的框架,它能够帮助开发者快速构建独立的、生产级别的Spring应用。Spring-Boot的特点包括自动配置、起步依赖、嵌入式服务器等。Spring-...
6. **Spring**:Spring框架是Java企业级应用的核心,包括依赖注入(DI)、面向切面编程(AOP)、Spring Boot、Spring Cloud等。理解Spring MVC、Spring Data JPA以及Spring Security也是必要的。 7. **MyBatis**:...
Spring框架是Java企业级应用的核心,其依赖注入(DI)、面向切面编程(AOP)、Spring Boot、Spring Cloud等相关知识都是面试热点。面试者需要了解Spring的IoC容器,AOP的实现原理,以及Spring Boot简化开发的方式。 ...
Spring框架是企业级应用开发的基石,其依赖注入、AOP(面向切面编程)、Spring Boot、Spring Cloud等相关知识在面试中常被提及。理解IoC容器的工作原理,以及Spring MVC的请求处理流程,是必备技能。 MyBatis作为轻...
这些知识点涵盖了多线程、Spring框架、Spring Cloud、JVM优化、Redis缓存、消息队列(MQ)、Kafka、Dubbo、算法、设计模式以及分布式系统等多个领域。下面,我们将详细讨论这些领域的核心概念和重要知识点。 1. **...
涵盖了从基础到高级的Java技术,包括并发编程、消息中间件、Spring框架、分布式协调服务Zookeeper、微服务Spring Cloud、垃圾收集器JVM、高性能网络编程库Netty、持久化框架MyBatis以及内存数据存储Redis。...
2. Redisson提供了多种集成方式,包括 SpringBoot、 Spring Cloud、Dubbo 等。 3. Redisson提供了多种数据结构,包括 Map、List、Set、Queue 等。 SpringBoot集成Redisson是实现分布式锁的一种常用方法,具有非常高...
5. **Spring Cloud**:一套微服务解决方案,包括服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、配置中心(Config Server)等组件。 【中间件技术】 1. **消息队列MQ**:如RabbitMQ、Kafka,用于...
- **基于缓存实现**:如 Redis 的 SETNX 命令。 - **基于 Zookeeper 实现**:利用 Znode 的特性实现分布式协调服务。 #### 六、SpringMVC 流程、常用注解、Spring 的 IOC 和 AOP - **SpringMVC 流程**: 1. ...