文档章节

Redis 单机锁实现

yiguangtia
 yiguangtia
发布于 2018/12/21 11:24
字数 189
阅读 5
收藏 0
public class RedisLock {
    private static final String LOCK_SUCCESS = "OK";
    private static final String SET_IF_NOT_EXIST = "NX";
    private static final String SET_WITH_EXPIRE_TIME = "PX";

    /**
     * 尝试获取分布式锁
     * @param jedis Redis客户端
     * @param lockKey 锁
     * @param requestId 请求标识
     * @param expireTime 超期时间
     * @return 是否获取成功
     */
    public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) {

        String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

        if (LOCK_SUCCESS.equals(result)) {
            return true;
        }
        return false;

    }

    private static final Long RELEASE_SUCCESS = 1L;

    /**
     * 释放分布式锁
     * @param jedis Redis客户端
     * @param lockKey 锁
     * @param requestId 请求标识
     * @return 是否释放成功
     */
    public static boolean releaseDistributedLock(Jedis jedis, String lockKey, String requestId) {

        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));

        if (RELEASE_SUCCESS.equals(result)) {
            return true;
        }
        return false;

    }
}

© 著作权归作者所有

上一篇: mysql 递归查询
yiguangtia
粉丝 5
博文 39
码字总数 29778
作品 0
深圳
私信 提问
godis v0.0.10 发布,Go 语言的 redis 客户端开发包

godis godis是一个golang实现的redis客户端,参考jedis实现. godis实现了几乎所有的redis命令,包括单机命令,集群命令,管道命令和事物命令等. 如果你用过jedis,你就能非常容易地上手godis,因为...

piaohao
07/01
0
0
Spring-AOP防重解决方案

思路如下: 1、自定义注解 @NoRepeatSubmit 标记有必要防重复提交请求Controller。 2、通过Spring-AOP方式对所有标记了 @NoRepeatSubmit 的方法进行切入拦截。 3、在业务方法执行前,获取当前...

铁骨铮铮
05/21
0
0
golang 实现的 redis 客户端 - godis

godis 是一个 golang 实现的 redis 客户端,参考 jedis 实现。godis 实现了几乎所有的 redis 命令,包括单机命令,集群命令,管道命令和事物命令等。 如果你用过 jedis,你就能非常容易地上手 ...

piaohao
07/01
0
0
.net下 本地锁、redis分布式锁、zk分布式锁的实现

为什么要用锁?   大型站点在高并发的情况下,为了保持数据最终一致性就需要用到技术方案来支持。比如:分布式锁、分布式事务。有时候我们在为了保证某一个方法每次只能被一个调用者使用的时...

yjq_叶
2018/08/21
0
0
百度Java架构师分享分布式锁的技术选型及思考

本文来自作者 一行 在 GitChat 分享的{分布式锁的技术选型及思考} 锁和分布式锁 在计算机中,锁的作用是解决在并发状态下的共享资源互斥问题,保证在同一时间只有一个进程/线程可以掌握资源的...

美的让人心动
2018/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Wondershare Recoverit - 专业数据恢复神器,支持U盘、存储卡等外部设备!

Wondershare Recoverit 今天带来的这款软件叫做Wondershare Recoverit,是一款专业实用的数据恢复软件,也是一款比较久的数据恢复软件了,可以恢复所有文件类型。 包括照片、视频、文档和其他...

_Somuns
21分钟前
6
0
SpringCloud gateway 修改返回数据

SpringCloud gateway 修改返回数据 版本说明 开源软件 版本 springboot 2.1.6.RELEASE jdk 11.0.3 gradle 主要引入了springboot 2.1,lombok plugins { id 'org.springframework.boot' v......

buddie
今天
9
0
PHP实现单人多人聊天源码免费分享 | 电脑报修系统

源码清单 1. 简易版登陆式聊天源码。 2. 电脑报修轻系统源码。 3. 关注下面公众号回复“聊天”,免费获取。 聊天系统 虽然微信,QQ是即时通讯的元老。但是他们限制很多,所以很多人都想做一个...

北桥苏
今天
6
0
跟面部识别开愚人玩笑?做一个时尚口罩就能实现

全文共3208字,预计学习时长6分钟 图片来源:Upsplash/Pavel Anoshin 目前,人脸识别的使用率正在不断上升,随之而来关于面部识别道德问题的争论也愈发激烈。从机场到社交媒体,面部识别的应...

读芯术
今天
1
0
Git同步更新操作GitHub和码云仓库上面的代码

一、前言 问题: 小编在生活中,一般都是将代码保存到github上,但由于国内的码云仓库确实速度比github快很多,用起来也很方便,于是后来就慢慢转码云了,当然小编在github上的代码也不想放弃...

郑清
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部