首页 > 数据库 >redis锁简单实现

redis锁简单实现

时间:2023-09-28 16:45:36浏览次数:33  
标签:实现 redis value public second jedis key 简单 lockKey

不要用get,get的话有可能并发

使用 setnx ex 

NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。

Boolean flag = jedisTemplate.setnxex(REDIS_LOCK_KEY, "1", 60);
if (!flag) {
    // 此时其他的服务器正在执行该任务
    return;
}

 

也可以使用如下代码封装一下:

import redis.clients.jedis.Jedis;

public class RedisLock {
    private final Jedis jedis;
    private final String lockKey;
    private final int expireTime = 60; // 锁的过期时间,单位:秒

    public RedisLock(Jedis jedis, String lockKey) {
        this.jedis = jedis;
        this.lockKey = lockKey;
    }

    /**
     * 尝试获取锁
     * @return true-获取锁成功,false-获取锁失败
     */
    public boolean tryLock() {
        String result = jedis.set(lockKey, "lock_value", "NX", "EX", expireTime);
        return result != null && result.equals("OK");
    }

    /**
     * 释放锁
     */
    public void unlock() {
        jedis.del(lockKey);
    }
}

 

标签:实现,redis,value,public,second,jedis,key,简单,lockKey
From: https://www.cnblogs.com/acm-bingzi/p/redis_lock.html

相关文章

  • 向量化实现矩阵运算优化(一)
    xsimd简介  xsimd是C++的一个开源simd库,实现了对常见simd指令的封装,从而使得simd的操作更为简单。接下来先从两个简单的例子来入门xsimd。voidaverage(conststd::vector<double>&v1,conststd::vector<double>&v2,std::vector<double>&v){intn=v.size();......
  • Kbaor_2023_9_28_Java第一次实战项目_ELM_V1_食品的实体类、工具类与实现类
    Kbaor_2023_9_28_Java第一次实战项目_ELM_V1_食品的实体类、工具类与实现类ELM_V1_食品的实体类packageelm_V1;/***[食品实体类]**@author秦帅*@date2023-9-25*/publicclassFood{privateIntegerfoodId;//食品编号privateStringfoodNam......
  • 阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享
    今天,由云原生计算基金会CNCF主办的KubeCon+CloudNativeCon+OpenSourceSummitChina2023主论坛在上海举办。阿里云容器服务负责人易立在主论坛发表演讲,介绍阿里云为大模型提供的基础设施能力,以及通过云原生AI的方式助力大模型普惠提效。易立在主论坛现场演讲大模型无疑是AI......
  • AI算法+视频技术助力构建智慧城管解决方案,实现城市管理精细化
    一、背景分析物联网、大数据、移动互联网等技术的日新月异,城市管理对信息资源需求的日益提升,广大市民对政府服务新的诉求,智慧城管正面临千载难逢的发展机遇。发展历程:1)数字城管:城市管理机制的变革——沟通及时、责任到位、处置及时、运转高效;九大标准子系统:无线数据采集、呼叫中心......
  • 阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享
    今天,由云原生计算基金会CNCF主办的KubeCon+CloudNativeCon+OpenSourceSummitChina2023主论坛在上海举办。阿里云容器服务负责人易立在主论坛发表演讲,介绍阿里云为大模型提供的基础设施能力,以及通过云原生AI的方式助力大模型普惠提效。易立在主论坛现场演讲大模型无疑是......
  • 实验一 c语言输入输出和简单程序编写
    task1.c源代码#include<stdio.h>#include<stdlib.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");return0;}运行结果#include<stdio.h>intmain(){printf("......
  • 利用字典树实现搜索提示词
    利用字典树构建搜索提示,主要一点是在项目中字典的数据加载。@GetMapping("/searchCues")@Operation(summary="搜索提示词")publicResultsearchCues(Stringkeys){try{if(keys.isEmpty()){returnnull;}......
  • CocosCreator3.x 应用在UI(Sprite)上的 shader 要怎么利用 自定义顶点参数 来实现合批
    前言为啥要合批减少DC什么是自定义顶点参数通过几何体实例化特性(GPUInstancing)可使GPU批量绘制模型相同且材质相同的渲染对象。如果我们想在不打破这一特性的情况下单独修改某个对象的显示效果,就需要通过自定义几何体实例化属性。参考文档UI(Sprite)怎么你了?按照文......
  • 结对项目:实现自动生成小学四则运算题目
    软件工程计科21级2班作业要求结对项目-实现四则运算题目生成作业目标合作完成四则运算题目生成项目成员信息姓名学号杨恒3121005146游烽3121005148Github:https://github.com/wcng010/SoftwareWork2PSP表格PSP2.1PersonalSoftwarePr......
  • linux安装redis
    一、下载redissudoaptinstallredis-server 二、修改配置文件sudovim/etc/redis/redis.conf daemonizeyes    后端模式启动bind0.0.0.0     外网可访问,且去除ipv6限制requirepass     修改密码 三、服务管理1、重启服务sudoserviceredis-se......