3 Star 8 Fork 0

李海绵 / redis-distributed-lock

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

redis-distributed-lock

介绍

集成spring boot框架的redis分布式锁,使用redis作为锁的资源存储,使用lua脚本加锁保证锁的原子性操作。

目前工程已迁移至github:https://github.com/lihaimian/redis-distributed-lock。 后续将会在两个平台上进行跌代优化,但会优先在github上进行跌代优化。

软件架构

软件架构说明

安装教程

1. 安装
    将工程下载到本地,导入IDE开发工具,进行install。
2. 添加依赖
    在需要使用该分布式锁工程的pom.xml文件中加入以下依赖:
    <dependency>
        <groupId>com.springboot.redis</groupId>
        <artifactId>redis-distributed-lock</artifactId>
        <version>1.0.0</version>
    </dependency>

使用说明

全局统一配置:
1.redis配置
     在Spring的配置文件bootstrap.properties或application.properties中添加redis配置信息

    #redis配置
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.database=0
    
    #可选全局配置
    #分布式锁的KEY前缀
    redis.distributed.lock.lock-pre=MY_LOCK
    #分布式锁的持锁有效时长(单位:s)
    redis.distributed.lock.expired-time=30
    #分布式锁的获取锁失败重试次数
    redis.distributed.lock.retry-count=2

    ![输入图片说明](https://images.gitee.com/uploads/images/2019/0310/221937_2798ace7_1993405.png "全局配置信息")

方式一:注入方式

1.在需要使用锁的实例Bean中添加分布式锁的操作Bean和全局配置信息
    @Autowired
    private ILockManager lockManager;
    @Autowired
    private LockProperties lockProperties;
2.在需要加锁的函数中使用
	/**
     * 无返回值分布式锁注入操作
     * @param userName
     */
    @Override
    public void sayHello(String userName) {
        String lockKey = UUID.randomUUID().toString();
        //将函数的业务操作在加锁操作中完成
        lockManager.callBack(lockKey, new LockCallBack() {
            @Override
            public void execute() {
                System.out.println("Hello,I'm alex.");
            }
        });
    }
    /**
     * 有返回值分布式锁注入操作
     * @param id
     * @param userName
     * @return
     */
    @Override
    public String sayHello(String id, String userName) {
        String lockKey = UUID.randomUUID().toString();
        //将函数的业务操作在加锁操作中完成
        return (String) lockManager.callBack(lockKey, new ReturnCallBack<Object>() {
            @Override
            public Object execute() {
                return "Hello,I'm alex.this is return message.";
            }
        });
    }

![输入图片说明](https://images.gitee.com/uploads/images/2019/0310/222015_e14b4b80_1993405.png "使用方式一")
    

方式二:注解方式

	1.直接在需要加锁的业务函数中添加@Lock注解即可。
	/**
     * 无返回值分布工锁注解操作
     * @param userName
     */
    @Lock
    @Override
    public void loadUser(String userName) {
        System.out.println("Hello,I'm alex.use by annotation");
    }
    /**
     * 有返回值分布式锁注解操作
     * @param id
     * @param userName
     * @param age
     * @return
     */
    @Lock
    @Override
    public String loadUser(@LockKey String id, String userName, @LockKey Integer age) {
        return "Hello,I'm alex.this is return message.use by annotation";
    }
    分布式锁KEY说明
    使用注解方式的分布式锁KEY
    1.默认情况下,会使用类名+函数名作为分布式锁的KEY。
    2.函数的入参可以添加@LockKey注解,分布式锁将使用函数中所有添加了@LockKey的参数值拼接作为分布式锁的KEY

    ![输入图片说明](https://images.gitee.com/uploads/images/2019/0310/222053_513b720b_1993405.png "使用方式二")

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/

空文件

简介

redis+lua的分布式锁 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/alexli89/redis-distributed-lock.git
git@gitee.com:alexli89/redis-distributed-lock.git
alexli89
redis-distributed-lock
redis-distributed-lock
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891