为什么Jedis连接池未释放会导致如此严重的生产事故?

2026-04-10 10:012阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计253个文字,预计阅读时间需要2分钟。

为什么Jedis连接池未释放会导致如此严重的生产事故?

java/** * 使用锁 * 设置唯一锁id * @param lockKey 锁key * @param lockKey 锁key * @return 锁id */public String lock(String lockKey, Integer timeout) { // 获取jedis实例 Jedis jedis=redisUtil.getJedis(); // 锁id(必须包含此id才能释放锁) String lockId=LOCK_ID; // 获取锁 return jedis.set(lockKey, lockId, NX, PX, timeout);}

为什么Jedis连接池未释放会导致如此严重的生产事故?

/** * 占用锁,并设置唯一锁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)); } }

看上去好像没什么问题。

本文共计253个文字,预计阅读时间需要2分钟。

为什么Jedis连接池未释放会导致如此严重的生产事故?

java/** * 使用锁 * 设置唯一锁id * @param lockKey 锁key * @param lockKey 锁key * @return 锁id */public String lock(String lockKey, Integer timeout) { // 获取jedis实例 Jedis jedis=redisUtil.getJedis(); // 锁id(必须包含此id才能释放锁) String lockId=LOCK_ID; // 获取锁 return jedis.set(lockKey, lockId, NX, PX, timeout);}

为什么Jedis连接池未释放会导致如此严重的生产事故?

/** * 占用锁,并设置唯一锁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)); } }

看上去好像没什么问题。