首页 > 其他分享 >记录一次jedis连接池没有释放导致的生产问题

记录一次jedis连接池没有释放导致的生产问题

时间:2023-12-22 19:04:41浏览次数:42  
标签:释放 return String lockId lockKey jedis id 连接池

/**
 * 占用锁,并设置唯一锁id
 * @param lockKey 锁key
 * @return 锁id
 */
public String lock(String lockKey, Integer timeout) {
    //获得jedis实例
    Jedis jedis = redisUtil.getJedis();
    //锁id(必须拥有此id才能释放锁)
    String lockId = UUID.randomUUID().toString();
    //占用锁同时设置失效时间 px:过期时间单位为毫秒 EX:过期时间为秒
    String isSuccees = jedis.set(lockKey, lockId, "NX","PX", timeout);
    //占用锁成功返回锁id,否则返回null
    if("OK".equals(isSuccees)){
        return lockId;
    }else{
        return null;
    }
}

/**
     * 释放锁拥有唯一锁id
     * @param lockKey 锁key
     * @param lockId 加锁id
     */
    public void unlock(String lockKey,String lockId) {
        if(lockId != null){
            //获得jedis实例
            Jedis jedis = redisUtil.getJedis();
            //执行Lua代码删除lockId匹配的锁
            String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
            jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(lockId));
        }
    }

看上去好像没什么问题。

标签:释放,return,String,lockId,lockKey,jedis,id,连接池
From: https://blog.51cto.com/u_16363622/8937597

相关文章

  • mysql中释放表空间的几种方式
    https://blog.csdn.net/qq_42277412/article/details/133344922MySQL是一款常用的关系型数据库管理系统,当我们使用MySQL创建表的时候,我们可能会面临表空间不足的问题。那么在MySQL中,如何释放表空间呢?下面我们将介绍几种常用的方式。 1.TRUNCATETABLETRUNCATETABLEtable_n......
  • MySQL如何清理数据并释放磁盘空间
    在我们的生产环境中有一张表:courier_consume_fail_message,是存放消息消费失败的数据的,设计之初,这张表的数据量评估在万级别以下,因此没有建立索引。但目前发现,该表的数据量已经达到百万级别,原因产生了大量的重试消费,这导致了该表的慢查询。因此需要清理该表数据。而实际上,使用DE......
  • java中的数据库连接池
    常见的连接池的优缺点:HikariCP优点:性能出色,尤其在高并发负载下表现良好内存消耗低,占用系统资源较少具有自动化的连接池维护和统计功能缺点:需要JDK7或以上版本支持配置选项相对较少,有些高级的配置需要通过代码实现Tomcat连接池优点:支持负载均衡和Failover,......
  • java中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置
    ##一、什么是连接池连接池是应用程序与数据库之间的一个缓冲区,它存储了一定数量的空闲数据库连接,当应用程序需要连接数据库时,可以从连接池中获取一个可用连接,使用完毕后再将连接归还给连接池,从而避免了每次连接都需要创建和销毁连接的开销,提高了应用程序的性能和可伸缩性。连接池......
  • 聊聊数据库连接池 Druid
    在SpringBoot项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。在这篇文章中,我们将探讨数据库连接池,深入解析其实现机制,以便更好地理解和规避潜在的风险。1为什么需要连接池假如没有......
  • C/C++ 实现动态资源文件释放
    当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况。资源可以包括图标、位图、字符串等,它们以二进制形式嵌入到可执行文件中。在某些情况下,我们可能需要从可执行文件中提取自定义资源并保存为独立的文件。在这篇博客文章中,我们将讨论如何使用C++和WinAPI实现这个目......
  • Druid数据源连接池
    配置缺省值说明name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-"+System.identityHashCode(this).另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。详情-点此处......
  • 从“搭梁立柱”到“积厚成势”,思迈特助力泉州银行释放数据资产价值
    随着党的二十大胜利召开,高质量发展成为中国全面建设社会主义现代化国家的首要任务,中国银行业的发展战略也出现了新的调整变化。近期召开的中央金融工作会议明确提出,做好数字金融等五篇大文章,数字化智能化转型迎来发展新机遇。据中国银行业协会、普华永道联合发布的《中国银行家调查......
  • [Ngbatis源码学习]Ngbatis源码阅读之连接池的创建
    Ngbatis源码阅读之连接池的创建1.NebulaPool的创建NgbatisBeanFactoryPostProcessor这个类实现了BeanFactoryPostProcessor后置处理器,Ngbatis连接池的创建就在postProcessBeanFactory中实现。关于BeanFactoryPostProcessor的有关内容可以参考上一篇文章。首先来看org......
  • ONLYOFFICE:让办公触手可及,随时随地释放创造力
    本文目录前言一、不限开发潜能,各种语言轻松上手二、适合多种用途,随时随地部署应用三、上手简单轻松,更快更好的体验感总结前言各位开发铁铁,今天给大家推荐一款非常实用的专用办公神器–ONLYOFFICE。使用ONLYOFFICE解锁办公新境界,ONLYOFFICE可以带你畅享办公自由!无论身在何处,ONLYOF......