返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现开箱即用的redis分布式锁
  • 565
分享到

Java实现开箱即用的redis分布式锁

Java redis分布式锁Java 分布式锁Java redis 锁 2022-12-08 20:12:21 565人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录项目简介目的快速开始需要Maven 引入入门例子整合 springmaven 引入指定 bean 使用aop 注解使用Spring Boot 整合maven 引入使用后期 Roa

项目简介

lock 为 java 设计的分布式,开箱即用,纵享丝滑。

开源地址:https://GitHub.com/houbb/lock

目的

  • 开箱即用,支持注解式和过程式调用
  • 基于 Redis 的分布式锁
  • 内置支持多种 redis 的整合方式
  • 渐进式设计,可独立于 spring 使用
  • 整合 spring
  • 整合 spring-boot

快速开始

需要

jdk1.7+

maven 3.x+

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-core</artifactId>
    <version>1.3.0</version>
</dependency>

入门例子

基于本地 redis 的测试案例。

public void helloTest() {
    ILock lock = LockBs.newInstance();
    String key = "DDD";
    try {
        // 加锁
        lock.tryLock(key);
        System.out.println("业务处理");
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        // 释放锁
        lock.unlock(key);
    }
}

配置化

为了便于拓展,LockBs 的配置支持自定义:

LockBs.newInstance()
        .id(Ids.uuid32())   //id 生成策略
        .cache(JedisRedisServiceFactory.pooled("127.0.0.1", 6379)) //缓存策略
        .lockSupport(new RedisLockSupport())    // 锁实现策略
        .lockKeyFORMat(new LockKeyFormat())     // 针对 key 的格式化处理策略
        .lockReleaseFailHandler(new LockReleaseFailHandler())   //释放锁失败处理
        ;

整合 spring

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-spring</artifactId>
    <version>1.3.0</version>
</dependency>

指定 bean 使用

启用分布式锁

@EnableLock 启用分布式锁。

@EnableRedisConfig 启用 redis 的默认配置。

@Configurable
@ComponentScan(basePackages = "com.github.houbb.lock.test.service")
@EnableLock
@EnableRedisConfig
public class SprinGConfig {
}

EnableLock 注解说明,和引导类对应:

public @interface EnableLock {

    
    String id() default "lockId";

    
    String cache() default "springRedisService";

    
    String lockKeyFormat() default "lockKeyFormat";

    
    String lockReleaseFailHandler() default "lockReleaseFailHandler";

}

其中 springRedisService 使用的是 redis-config 中的实现。

对应注解 @EnableRedisConfig,redis 的配置信息如下:

配置说明默认值
redis.addressredis 地址127.0.0.1
redis.portredis 端口6379
redis.passWordredis 密码

使用 LockBs

我们可以直接 LockBs 的引导类,这种适合一些更加灵活的场景。

@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringServiceRawTest {

    @Autowired
    private UserService userService;

    @Autowired
    private LockBs lockBs;

    @Test
    public void queryLogTest() {
        final String key = "name";
        try {
            lockBs.tryLock(key);
            final String value = userService.rawUserName(1L);
        } catch (Exception exception) {
            throw new RuntimeException(exception);
        } finally {
            lockBs.unlock(key);
        }
    }

}

aop 注解使用

指定方法注解

当然,我们可以在方法上直接指定注解 @Lock,使用更加方便。

直接使用,AOP 切面生效即可。

@Service
public class UserService {

    @Lock
    public String queryUserName(Long userId) {
    }

    @Lock(value = "#user.name")
    public void queryUserName2(User user) {
    }
}

@Lock 属性说明,value 用于指定 key,支持 SPEL 表达式。

其他属性,和引导类的方法参数一一对应。

public @interface Lock {

    
    String value() default "";

    
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    
    long waitLockTime() default 10;

    
    long lockTime() default 60;

}

spring boot 整合

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lock-SpringBoot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

使用

同 spring

后期 Road-MAP

支持锁的可重入

持有锁的线程可以多次获取锁

分布式锁注解支持

以上就是Java实现开箱即用的redis分布式锁的详细内容,更多关于Java redis分布式锁的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现开箱即用的redis分布式锁

本文链接: https://lsjlt.com/news/174577.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现开箱即用的redis分布式锁
    目录项目简介目的快速开始需要maven 引入入门例子整合 springmaven 引入指定 bean 使用aop 注解使用spring boot 整合maven 引入使用后期 Roa...
    99+
    2022-12-08
    Java redis分布式锁 Java 分布式锁 Java redis 锁
  • Java基于Redis实现分布式锁
    分布式锁可以基于很多种方式实现,比如zookeeper、redis...。不管哪种方式,他的基本原理是不变的:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。一、为什么Redis可以方便地实现分布式锁Redis为单进程单线程模式,采用...
    99+
    2015-09-14
    java教程 Java
  • redis分布式锁的实现
    一、使用分布式锁要满足的几个条件:1、系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)2、共享资源(各个系统访问同一个资源,资源的载体可...
    99+
    2024-04-02
  • Redis——》实现分布式锁
    推荐链接:     总结——》【Java】     总结——》【Mysql】     总结——》【Redis】     总结——》【Kafka】     总结——》【Spring】     总结—...
    99+
    2023-09-03
    redis 分布式 过期 lua
  • Redis实现分布式锁
    单体锁存在的问题 在单体应用中,如果我们对共享数据不进行加锁操作,多线程操作共享数据时会出现数据一致性问题。 (下述实例是一个简单的下单问题:从redis中获取库存,检查库存是否够,>0才允许下单) 我们的解决办法通常是加锁。如下加单体锁...
    99+
    2023-08-16
    分布式 java jvm
  • java怎么使用redis实现分布式锁
    在Java中使用Redis实现分布式锁可以通过以下步骤:1. 引入Redis相关的依赖,例如Jedis或Lettuce。2. 创建一...
    99+
    2023-10-09
    java redis
  • Java实现redis分布式锁的三种方式
    目录一、引入原因二、分布式锁实现过程中的问题问题一:异常导致锁没有释放问题二:获取锁与设置过期时间操作不是原子性的问题三:锁过期之后被别的线程重新获取与释放问题四:锁的释放不是原子性...
    99+
    2022-11-13
    Java redis分布式锁 Java 分布式锁
  • Redis分布式锁的实现方式
    目录一、分布式锁是什么1、获取锁2、释放锁二、代码实例上面代码存在锁误删问题:三、基于SETNX实现的分布式锁存在下面几个问题1、不可重入2、不可重试3、超时释放4、主从一致性四、Redisson实现分布式锁1、pom2...
    99+
    2023-04-03
    Java Redis分布式锁实现方式 实现Redis分布式锁 Redis分布式锁实现
  • C#实现Redis的分布式锁
    目录Redis实现分布式锁(悲观锁/乐观锁)Redis连接池使用Redis的SetNX命令实现加锁,调用方式Redis实现分布式锁(悲观锁/乐观锁) 对锁的概念和应用场景在此就不阐...
    99+
    2024-04-02
  • Redis分布式锁Redlock的实现
    目录普通实现Redlock实现Redlock源码用法唯一ID获取锁释放锁普通实现 说道Redis分布式锁大部分人都会想到:setnx+lua,或者知道set key value p...
    99+
    2024-04-02
  • Redis分布式锁之红锁的实现
    目录一、问题二、办法三、原理四、实战一、问题 分布式锁,当我们请求一个分布式锁的时候,成功了,但是这时候slave还没有复制我们的锁,masterDown了,我们的应用继续请求锁的时候,会从继任了master的原slav...
    99+
    2022-08-09
    Redis红锁
  • Redis Template实现分布式锁
    今天就跟大家聊聊有关Redis Template实现分布式锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。可靠性首先,为了确保分布式锁可用,我们至少...
    99+
    2024-04-02
  • PHP+Redis实现分布式锁
    目录 一、分布式锁概述 二、redis实现锁的命令 1、redis实现锁的命令 3、释放锁的步骤 三、PHP+redis分布式锁示例 四、redis集群分布式锁 一、分布式锁概述         在分布式环境下,各个线程通过对公共资...
    99+
    2023-09-15
    分布式锁
  • Redis实现分布式锁(SETNX)
    目录 1、什么是分布式锁 2、分布式锁应具备的条件         3、为什么使用分布式锁 4、SETNX介绍 5、分布式锁实现 6、效果演示 7、Redisson分布式锁详解 8、Lua脚本实现可重入分布式锁 1、什么是分布式锁  ...
    99+
    2023-10-21
    redis 分布式 java spring boot 后端
  • python实现redis分布式锁
    #!/usr/bin/env python # coding=utf-8 import time import redis class RedisLock(object): def __init__(self, key): ...
    99+
    2023-01-31
    分布式 python redis
  • redis中使用java脚本实现分布式锁
    redis被大量用在分布式的环境中,自然而然分布式环境下的锁如何解决,立马成为一个问题。例如我们当前的手游项目,服务器端是按业务模块划分服务器的,有应用服,战斗服等,但是这两个vm都有可能同时改变玩家的属性...
    99+
    2022-06-04
    分布式 脚本 redis
  • Java中怎么使用Redis实现分布式锁
    这篇“Java中怎么使用Redis实现分布式锁”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-05-25
    java redis
  • 分布式锁的原理及Redis怎么实现分布式锁
    这篇文章主要介绍“分布式锁的原理及Redis怎么实现分布式锁”,在日常操作中,相信很多人在分布式锁的原理及Redis怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2023-02-02
    redis
  • 利用Python+Redis实现分布式锁
    利用Python+Redis实现分布式锁 欢迎一起交流技术:一个人可以走的很快,但是一群人却可以走的更远。 常见关系型数据库(Oracle+MySQL+PG+GP)+高可用企业解...
    99+
    2024-04-02
  • 怎么用Redis实现分布式锁
    本文小编为大家详细介绍“怎么用Redis实现分布式锁”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Redis实现分布式锁”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单机...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作