From 7b1d87cd7502fe54735bbefa4c96d3daa23a498b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=BF=97=E6=81=92?= <842328916@qq.com> Date: Mon, 15 Sep 2025 01:21:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=BF=E6=8D=A2Jedis-=E4=BD=BF=E7=94=A8Redis?= =?UTF-8?q?sonClient=E5=AE=9E=E7=8E=B0JedisService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/common/JedisService.java | 1539 +++++------------ .../com/accompany/core/vo/RedisHashVo.java | 56 - .../service/account/AccountBlockService.java | 20 +- .../service/activity/ActivityPackService.java | 57 +- .../community/DynamicSquareService.java | 17 +- .../LinearlyPrizePoolService.java | 8 +- .../nameplate/UserNameplateService.java | 32 +- .../service/room/RoomGiftValueService.java | 25 +- .../service/room/RoomSearchService.java | 12 +- .../impl/CrossRoomPkRoundServiceImpl.java | 12 +- .../SingleBroadcastPopularityServiceImpl.java | 30 +- .../treasure/SeizeTreasureService.java | 62 +- .../service/user/UserInRoomService.java | 22 +- .../main/resources/lua/activity/backStock.lua | 8 - .../resources/lua/activity/deductStock.lua | 33 - 15 files changed, 527 insertions(+), 1406 deletions(-) delete mode 100644 accompany-base/accompany-core/src/main/java/com/accompany/core/vo/RedisHashVo.java delete mode 100644 accompany-business/accompany-business-service/src/main/resources/lua/activity/backStock.lua delete mode 100644 accompany-business/accompany-business-service/src/main/resources/lua/activity/deductStock.lua diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/common/JedisService.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/common/JedisService.java index 1c2978f51..bb352b883 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/common/JedisService.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/common/JedisService.java @@ -1,86 +1,64 @@ package com.accompany.core.service.common; -import com.accompany.common.redis.JedisPoolManager; -import com.accompany.core.exception.ServiceException; -import com.accompany.core.vo.RedisHashVo; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; +import org.redisson.api.*; +import org.redisson.client.protocol.ScoredEntry; +import org.redisson.codec.JsonJacksonCodec; import org.springframework.stereotype.Service; import org.springframework.util.Assert; -import redis.clients.jedis.*; -import redis.clients.jedis.exceptions.JedisException; -import java.io.IOException; import java.util.*; -import java.util.function.Consumer; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @author liuguofu * on 10/29/14. - * + * * 已整合JedisLockService功能,提供分布式锁相关方法: * 1. lock系列方法:获取分布式锁 * 2. unlock系列方法:释放分布式锁 * 3. isExist方法:判断是否存在指定的key + * + * 使用Redisson重构,替换原有的基于Jedis的实现 */ @Slf4j @Service public class JedisService { - private JedisPoolManager readJedisPoolManager; - - private JedisPoolManager writeJedisPoolManager; + private RedissonClient redissonClient; /** 等待锁的时间(单位ms) **/ private static final int RETRY_TIME = 5 * 1000; /** 锁超时的时间(单位是s) **/ private static final int EXPIRE_TIME = 5; - public JedisService(JedisPoolManager readJedisPoolManager, JedisPoolManager writeJedisPoolManager) { - Assert.notNull(readJedisPoolManager, "The readJedisPoolManager can't be null"); - Assert.notNull(writeJedisPoolManager, "The writeJedisPoolManager can't be null"); - this.readJedisPoolManager = readJedisPoolManager; - this.writeJedisPoolManager = writeJedisPoolManager; + public JedisService(RedissonClient redissonClient) { + Assert.notNull(redissonClient, "The redissonClient can't be null"); + this.redissonClient = redissonClient; } public void setex(String key, int seconds, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.setex(key, seconds, value); + RBucket bucket = redissonClient.getBucket(key); + bucket.set(value, seconds, TimeUnit.SECONDS); } catch (Exception e) { - log.error("setex from jedis error. key:{} value:{}", key, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("setex from redisson error. key:{} value:{}", key, value, e); } } public boolean setnx(String key, String value, Integer expireSeconds) { - Jedis wjedis = null; try { - wjedis = this.writeJedisPoolManager.getJedis(); - long result = wjedis.setnx(key, value); - if (result == 1) { - return true; - } + RBucket bucket = redissonClient.getBucket(key); + boolean result = bucket.trySet(value, expireSeconds, TimeUnit.SECONDS); + return result; } catch (Exception e) { - log.error("zincrby from jedis error. key:{} score:{} member:{}", key); - } finally { - try { - wjedis.expire(key, expireSeconds); - } catch (Exception e) { - log.error("设置超时时间失败[key={}, value={},expireSeconds={}]", key, value, expireSeconds, e); - } - if (wjedis != null) { - wjedis.close(); - } + log.error("setnx from redisson error. key:{} value:{}", key, value, e); } - return false; } @@ -89,338 +67,261 @@ public class JedisService { * * @param key * @param content 数据 - * @param expireTime 失效时长(秒) */ - - public void set(String key, String content) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.set(key, content); + RBucket bucket = redissonClient.getBucket(key); + bucket.set(content); } catch (Exception e) { - log.error("set to jedis error. key:{} data:{} msg:{}", key, content, e); - } finally { - if (wjedis != null) { - log.debug("jedis set",wjedis); - wjedis.close(); - log.debug("jedis set",wjedis); - } + log.error("set to redisson error. key:{} data:{} msg:{}", key, content, e); } } - public void set(String key, String content, int expire) { - Jedis wjedis = null; + public void set(String key, String content, int expireSeconds) { try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.set(key, content); - if (expire >= 0) { - wjedis.expire(key, expire); + RBucket bucket = redissonClient.getBucket(key); + if (expireSeconds >= 0) { + bucket.set(content, expireSeconds, TimeUnit.SECONDS); + } else { + bucket.set(content); } } catch (Exception e) { - log.error("set to jedis error. key:{} data:{} msg:{}", key, content, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("set to redisson error. key:{} data:{} msg:{}", key, content, e); } } public void del(String key) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.del(key); + redissonClient.getBucket(key).delete(); } catch (Exception e) { - log.error("delete from jedis error. key:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("delete from redisson error. key:{}", key, e); } } public String get(String key) { - String ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.get(key); + RBucket bucket = redissonClient.getBucket(key); + return bucket.get(); } catch (Exception e) { - log.error("get from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("get from redisson error. key:{}", key, e); } - return ret; + return null; } public String read(String key) { - String ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.get(key); + RBucket bucket = redissonClient.getBucket(key); + return bucket.get(); } catch (Exception e) { - log.error("hget from jedis error. key:{} field:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("read from redisson error. key:{}", key, e); } - return ret; + return null; } public Long incr(String key) { - Long wet = null; - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wet = wjedis.incr(key); + RAtomicLong atomicLong = redissonClient.getAtomicLong(key); + return atomicLong.incrementAndGet(); } catch (Exception e) { - log.error("incr from jedis error. key:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("incr from redisson error. key:{}", key, e); } - return wet; + return null; } public Long incrBy(String key, long inet) { - Long ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.incrBy(key, inet); + RAtomicLong atomicLong = redissonClient.getAtomicLong(key); + return atomicLong.addAndGet(inet); } catch (Exception e) { - log.error("incrBy from jedis error. key:{} inet:{}", key, inet); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("incrBy from redisson error. key:{} inet:{}", key, inet, e); } - return ret; + return null; } public Double incrByFloat(String key, double inet) { - Double ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.incrByFloat(key, inet); + RAtomicDouble atomicDouble = redissonClient.getAtomicDouble(key); + return atomicDouble.addAndGet(inet); } catch (Exception e) { - log.error("incrBy from jedis error. key:{} inet:{}", key, inet); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("incrByFloat from redisson error. key:{} inet:{}", key, inet, e); } - return ret; + return null; } public Long decr(String key) { - Long wet = null; - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wet = wjedis.decr(key); + RAtomicLong atomicLong = redissonClient.getAtomicLong(key); + return atomicLong.decrementAndGet(); } catch (Exception e) { - log.error("decr from jedis error. key:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("decr from redisson error. key:{}", key, e); } - return wet; + return null; } public Long decrBy(String key, long inet) { - Long ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.decrBy(key, inet); + RAtomicLong atomicLong = redissonClient.getAtomicLong(key); + return atomicLong.addAndGet(-inet); } catch (Exception e) { - log.error("decrBy from jedis error. key:{} inet:{}", key, inet); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("decrBy from redisson error. key:{} inet:{}", key, inet, e); } - return ret; + return null; } public void lpush(String key, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.lpush(key, value); + RList list = redissonClient.getList(key); + list.add(0, value); } catch (Exception e) { - log.error("lpush from jedis error. key:{} value:{}", key, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("lpush from redisson error. key:{} value:{}", key, value, e); } } public String lpop(String key) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.lpop(key); - } catch (Exception e) { - log.error("rpop from jedis error. key:{} value:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); + RList list = redissonClient.getList(key); + if (!list.isEmpty()) { + return list.remove(0); } + } catch (Exception e) { + log.error("lpop from redisson error. key:{}", key, e); } - return null; } - public String lindex(String key,Integer index) { - Jedis wjedis = null; + public String lindex(String key, Integer index) { try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.lindex(key,index); - } catch (Exception e) { - log.error("lIndex from jedis error. key:{} index:{}", key,index); - } finally { - if (wjedis != null) { - wjedis.close(); + RList list = redissonClient.getList(key); + if (index < list.size()) { + return list.get(index); } + } catch (Exception e) { + log.error("lindex from redisson error. key:{} index:{}", key, index, e); } - return null; } public void rpush(String key, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.rpush(key, value); + RList list = redissonClient.getList(key); + list.add(value); } catch (Exception e) { - log.error("rpush from jedis error. key:{} value:{}", key, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("rpush from redisson error. key:{} value:{}", key, value, e); } } public Long llen(String key) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - return rjedis.llen(key); + RList list = redissonClient.getList(key); + return (long) list.size(); } catch (Exception e) { - log.error("llen from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("llen from redisson error. key:{}", key, e); } return null; } public List lrange(String key, long begin, long end) { - Jedis rjedis = null; - List result = null; try { - rjedis = readJedisPoolManager.getJedis(); - result = rjedis.lrange(key, begin, end); - return result; - } catch (Exception e) { - log.error("llen from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); + RList list = redissonClient.getList(key); + int size = list.size(); + int from = (int) Math.max(0, begin); + int to = (int) Math.min(end, size - 1); + if (from <= to) { + return list.subList(from, to + 1); } + } catch (Exception e) { + log.error("lrange from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } - return null; + return new ArrayList<>(); } public Long lrem(String key, long count, String value) { - Jedis rjedis = null; - Long result = 0L; try { - rjedis = readJedisPoolManager.getJedis(); - result = rjedis.lrem(key, count, value); - return result; - } catch (Exception e) { - log.error("lrem from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); + RList list = redissonClient.getList(key); + long removed = 0L; + if (count > 0) { + // 从头开始删除count个 + for (int i = 0; i < Math.min(count, list.size()); i++) { + if (list.get(i).equals(value)) { + list.remove(i); + removed++; + i--; // 因为删除后索引会变化 + count--; + if (count <= 0) break; + } + } + } else if (count < 0) { + // 从尾开始删除|count|个 + for (int i = list.size() - 1; i >= 0 && count < 0; i--) { + if (list.get(i).equals(value)) { + list.remove(i); + removed++; + count++; + } + } + } else { + // 删除所有 + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals(value)) { + iterator.remove(); + removed++; + } + } } + return removed; + } catch (Exception e) { + log.error("lrem from redisson error. key:{} count:{} value:{}", key, count, value, e); } - return result; + return 0L; } - public void ltrim(String key, long start, long end) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.ltrim(key, start, end); - } catch (Exception e) { - log.error("ltrim from jedis error. key:{} start:{} end ", key, start, end); - } finally { - if (wjedis != null) { - wjedis.close(); + RList list = redissonClient.getList(key); + int size = list.size(); + int from = (int) Math.max(0, start); + int to = (int) Math.min(end, size - 1); + if (from <= to) { + List subList = new ArrayList<>(list.subList(from, to + 1)); + list.clear(); + list.addAll(subList); + } else { + list.clear(); } + } catch (Exception e) { + log.error("ltrim from redisson error. key:{} start:{} end:{}", key, start, end, e); } } - - public String rpop(String key) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.rpop(key); - } catch (Exception e) { - log.error("rpop from jedis error. key:{} value:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); + RList list = redissonClient.getList(key); + if (!list.isEmpty()) { + return list.remove(list.size() - 1); } + } catch (Exception e) { + log.error("rpop from redisson error. key:{}", key, e); } - return null; } public String hget(String key, String field) { - String ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.hget(key, field); + RMap map = redissonClient.getMap(key); + return map.get(field); } catch (Exception e) { - log.error("hget from jedis error. key=" + key + "field=" + field, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hget from redisson error. key:{} field:{}", key, field, e); } - return ret; + return null; } public void hset(String key, String field, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - Long hset = wjedis.hset(key, field, value); + RMap map = redissonClient.getMap(key); + map.put(field, value); } catch (Exception e) { - log.error("hset from jedis error. key:{} field:{} value:{}", key, field, value, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hset from redisson error. key:{} field:{} value:{}", key, field, value, e); } } @@ -437,156 +338,105 @@ public class JedisService { * 如果给定域已经存在且没有操作被执行,返回0。 */ public Long hsetnx(String key, String field, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.hsetnx(key, field, value); + RMap map = redissonClient.getMap(key); + boolean result = map.fastPutIfAbsent(field, value); + return result ? 1L : 0L; } catch (Exception e) { - log.error("hset from jedis error. key:{} field:{} value:{}", key, field, value, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hsetnx from redisson error. key:{} field:{} value:{}", key, field, value, e); } return null; } public Boolean hexists(String key, String field) { - Boolean exists = false; - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - exists = wjedis.hexists(key,field); + RMap map = redissonClient.getMap(key); + return map.containsKey(field); } catch (Exception e) { - log.error("hexists from jedis error. key:{} field:{}", key, field, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hexists from redisson error. key:{} field:{}", key, field, e); } - return exists; + return false; } public List hmread(String key, String... field) { - List ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - if (field.length > 0) { - ret = rjedis.hmget(key, field); + RMap map = redissonClient.getMap(key); + List result = new ArrayList<>(); + for (String f : field) { + result.add(map.get(f)); } + return result; } catch (Exception e) { - log.error("hmread from jedis error. key=" + key + "field=" + field, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hmread from redisson error. key:{} field:{}", key, field, e); } - return ret; + return null; } public Map hgetAll(String key) { - Map ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.hgetAll(key); + RMap map = redissonClient.getMap(key); + return map.readAllMap(); } catch (Exception e) { - log.error("hget from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hgetAll from redisson error. key:{}", key, e); } - return ret; + return null; } public Set hgetAllKeysByKey(String key) { - Set ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.hkeys(key); + RMap map = redissonClient.getMap(key); + return map.readAllKeySet(); } catch (Exception e) { - log.error("hreadAllByKey from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hgetAllKeysByKey from redisson error. key:{}", key, e); } - return ret; + return null; } public Map hgetAllBykey(String key) { - Map ret = null; - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - ret = rjedis.hgetAll(key); + RMap map = redissonClient.getMap(key); + return map.readAllMap(); } catch (Exception e) { - log.error("hreadAllByKey from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hgetAllBykey from redisson error. key:{}", key, e); } - return ret; + return null; } public void hwrite(String key, String field, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hset(key, field, value); + RMap map = redissonClient.getMap(key); + map.put(field, value); } catch (Exception e) { - log.error("hwrite from jedis error. key:{} field:{} value:{}", key, field, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hwrite from redisson error. key:{} field:{} value:{}", key, field, value, e); } } - public void hdelete(String key, String field, String value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hdel(key, field); + RMap map = redissonClient.getMap(key); + map.remove(field); } catch (Exception e) { - log.error("hdelete from jedis error. key:{} field:{} value:{}", key, field, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hdelete from redisson error. key:{} field:{} value:{}", key, field, value, e); } } public void hdel(String key, String field) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hdel(key, field); + RMap map = redissonClient.getMap(key); + map.remove(field); } catch (Exception e) { - log.error("hdel from jedis error. key:{} field:{} value:{}", key, field); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hdel from redisson error. key:{} field:{}", key, field, e); } } public void hdel(String key, String... fields) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hdel(key, fields); - } catch (Exception e) { - log.error("hdel from jedis error. key:{} field:{} value:{}", key, fields); - } finally { - if (wjedis != null) { - wjedis.close(); + RMap map = redissonClient.getMap(key); + for (String field : fields) { + map.remove(field); } + } catch (Exception e) { + log.error("hdel from redisson error. key:{} fields:{}", key, fields, e); } } @@ -595,46 +445,29 @@ public class JedisService { } public Long hincrBy(String key, String field, Long value) { - Jedis wjedis = null; - Long result = null; try { - wjedis = writeJedisPoolManager.getJedis(); - result = wjedis.hincrBy(key, field, value); + RMap map = redissonClient.getMap(key, new JsonJacksonCodec()); + return map.addAndGet(field, value); } catch (Exception e) { - log.error("hincrBy from jedis error. key:{} field:{} value:{}", key, field, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hincrBy from redisson error. key:{} field:{} value:{}", key, field, value, e); } - - return result; + return null; } public void hdeleteKey(String key) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.del(key); + redissonClient.getBucket(key).delete(); } catch (Exception e) { - log.error("delete from jedis error. key:{} field:{} value:{}", key); - if (wjedis != null) { - wjedis.close(); - } + log.error("hdeleteKey from redisson error. key:{}", key, e); } } public void hwrite(String key, Map value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hmset(key, value); + RMap map = redissonClient.getMap(key); + map.putAll(value); } catch (Exception e) { - log.error("hwrite from jedis error. key:{} value:{}", key, value); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hwrite from redisson error. key:{} value:{}", key, value, e); } } @@ -645,108 +478,60 @@ public class JedisService { * @param map * @param saveDate 单位为秒 */ - public void delAndHwriteAndExpire(String key, Map map,int saveDate) { - Jedis wjedis = null; + public void delAndHwriteAndExpire(String key, Map map, int saveDate) { try { - wjedis = this.writeJedisPoolManager.getJedis(); - Pipeline p = wjedis.pipelined(); - p.del(key); - p.hmset(key,map); - p.expire(key,saveDate); - p.sync(); + RMap rmap = redissonClient.getMap(key); + rmap.delete(); + rmap.putAll(map); + rmap.expire(saveDate, TimeUnit.SECONDS); } catch (Exception e) { - log.error("delAndHwriteAndExpire from jedis error. key:{} value:{} member:{} saveDate:{}", key,map,saveDate); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("delAndHwriteAndExpire from redisson error. key:{} value:{} saveDate:{}", key, map, saveDate, e); } } public void disableCache(String key) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.expire(key, 0); + RBucket bucket = redissonClient.getBucket(key); + bucket.expire(0, TimeUnit.SECONDS); } catch (Exception e) { log.error("disableCache error. key:{} msg:{}", key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } } } public void hincrbyfloat(String key, String property, double value) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - wjedis.hincrByFloat(key, property, value); + RMap map = redissonClient.getMap(key, new JsonJacksonCodec()); + map.addAndGet(property, value); } catch (Exception e) { - log.error("hincrbyfloat from jedis error. key:=" + key + "&value=" + value, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("hincrbyfloat from redisson error. key:{} property:{} value:{}", key, property, value, e); } } public Integer ttl(String key) { - // key的剩余生存秒数,永久生存或者不存在的都返回-1 - Jedis conn = null; try { - // 获取连接 - conn = writeJedisPoolManager.getJedis(); - return conn.ttl(key).intValue(); - } catch (JedisException e) { - e.printStackTrace(); - } finally { - if (conn != null) { - conn.close(); - } + RBucket bucket = redissonClient.getBucket(key); + return Math.toIntExact(bucket.remainTimeToLive()); + } catch (Exception e) { + log.error("ttl from redisson error. key:{}", key, e); } return null; } + public String lockWithTimeout(String locaName, long acquireTimeout, long timeout) { + String lockKey = "lock:" + locaName; + String identifier = UUID.randomUUID().toString(); + int lockExpire = (int) (timeout / 1000); - public String lockWithTimeout(String locaName, - long acquireTimeout, long timeout) { - Jedis conn = null; - String retIdentifier = null; - String lockKey = null; try { - // 获取连接 - conn = writeJedisPoolManager.getJedis(); - // 随机生成一个value - String identifier = UUID.randomUUID().toString(); - // 锁名,即key值 - lockKey = "lock:" + locaName; - // 超时时间,上锁后超过此时间则自动释放锁 - int lockExpire = (int) (timeout / 1000); - - // 获取锁的超时时间,超过这个时间则放弃获取锁 - long end = System.currentTimeMillis() + acquireTimeout; - while (System.currentTimeMillis() < end) { - if (conn.setnx(lockKey, identifier) == 1) { - conn.expire(lockKey, lockExpire); - // 返回value值,用于释放锁时间确认 - retIdentifier = identifier; - return retIdentifier; - } - // 返回-1代表key没有设置超时时间,为key设置一个超时时间 - if (conn.ttl(lockKey) == -1) { - conn.expire(lockKey, lockExpire); - } - } - } catch (JedisException e) { - e.printStackTrace(); - } finally { - log.info("lock name: {}", lockKey); - if (conn != null) { - conn.close(); + RLock lock = redissonClient.getLock(lockKey); + boolean acquired = lock.tryLock(acquireTimeout, lockExpire, TimeUnit.SECONDS); + if (acquired) { + return identifier; } + } catch (Exception e) { + log.error("lockWithTimeout error. lockKey:{}", lockKey, e); } - return retIdentifier; + return null; } /** @@ -757,139 +542,89 @@ public class JedisService { * @return */ public boolean releaseLock(String lockName, String identifier) { - Jedis conn = null; String lockKey = "lock:" + lockName; - boolean retFlag = false; try { - conn = writeJedisPoolManager.getJedis(); - while (true) { - // 监视lock,准备开始事务 - conn.watch(lockKey); - // 通过前面返回的value值判断是不是该锁,若是该锁,则删除,释放锁 - if (identifier.equals(conn.get(lockKey))) { - Transaction transaction = conn.multi(); - transaction.del(lockKey); - List results = transaction.exec(); - if (results == null) { - continue; - } - retFlag = true; - } - conn.unwatch(); - break; - } - } catch (JedisException e) { - e.printStackTrace(); - } finally { -// log.info("锁名称:" + lockKey); - if (conn != null) { - conn.close(); + RLock lock = redissonClient.getLock(lockKey); + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + return true; } + } catch (Exception e) { + log.error("releaseLock error. lockKey:{} identifier:{}", lockKey, identifier, e); } - return retFlag; + return false; } public Double zincrby(String key, Double score, String member) { - Jedis wjedis = null; - Double totalScore = Double.valueOf(0); try { - wjedis = this.writeJedisPoolManager.getJedis(); - totalScore = wjedis.zincrby(key, score, member); - } catch (Exception e) { - log.error("zincrby from jedis error. key:{} score:{} member:{}", key, score, member); - } finally { - if (wjedis != null) { - wjedis.close(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Double currentScore = sortedSet.getScore(member); + if (currentScore == null) { + currentScore = 0.0; } + Double newScore = currentScore + score; + sortedSet.add(newScore, member); + return newScore; + } catch (Exception e) { + log.error("zincrby from redisson error. key:{} score:{} member:{}", key, score, member, e); } - - return totalScore; + return null; } public void zadd(String key, Double score, String member) { - Jedis wjedis = null; try { - wjedis = this.writeJedisPoolManager.getJedis(); - wjedis.zadd(key, score, member); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + sortedSet.add(score, member); } catch (Exception e) { - log.error("zincrby from jedis error. key:{} score:{} member:{}", key, score, member); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("zadd from redisson error. key:{} score:{} member:{}", key, score, member, e); } } public Long zrem(String key, String member) { - Jedis wjedis = null; - Long amount = 0L; try { - wjedis = this.writeJedisPoolManager.getJedis(); - amount = wjedis.zrem(key, member); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return sortedSet.remove(member) ? 1L : 0L; } catch (Exception e) { - log.error("zrem from jedis error. key:{} , member:{}", key, member); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("zrem from redisson error. key:{} member:{}", key, member, e); } - return amount; + return 0L; } public Long zremrangeByScore(String key, double start, double end) { - Jedis wjedis = null; - Long amount = 0L; try { - wjedis = this.writeJedisPoolManager.getJedis(); - amount = wjedis.zremrangeByScore(key, start, end); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Collection values = sortedSet.valueRange(start, true, end, true); + return sortedSet.removeAll(values) ? (long) values.size() : 0L; } catch (Exception e) { - log.error("zremrangeByScore from jedis error. key:{} , start:{} , end:{}", key, start, end); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("zremrangeByScore from redisson error. key:{} start:{} end:{}", key, start, end, e); } - return amount; + return 0L; } public Set> zrevrange(String key, Long begin, Long end) { - Jedis rjedis = null; - Set> set = Sets.newLinkedHashSet(); try { - rjedis = this.readJedisPoolManager.getJedis(); - Set tuples = rjedis.zrevrangeWithScores(key, begin, end); - for (Tuple tuple : tuples) { + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Collection> entries = sortedSet.entryRangeReversed(begin.intValue(), end.intValue()); + return entries.stream().map(entry -> { Map map = Maps.newHashMap(); - map.put("member", tuple.getElement()); - map.put("score", tuple.getScore()); - set.add(map); - } + map.put("member", entry.getValue()); + map.put("score", entry.getScore()); + return map; + }).collect(Collectors.toCollection(LinkedHashSet::new)); } catch (Exception e) { - log.error("zrevrange from redis error. key:{}, begin:{}, end:{}", key, begin, end, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrevrange from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } - - return set; + return Sets.newLinkedHashSet(); } public Set zrevrangeVals(String key, Long begin, Long end) { - Jedis rjedis = null; - Set set =null; try { - rjedis = this.readJedisPoolManager.getJedis(); - set = rjedis.zrevrange(key, begin, end); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return new LinkedHashSet<>(sortedSet.valueRangeReversed(begin.intValue(), end.intValue())); } catch (Exception e) { - log.error("zrevrange from redis error. key:{}, begin:{}, end:{}", key, begin, end, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrevrangeVals from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } - - return set; + return null; } /** @@ -901,26 +636,19 @@ public class JedisService { * @return */ public Set> zrange(String key, Integer begin, Integer end) { - Jedis rjedis = null; - Set> set = Sets.newLinkedHashSet(); try { - rjedis = this.readJedisPoolManager.getJedis(); - Set tuples = rjedis.zrangeWithScores(key, begin, end); - for (Tuple tuple : tuples) { + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Collection> entries = sortedSet.entryRange(begin, end); + return entries.stream().map(entry -> { Map map = Maps.newHashMap(); - map.put("member", tuple.getElement()); - map.put("score", tuple.getScore()); - set.add(map); - } + map.put("member", entry.getValue()); + map.put("score", entry.getScore()); + return map; + }).collect(Collectors.toCollection(LinkedHashSet::new)); } catch (Exception e) { - log.error("zrange from redis error. key:{}, begin:{}, end:{}", key, begin, end, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrange from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } - - return set; + return Sets.newLinkedHashSet(); } /** @@ -931,20 +659,14 @@ public class JedisService { * @return */ public Long zrank(String key, String member) { - Jedis rjedis = null; - Long ranking = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - ranking = rjedis.zrank(key, member); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Integer rank = sortedSet.rank(member); + return rank != null ? rank.longValue() : null; } catch (Exception e) { - log.error("zrank from redis error. key:{}, member:{}", key, member, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrank from redisson error. key:{} member:{}", key, member, e); } - - return ranking; + return null; } /** @@ -955,20 +677,14 @@ public class JedisService { * @return */ public Long zrevrank(String key, String member) { - Jedis rjedis = null; - Long ranking = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - ranking = rjedis.zrevrank(key, member); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Integer rank = sortedSet.revRank(member); + return rank != null ? rank.longValue() : null; } catch (Exception e) { - log.error("zrevrank from redis error. key:{}, member:{}", key, member, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrevrank from redisson error. key:{} member:{}", key, member, e); } - - return ranking; + return null; } /** @@ -979,20 +695,13 @@ public class JedisService { * @return */ public Double zscore(String key, String member) { - Jedis rjedis = null; - Double ranking = Double.valueOf(0); try { - rjedis = this.readJedisPoolManager.getJedis(); - ranking = rjedis.zscore(key, member); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return sortedSet.getScore(member); } catch (Exception e) { - log.error("zrevrank from redis error. key:{}, member:{}", key, member, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zscore from redisson error. key:{} member:{}", key, member, e); } - - return ranking; + return null; } /** @@ -1003,43 +712,33 @@ public class JedisService { * @return */ public List zmscore(String key, String... members) { - Jedis rjedis = null; - List ranking = new ArrayList<>(); try { - rjedis = this.readJedisPoolManager.getJedis(); - ranking = rjedis.zmscore(key, members); - } catch (Exception e) { - log.error("zmscore from redis error. key:{}, members:{}", key, members, e); - } finally { - if (rjedis != null) { - rjedis.close(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + List scores = new ArrayList<>(); + for (String member : members) { + scores.add(sortedSet.getScore(member)); } + return scores; + } catch (Exception e) { + log.error("zmscore from redisson error. key:{} members:{}", key, members, e); } - - return ranking; + return new ArrayList<>(); } /** - * 获取sorted set中成员score + * 获取sorted set中成员数量 * * @param key * @return */ public Long zcard(String key) { - Jedis rjedis = null; - Long size = 0L; try { - rjedis = this.readJedisPoolManager.getJedis(); - size = rjedis.zcard(key); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return (long) sortedSet.size(); } catch (Exception e) { - log.error("zcard from redis error. key:{}, member:{}", key, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zcard from redisson error. key:{}", key, e); } - - return size; + return 0L; } /** @@ -1050,21 +749,12 @@ public class JedisService { * @return */ public Boolean expire(String key, Integer seconds) { - Jedis wjedis = null; - Long size = 0L; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Long result = wjedis.expire(key, seconds); - - return result == 1 ? true : false; + RBucket bucket = redissonClient.getBucket(key); + return bucket.expire(seconds, TimeUnit.SECONDS); } catch (Exception e) { - log.error("expire from redis error. key:{}, member:{}", key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("expire from redisson error. key:{} seconds:{}", key, seconds, e); } - return false; } @@ -1072,25 +762,16 @@ public class JedisService { * 设置key过期时间 * * @param key - * @param seconds 到期时间 + * @param seconds 到期时间戳 * @return */ public Boolean expireAt(String key, Long seconds) { - Jedis wjedis = null; - Long size = 0L; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Long result = wjedis.expireAt(key, seconds); - - return result == 1 ? true : false; + RBucket bucket = redissonClient.getBucket(key); + return bucket.expireAt(new Date(seconds * 1000)); } catch (Exception e) { - log.error("expire from redis error. key:{}, member:{}", key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("expireAt from redisson error. key:{} seconds:{}", key, seconds, e); } - return false; } @@ -1098,25 +779,16 @@ public class JedisService { * 设置key过期时间 * * @param key - * @param millis 到期时间 + * @param millis 到期时间戳(毫秒) * @return */ public Boolean pexpireAt(String key, Long millis) { - Jedis wjedis = null; - Long size = 0L; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Long result = wjedis.pexpireAt(key, millis); - - return result == 1 ? true : false; + RBucket bucket = redissonClient.getBucket(key); + return bucket.expireAt(new Date(millis)); } catch (Exception e) { - log.error("expire from redis error. key:{}, member:{}", key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("pexpireAt from redisson error. key:{} millis:{}", key, millis, e); } - return false; } @@ -1129,22 +801,15 @@ public class JedisService { * @return */ public Set zrangeMembers(String key, Integer begin, Integer end) { - Jedis rjedis = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - Set sets = rjedis.zrange(key, begin, end); - return sets; + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return new LinkedHashSet<>(sortedSet.valueRange(begin, end)); } catch (Exception e) { - log.error("zrange from redis error. key:{}, begin:{}, end:{}", key, begin, end, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrangeMembers from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } return null; } - /** * 添加sorted数据 同时限制大小 * @@ -1154,19 +819,16 @@ public class JedisService { * @param limitSize */ public void zaddLimit(String key, double score, String member, int limitSize) { - Jedis rjedis = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - Pipeline p = rjedis.pipelined(); - p.zadd(key, score, member); - p.zremrangeByRank(key, limitSize, -1); - p.sync(); - } catch (Exception e) { - log.error("zaddLimit from redis error. key:{},e{}", e); - } finally { - if (rjedis != null) { - rjedis.close(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + sortedSet.add(score, member); + // 限制大小 + while (sortedSet.size() > limitSize) { + // 删除最小的元素 + sortedSet.pollFirst(); } + } catch (Exception e) { + log.error("zaddLimit from redisson error. key:{} score:{} member:{} limitSize:{}", key, score, member, limitSize, e); } } @@ -1178,19 +840,16 @@ public class JedisService { * @param limitSize */ public void zaddLimit(String key, Map map, int limitSize) { - Jedis rjedis = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - Pipeline p = rjedis.pipelined(); - p.zadd(key, map); - p.zremrangeByRank(key, limitSize, -1); - p.sync(); - } catch (Exception e) { - log.error("zaddLimit from redis error. key:{},e{}", e); - } finally { - if (rjedis != null) { - rjedis.close(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + map.forEach((member, score) -> sortedSet.add(score, member)); + // 限制大小 + while (sortedSet.size() > limitSize) { + // 删除最小的元素 + sortedSet.pollFirst(); } + } catch (Exception e) { + log.error("zaddLimit from redisson error. key:{} map:{} limitSize:{}", key, map, limitSize, e); } } @@ -1198,189 +857,101 @@ public class JedisService { * zset 添加多条数据 */ public void zadd(String key, Map map, boolean clean) { - Jedis wjedis = null; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Pipeline p = wjedis.pipelined(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); if (clean) { - p.zremrangeByRank(key, 0, -1); + sortedSet.clear(); } - p.zadd(key, map); - p.sync(); + map.forEach((member, score) -> sortedSet.add(score, member)); } catch (Exception e) { - log.error("zincrby from jedis error. key:{} score:{} member:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("zadd from redisson error. key:{} map:{}", key, map, e); } } - /** * 通过redis的Pipeline 批量添加list数据 */ public boolean lpushList(String key, List list) { - Jedis wjedis = null; - boolean status = false; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Pipeline p = wjedis.pipelined(); - if (list != null && !list.isEmpty()) { - for (Object el : list) { - p.lpush(key, String.valueOf(el)); - } + RList rlist = redissonClient.getList(key); + for (int i = list.size() - 1; i >= 0; i--) { + rlist.add(0, list.get(i)); } - p.sync(); - status = true; - return status; + return true; } catch (Exception e) { - log.error("lpushList from jedis error. key:{} list:{}", key, list); - return status; - } finally { - if (wjedis != null) { - wjedis.close(); - } - + log.error("lpushList from redisson error. key:{} list:{}", key, list, e); } + return false; } /** * 通过redis的Pipeline 批量添加list数据 */ public boolean rpushList(String key, List list) { - Jedis wjedis = null; - boolean status = false; try { - wjedis = this.writeJedisPoolManager.getJedis(); - Pipeline p = wjedis.pipelined(); - if (list != null && !list.isEmpty()) { - for (Object el : list) { - p.rpush(key, String.valueOf(el)); - } - } - p.sync(); - status = true; - return status; + RList rlist = redissonClient.getList(key); + rlist.addAll(list); + return true; } catch (Exception e) { - log.error("rpushList from jedis error. key:{} list:{}", key, list); - return status; - } finally { - if (wjedis != null) { - wjedis.close(); - } - + log.error("rpushList from redisson error. key:{} list:{}", key, list, e); } + return false; } /** * 通过redis的Pipeline 批量添加Set数据 */ public boolean saddSet(String key, List list) { - Jedis wjedis = null; - boolean status = false; try { - wjedis = this.writeJedisPoolManager.getJedis(); - if (list != null && !list.isEmpty()) { - // 去重 - Set set = new HashSet<>(list); - Pipeline p = wjedis.pipelined(); - for (Object el : set) { - p.sadd(key, String.valueOf(el)); - } - p.sync(); - } - status = true; - return status; + RSet set = redissonClient.getSet(key); + // 去重 + Set uniqueList = new HashSet<>(list); + set.addAll(uniqueList); + return true; } catch (Exception e) { - log.error("lpushList from jedis error. key:{} list:{}", key, list); - return status; - } finally { - if (wjedis != null) { - wjedis.close(); - } - + log.error("saddSet from redisson error. key:{} list:{}", key, list, e); } + return false; } + /** * 返回指定权重区间的元素集合 * * @param key * @param min 上限权重 - * @param max 下限权重z + * @param max 下限权重 * @return Set */ public Set zrangeByScore(String key, String min, String max) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - Set set = rjedis.zrangeByScore(key, min, max); - return set; + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return new LinkedHashSet<>(sortedSet.valueRange(Double.parseDouble(min), true, Double.parseDouble(max), true)); } catch (Exception e) { - log.error("zrangeByScore from jedis error. key:{} min:{} max:{}", key, min, max); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("zrangeByScore from redisson error. key:{} min:{} max:{}", key, min, max, e); } return null; } public Set zrangeByScore(String key, double min, double max) { - Jedis rjedis = null; try { - rjedis = this.readJedisPoolManager.getJedis(); - Set set = rjedis.zrangeByScore(key, min, max); - Set var8 = set; - return var8; - } catch (Exception var12) { - log.error("zrangeByScore from jedis error. key:{} min:{} max:{}", new Object[]{key, min, max}); - } finally { - if (rjedis != null) { - rjedis.close(); - } + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + return new LinkedHashSet<>(sortedSet.valueRange(min, true, max, true)); + } catch (Exception e) { + log.error("zrangeByScore from redisson error. key:{} min:{} max:{}", key, min, max, e); } return null; } - public Set smembers(String key) { - Jedis rjedis = null; - Set result = null; try { - rjedis = readJedisPoolManager.getJedis(); - result = rjedis.smembers(key); - return result; + RSet set = redissonClient.getSet(key); + return set.readAll(); } catch (Exception e) { - log.error("llen from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("smembers from redisson error. key:{}", key, e); } return null; } - /** - * 执行脚本 - */ - public Object eval(String script, int keyCount, String... params) { - Jedis wjedis = null; - Object result = null; - try { - wjedis = this.writeJedisPoolManager.getJedis(); - result = wjedis.eval(script, keyCount, params); - } catch (Exception e) { - log.error("eval from jedis error params:{},e:{}", params,e); - } finally { - if (wjedis != null) { - wjedis.close(); - } - - } - return result; - } - /** * 确定一个给定的值是否存在 * @@ -1389,17 +960,11 @@ public class JedisService { * @return */ public boolean sismember(String key, String member) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - boolean s = rjedis.sismember(key, member); - return s; + RSet set = redissonClient.getSet(key); + return set.contains(member); } catch (Exception e) { - log.error("sismember from jedis error. key:{} member:{}", key, member); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("sismember from redisson error. key:{} member:{}", key, member, e); } return false; } @@ -1412,18 +977,14 @@ public class JedisService { * @return */ public long sadd(String key, String member) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.sadd(key, member); + RSet set = redissonClient.getSet(key); + boolean added = set.add(member); + return added ? 1L : 0L; } catch (Exception e) { - log.error("sadd from jedis error. key:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("sadd from redisson error. key:{} member:{}", key, member, e); } - return 0; + return 0L; } /** @@ -1433,16 +994,10 @@ public class JedisService { * @return */ public Boolean exits(String key) { - Jedis wjedis = null; try { - wjedis = this.writeJedisPoolManager.getJedis(); - return wjedis.exists(key); + return redissonClient.getBucket(key).isExists(); } catch (Exception e) { - log.error("expire from redis error. key:{}, member:{}", key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("exits from redisson error. key:{}", key, e); } return false; } @@ -1455,16 +1010,12 @@ public class JedisService { * @return */ public Long srem(String key, String member) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.srem(key, member); + RSet set = redissonClient.getSet(key); + boolean removed = set.remove(member); + return removed ? 1L : 0L; } catch (Exception e) { - log.error("srem from jedis error. key:{}", key); - } finally { - if (wjedis != null) { - wjedis.close(); - } + log.error("srem from redisson error. key:{} member:{}", key, member, e); } return 0L; } @@ -1474,68 +1025,11 @@ public class JedisService { * @param key */ public void batchRemove(String key) { - Jedis wjedis = null; - try { - wjedis = writeJedisPoolManager.getJedis(); - Set set = wjedis.keys(key + "*"); - Iterator it = set.iterator(); - while (it.hasNext()) { - String keyStr = it.next(); - System.out.println(keyStr); - wjedis.del(keyStr); - } - } catch (Exception e) { - log.error("batchRemove error. key:{} msg:{}", key, e); - throw new ServiceException("Failed to batchRemove key " + key, e); - } finally { - if (wjedis != null) { - wjedis.close(); - } - } - } - - /** - * 执行lua脚本 - * - * @param scriptSha - * @param keys - * @param args - * @return - */ - public Object evalsha(String scriptSha, List keys, List args) { - Jedis wjedis = null; - try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.evalsha(scriptSha, keys, args); - } catch (Exception e) { - log.error("evalScript fail.", e); - } finally { - if (wjedis != null) { - wjedis.close(); - } - } - return null; - } - - /** - * 加载lua脚本 - * - * @param script - * @return - */ - public String scriptLoad(String script) { - Jedis wjedis = null; - try { - wjedis = writeJedisPoolManager.getJedis(); - return wjedis.scriptLoad(script); - } catch (Exception e) { - log.error("scriptLoad fail.", e); - } finally { - if (wjedis != null) { - wjedis.close(); - } - } - return null; + RKeys rKeys = redissonClient.getKeys(); + Iterable keys = rKeys.getKeysByPattern(key + "*"); + List keyList = new ArrayList<>(); + keys.forEach(keyList::add); + rKeys.delete(keyList.toArray(new String[0])); } /** @@ -1545,85 +1039,40 @@ public class JedisService { * @param jsonObject */ public void hsetBatch(String key, JSONObject jsonObject) { - Jedis wjedis = null; try { - wjedis = writeJedisPoolManager.getJedis(); - Pipeline pipeline = wjedis.pipelined(); - jsonObject.forEach((itemKey, itemValue) -> - { - pipeline.hset(key, itemKey, JSONObject.toJSONString(itemValue)); + RMap map = redissonClient.getMap(key); + Map batchMap = new HashMap<>(); + jsonObject.forEach((itemKey, itemValue) -> { + batchMap.put(itemKey, JSONObject.toJSONString(itemValue)); }); - pipeline.sync(); - pipeline.close(); + map.putAll(batchMap); } catch (Exception e) { log.error("hsetBatch fail.", e); - } finally { - if (wjedis != null) { - wjedis.close(); - } } } public Long hlen(String key) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - return rjedis.hlen(key); + RMap map = redissonClient.getMap(key); + return (long) map.size(); } catch (Exception e) { - log.error("hlen from jedis error. key:{}", key); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("hlen from redisson error. key:{}", key, e); } return null; } - /** - * 批量获取 - */ - public List hgetBatch(List voList) { - Jedis rjedis = null; - try { - rjedis = readJedisPoolManager.getJedis(); - Pipeline pipeline = rjedis.pipelined(); - voList.stream().filter(vo -> vo.getField() != null) - .forEach(vo -> { - Response hget = pipeline.hget(vo.getKey(), vo.getField()); - vo.setResponse(hget); - }); - pipeline.sync(); - pipeline.close(); - voList.forEach(vo -> - vo.setValue(Optional.ofNullable(vo.getResponse()).map(resp -> resp.get()).orElse(null)) - ); - return voList; - } catch (Exception e) { - log.error("hgetBatch from jedis error", e); - } finally { - if (rjedis != null) { - rjedis.close(); - } - } - return voList; - } - /** * @description 随机获取一个元素 * @author qiudonglin * @date 2020/3/19/0019 */ public List srandmember(String key, int count) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - return rjedis.srandmember(key, count); + RSet set = redissonClient.getSet(key); + Collection result = set.random(count); + return new ArrayList<>(result); } catch (Exception e) { - log.error("srandmember from jedis error. ", e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("srandmember from redisson error.", e); } return null; } @@ -1635,65 +1084,36 @@ public class JedisService { * @return */ public Set spop(String key, int count) { - Jedis rjedis = null; try { - rjedis = readJedisPoolManager.getJedis(); - return rjedis.spop(key, count); - } catch (Exception e) { - log.error("spop from jedis error. ", e); - } finally { - if (rjedis != null) { - rjedis.close(); + RSet set = redissonClient.getSet(key); + Set result = new HashSet<>(); + for (int i = 0; i < Math.min(count, set.size()); i++) { + String element = set.removeRandom(); + if (element != null) { + result.add(element); + } } + return result; + } catch (Exception e) { + log.error("spop from redisson error.", e); } return null; } - /** - * 在管道执行 - * - * @param consumer - * @throws IOException - */ - public void doInPipeline(Consumer consumer) throws IOException { - final Jedis jedis = writeJedisPoolManager.getJedis(); - final Pipeline pipeline = jedis.pipelined(); - try { - consumer.accept(pipeline); - pipeline.sync(); - } finally { - if (jedis != null) { - jedis.close(); - } - } - } - public Set> zrevrangeWithScore(String key, Long begin, Long end) { - Jedis rjedis = null; - LinkedHashSet set = Sets.newLinkedHashSet(); - try { - rjedis = this.readJedisPoolManager.getJedis(); - Set tuples = rjedis.zrevrangeWithScores(key, begin, end); - Iterator var7 = tuples.iterator(); - - while(var7.hasNext()) { - Tuple tuple = (Tuple)var7.next(); + RScoredSortedSet sortedSet = redissonClient.getScoredSortedSet(key); + Collection> entries = sortedSet.entryRangeReversed(begin.intValue(), end.intValue()); + return entries.stream().map(entry -> { Map map = Maps.newHashMap(); - map.put("member", tuple.getElement()); - map.put("score", tuple.getScore()); - set.add(map); - } - } catch (Exception var13) { - log.error("zrevrange from redis error. key:{}, begin:{}, end:{}", new Object[]{key, begin, end, var13}); - } finally { - if (rjedis != null) { - rjedis.close(); - } - + map.put("member", entry.getValue()); + map.put("score", entry.getScore()); + return map; + }).collect(Collectors.toCollection(LinkedHashSet::new)); + } catch (Exception e) { + log.error("zrevrangeWithScore from redisson error. key:{} begin:{} end:{}", key, begin, end, e); } - - return set; + return Sets.newLinkedHashSet(); } /** @@ -1703,20 +1123,13 @@ public class JedisService { * @return */ public Long scard(String key) { - Jedis rjedis = null; - Long size = 0L; try { - rjedis = this.readJedisPoolManager.getJedis(); - size = rjedis.scard(key); + RSet set = redissonClient.getSet(key); + return (long) set.size(); } catch (Exception e) { - log.error("scard from redis error. key:{}, member:{}", key, e); - } finally { - if (rjedis != null) { - rjedis.close(); - } + log.error("scard from redisson error. key:{}", key, e); } - - return size; + return 0L; } /** @@ -1746,59 +1159,21 @@ public class JedisService { * @return 锁值 */ public String lock(String lockKey, int waitTime, int timeout) { - Jedis jedis = null; - try { - jedis = writeJedisPoolManager.getJedis(); - return lock(jedis, lockKey, waitTime, timeout); - } catch (Exception e) { - log.error("lock error", e); - } finally { - if (jedis != null) { - jedis.close(); - } - } - return null; - } - - /** - * 获取分布式锁 - * @param jedis jedis连接 - * @param lockKey 锁的key - * @param waitTime 等待时间(单位ms) - * @param timeout 超时时间(单位s) - * @return 锁值 - */ - public String lock(Jedis jedis, String lockKey, int waitTime, int timeout) { - // 校验超时时间timeout单位为秒 - if (timeout > 1000) { - timeout /= 1000; - } - long start = System.currentTimeMillis(); String result = null; - int retryTime = waitTime; + long lockValue = System.nanoTime(); + String identifier = String.valueOf(lockValue); try { - long lockValue; - while (retryTime > 0) { - lockValue = System.nanoTime(); - if (jedis.setnx(lockKey, String.valueOf(lockValue)) == 1) { - result = lockValue + ""; - return result; - } - retryTime -= 200; - Thread.sleep(200); + RLock lock = redissonClient.getLock(lockKey); + boolean acquired = lock.tryLock(waitTime, timeout, TimeUnit.SECONDS); + if (acquired) { + result = identifier; } } catch (Exception e) { - log.error("lock error, lockKey:"+lockKey+", waitTime:"+waitTime+", timeout:"+timeout, e); - } finally { - try { - jedis.expire(lockKey, timeout); - } catch (Exception e) { - log.error("设置超时时间失败[key={},timeout={}]", lockKey, timeout, e); - } - log.info("获取redis分布式锁结束,key:{}, waitTime:{}s, timeout:{}s, 耗时:{}ms, lockVal:{}, 结果:{}", lockKey, waitTime, - timeout, (System.currentTimeMillis() - start), result, (null == result ? "失败" : "成功")); + log.error("lock error, lockKey:{} waitTime:{} timeout:{}", lockKey, waitTime, timeout, e); } - return null; + log.info("获取redis分布式锁结束,key:{}, waitTime:{}ms, timeout:{}s, lockVal:{}, 结果:{}", + lockKey, waitTime, timeout, result, (null == result ? "失败" : "成功")); + return result; } /** @@ -1807,33 +1182,16 @@ public class JedisService { * @param lockVal 锁的值 */ public void unlock(String lockKey, String lockVal) { - Jedis jedis = null; try { - jedis = writeJedisPoolManager.getJedis(); - unlock(jedis, lockKey, lockVal); - } catch (Exception e) { - log.error("unlock error, lockKey:" + lockKey + ", lockVal:" + lockVal, e); - } finally { - if (jedis != null) { - jedis.close(); + RLock lock = redissonClient.getLock(lockKey); + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + log.info("解除redis分布式锁完成,key:{}, lockVal:{}, 解除结果:成功", lockKey, lockVal); + } else { + log.info("解除redis分布式锁失败,lockVal不正确的,key:{}, lockVal:{}", lockKey, lockVal); } - } - } - - /** - * 释放分布式锁 - * @param jedis jedis连接 - * @param lockKey 锁的key - * @param lockVal 锁的值 - */ - public void unlock(Jedis jedis, String lockKey, String lockVal) { - String currLockVal = jedis.get(lockKey); - if (currLockVal != null && currLockVal.equals(lockVal)) { - Long result = jedis.del(lockKey); - log.info("解除redis分布式锁完成,key:{}, lockVal:{}, 解除结果:{}", lockKey, lockVal, - (null == result || result <= 0) ? "失败,key不存在,未获得锁或锁已过期" : "成功"); - } else { - log.info("解除redis分布式锁失败,lockVal不正确的,key:{}, lockVal:{}", lockKey, lockVal); + } catch (Exception e) { + log.error("unlock error, lockKey:{} lockVal:{}", lockKey, lockVal, e); } } @@ -1844,25 +1202,12 @@ public class JedisService { * @return 是否存在 */ public boolean isExist(String lockKey, int timeout) { - Jedis jedis = null; try { - jedis = writeJedisPoolManager.getJedis(); - long lockValue = System.nanoTime(); - if (jedis.setnx(lockKey, String.valueOf(lockValue)) == 1) { - return true; - } + RLock lock = redissonClient.getLock(lockKey); + return lock.tryLock(0, timeout, TimeUnit.SECONDS); } catch (Exception e) { - log.error("lock error", e); - } finally { - try { - jedis.expire(lockKey, timeout); - } catch (Exception e) { - log.error("设置超时时间失败[key={},timeout={}]", lockKey, timeout, e); - } - if (jedis != null) { - jedis.close(); - } + log.error("isExist error", e); } return false; } -} +} \ No newline at end of file diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/vo/RedisHashVo.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/vo/RedisHashVo.java deleted file mode 100644 index 7782203a2..000000000 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/vo/RedisHashVo.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.accompany.core.vo; - -import redis.clients.jedis.Response; - -/** - * @author qiudonglin - * @description redis hash数据结构 - * @date 2020/3/4/0004 - */ -public class RedisHashVo { - - private String key; - private String field; - private String value; - private Response response; - - public RedisHashVo() { - } - - public RedisHashVo(String key, String field) { - this.key = key; - this.field = field; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public Response getResponse() { - return response; - } - - public void setResponse(Response response) { - this.response = response; - } -} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/account/AccountBlockService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/account/AccountBlockService.java index 035178f7a..760302fbe 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/account/AccountBlockService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/account/AccountBlockService.java @@ -270,13 +270,9 @@ public class AccountBlockService extends ServiceImpl blockList) throws Exception { - jedisService.doInPipeline((pipeline) -> { - blockList.stream().forEach(accountBlock -> { - pipeline.hset(RedisKey.block_account.getKey(accountBlock.getBlockType().toString()), - accountBlock.getBlockValue(), gson.toJson(accountBlock)); - }); - }); + public void saveBlockedAccountCache(List blockList) { + blockList.forEach(accountBlock -> jedisService.hset(RedisKey.block_account.getKey(accountBlock.getBlockType().toString()), + accountBlock.getBlockValue(), gson.toJson(accountBlock))); } /** @@ -284,13 +280,9 @@ public class AccountBlockService extends ServiceImpl blockList) throws Exception { - jedisService.doInPipeline((pipeline) -> { - blockList.stream().forEach(accountBlock -> { - pipeline.hdel(RedisKey.block_account.getKey(accountBlock.getBlockType().toString()), - accountBlock.getBlockValue()); - }); - }); + public void deleteBlockedAccountCache(List blockList) { + blockList.forEach(accountBlock -> jedisService.hdel(RedisKey.block_account.getKey(accountBlock.getBlockType().toString()), + accountBlock.getBlockValue())); } public List batchQueryAccountBlock(List erbanNos) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/activity/ActivityPackService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/activity/ActivityPackService.java index 2251176d7..5561fd07b 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/activity/ActivityPackService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/activity/ActivityPackService.java @@ -52,7 +52,7 @@ import java.util.stream.Collectors; */ @Slf4j @Service -public class ActivityPackService implements InitializingBean, BeanSelfAware { +public class ActivityPackService { private static final String HASH_TAG = "{pack_stock}"; @@ -73,14 +73,9 @@ public class ActivityPackService implements InitializingBean, BeanSelfAware { private UsersService usersService; @Autowired private ActivityAwardMapper activityAwardMapper; - @Autowired - private BillRecordService billRecordService; private ActivityPackService self; - private static String buyPackScriptSha; - private static String reduceSaleScriptSha; - private Gson gson = new Gson(); /** @@ -228,9 +223,6 @@ public class ActivityPackService implements InitializingBean, BeanSelfAware { if (totalPriceD.compareTo(purse.getDiamonds()) > 0) { throw new ServiceException(BusiStatus.PURSEMONEYNOTENOUGH); } - List keys = Lists.newArrayList(getSalesKey(date), getUserBuyNumKey(date, uid)); - List args = Lists.newArrayList(String.valueOf(packId), String.valueOf(packNum), String.valueOf(stock), String.valueOf(allowBuyNum)); - deductStock(keys, args); try { //记录账单 BillObjTypeEnum objTypeEnum = getBillObjTypeByPackType(packType); @@ -242,8 +234,6 @@ public class ActivityPackService implements InitializingBean, BeanSelfAware { sendPackMessage2MQ(uid, totalPrice, packId, packName, packNum, sellingPrice, ticketNum, packType); } catch (ServiceException e) { log.error("购买礼包异常", e); - //失败则减少当天的销售量 - self.backStock(keys, args); throw e; } return ticketNum * packNum; @@ -290,29 +280,6 @@ public class ActivityPackService implements InitializingBean, BeanSelfAware { return RedisKey.pack_user_buy_num.getKey(uid + "_" + DateTimeUtil.convertDate(date, DateTimeUtil.DEFAULT_DATE_PATTERN_) + HASH_TAG); } - private void deductStock(List keys, List args) { - Object res = jedisService.evalsha(buyPackScriptSha, keys, args); - if (res == null) { - log.error("exec lua fail. keys:{}, args:{}", keys, args); - throw new ServiceException(BusiStatus.SERVERERROR); - } - int resCode = Integer.parseInt(res.toString()); - switch (resCode) { - case 0: - //成功 - break; - case 1: - throw new ServiceException(BusiStatus.PACK_UNDER_STOCK); - case 2: - throw new ServiceException(BusiStatus.PACK_REACH_BUY_LIMIT); - } - } - - @Async - public void backStock(List keys, List args) { - jedisService.evalsha(reduceSaleScriptSha, keys, args); - } - private void sendPackMessage2MQ(long uid, long totalPrice, int packId, String packName, int packNum, long packPrice, Integer ticketNum, Byte packType) { ActivityPackMessage message = new ActivityPackMessage(); @@ -379,28 +346,6 @@ public class ActivityPackService implements InitializingBean, BeanSelfAware { ); } - @Override - public void afterPropertiesSet() throws Exception { - //TODO 待优化 - ClassLoader classLoader = this.getClass().getClassLoader(); - try (Reader buyPackReader = new InputStreamReader(classLoader.getResourceAsStream("lua/activity/deductStock.lua")); - Reader reduceSalesReader = new InputStreamReader(classLoader.getResourceAsStream("lua/activity/backStock.lua"))) { - - String buyPackScript = CharStreams.toString(buyPackReader); - buyPackScriptSha = jedisService.scriptLoad(buyPackScript); - Assert.notNull(buyPackScriptSha, "buyPackScriptSha is null"); - - String reduceSaleScript = CharStreams.toString(reduceSalesReader); - reduceSaleScriptSha = jedisService.scriptLoad(reduceSaleScript); - Assert.notNull(reduceSaleScriptSha, "reduceSaleScriptSha is null"); - } - } - - @Override - public void setBeanSelf(Object self) { - this.self = (ActivityPackService) self; - } - /** * 根据礼包类型查询礼包 * diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/community/DynamicSquareService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/community/DynamicSquareService.java index a8b2430ee..1dc357864 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/community/DynamicSquareService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/community/DynamicSquareService.java @@ -728,17 +728,14 @@ public class DynamicSquareService extends CommunityBaseService { if (CollectionUtils.isEmpty(rsIdList)) return rsIdList; - int size = rsIdList.size(); - jedisService.doInPipeline(pipeline -> { - int num = 0; - for (int i = 0; i < size; i++) { - num++; - pipeline.zadd(RedisKey.dynamic_square_recently.getKey(), Double.valueOf(num), String.valueOf(rsIdList.get(i))); - } - //每5分钟刷新一次 - pipeline.expire(RedisKey.dynamic_square_recently.getKey(), 5 * 60); - }); + int num = 1; + for (Long id : rsIdList){ + jedisService.zadd(RedisKey.dynamic_square_recently.getKey(), Double.valueOf(num++), String.valueOf(id)); + } + jedisService.expire(RedisKey.dynamic_square_recently.getKey(), 5 * 60); logger.info("广场动态写入redis完成{}", rsIdList.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA))); + + }catch (Exception e){ log.error("广场动态缓存处理异常", e); throw new ServiceException(BusiStatus.SQUARE_DYNAMIC_CACHE_PROCESSING_EXCEPTION); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/linearlypool/LinearlyPrizePoolService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/linearlypool/LinearlyPrizePoolService.java index 18871cb4b..463f781a5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/linearlypool/LinearlyPrizePoolService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/linearlypool/LinearlyPrizePoolService.java @@ -42,6 +42,7 @@ import com.accompany.core.service.message.MessageRobotPushService; import com.accompany.core.util.DateUtil; import com.accompany.core.vo.UserLevelVo; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -233,12 +234,7 @@ public class LinearlyPrizePoolService { initCurrentLineIdIfNecessary(lineId); // 按奖品线id分组保存到缓存中 String cachKey = RedisKey.linearly_pool_draw_line.getKey(lineId.toString()); - jedisService.doInPipeline((pipeline) -> - poolLine.forEach(item -> { - pipeline.rpush(cachKey, JSONObject.toJSONString(item)); - }) - - ); + jedisService.rpushList(cachKey, poolLine.stream().map(JSON::toJSONString).toList()); jedisService.hset(RedisKey.linearly_pool_stat.getKey(), CACHE_FIELD_MAX_LINE_ID, lineId.toString()); jedisService.zadd(RedisKey.linearly_pool_line_id_list.getKey(), lineId.doubleValue(), lineId.toString()); saveDataStopWatch.stop(); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/nameplate/UserNameplateService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/nameplate/UserNameplateService.java index a379dada9..8af421b04 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/nameplate/UserNameplateService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/nameplate/UserNameplateService.java @@ -67,6 +67,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j @@ -243,30 +244,13 @@ public class UserNameplateService extends BaseService { return vo; } - public Map getBatchUserUsingNameplateVo(List uids) throws Exception { - Map userNameplateMap = Maps.newHashMap(); - Map> userNameplateMapStr = Maps.newHashMap(); - jedisService.doInPipeline((pipeline) -> { - uids.forEach(uid -> { - Response response = pipeline.hget(RedisKey.user_using_nameplate.getKey(), uid); - userNameplateMapStr.put(Long.valueOf(uid), response); - }); - }); - userNameplateMapStr.entrySet().forEach(entry -> { - Long key = entry.getKey(); - Response response = entry.getValue(); - if (ApplicationConstant.NULL_JSON_OBJECT.equalsIgnoreCase(response.get()) || StringUtils.isEmpty(response.get())) { - return; - } - UserNameplateVo vo = this.gson.fromJson(response.get(), UserNameplateVo.class); - vo = checkNameplateVo(vo); - if (vo.getExpireTime().getTime() <= System.currentTimeMillis()) { - this.jedisService.hdel(RedisKey.user_using_nameplate.getKey(), key.toString()); - return; - } - userNameplateMap.put(key, vo); - }); - return userNameplateMap; + public Map getBatchUserUsingNameplateVo(List uids) { + return uids.stream().map(uid -> this.jedisService.hget(RedisKey.user_using_nameplate.getKey(), uid)) + .filter(StringUtils::isNotBlank) + .map(str -> gson.fromJson(str, UserNameplateVo.class)) + .map(this::checkNameplateVo) + .filter(vo->vo.getExpireTime().getTime() > System.currentTimeMillis()) + .collect(Collectors.toMap(UserNameplateVo::getUid, v -> v)); } /** diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomGiftValueService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomGiftValueService.java index e11ca53dd..bc5ca0775 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomGiftValueService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomGiftValueService.java @@ -142,17 +142,15 @@ public class RoomGiftValueService extends BaseService { } else { partitionId = null; } - Set newUids = new HashSet<>(targetUids); - try { - jedisService.doInPipeline((pipeline) -> - newUids.forEach(uid -> { - // 更新用户礼物值 - jedisService.hincrbyfloat(roomKey(roomUid), uid.toString(), value); - // 更新用户收到哪些用户的礼物 - jedisService.zincrby(rankKey(roomUid, uid.toString(), partitionId), value, sendUid.toString()); - }) - ); + try { + Set newUids = new HashSet<>(targetUids); + newUids.parallelStream().forEach(uid -> { + // 更新用户礼物值 + jedisService.hincrbyfloat(roomKey(roomUid), uid.toString(), value); + // 更新用户收到哪些用户的礼物 + jedisService.zincrby(rankKey(roomUid, uid.toString(), partitionId), value, sendUid.toString()); + }); scrambleVipMic(roomUid, targetUids, value, sendUid); executeTrigger(roomUid); @@ -196,7 +194,7 @@ public class RoomGiftValueService extends BaseService { * * @param roomUid */ - public void cleanGiftValueCache(Long roomUid) throws Exception { + public void cleanGiftValueCache(Long roomUid) { Integer partitionId; Room room = roomService.getRoomByUid(roomUid); if (room != null) { @@ -205,10 +203,7 @@ public class RoomGiftValueService extends BaseService { partitionId = null; } Set uidSet = jedisService.hgetAllKeysByKey(roomKey(roomUid)); - // pipeline清除房间内所有用户的记录 - jedisService.doInPipeline((pipeline) -> - uidSet.forEach(uid -> pipeline.del(rankKey(roomUid, uid, partitionId))) - ); + uidSet.forEach(uid -> jedisService.del(rankKey(roomUid, uid, partitionId))); // 清除房间用户set jedisService.del(roomKey(roomUid)); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomSearchService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomSearchService.java index ba9ac2af9..f6cbf7e6f 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomSearchService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomSearchService.java @@ -392,13 +392,11 @@ public class RoomSearchService extends BaseService { // 注意!!!!:这个列表返回的 List roomList = roomMapper.queryRoomByPermitType(permitType); if (cacheKey != null) { - jedisService.doInPipeline((pipeline -> { - roomList.forEach(room -> { - int onlineNum = room.getOnlineNum() == null ? 0 : room.getOnlineNum(); - pipeline.zadd(cacheKey, onlineNum, String.valueOf(room.getUid())); - }); - pipeline.expire(cacheKey, 5); - })); + roomList.forEach(room -> { + int onlineNum = room.getOnlineNum() == null ? 0 : room.getOnlineNum(); + jedisService.zadd(cacheKey, Integer.valueOf(onlineNum).doubleValue(), String.valueOf(room.getUid())); + }); + jedisService.expire(cacheKey, 5); } } if (cacheKey != null) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/CrossRoomPkRoundServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/CrossRoomPkRoundServiceImpl.java index e93840b87..e64a7622b 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/CrossRoomPkRoundServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/CrossRoomPkRoundServiceImpl.java @@ -365,7 +365,9 @@ public class CrossRoomPkRoundServiceImpl extends ServiceImpl pkUidList = Arrays.asList(String.valueOf(inviteeRoom.getUid()), String.valueOf(inviteRoom.getUid())); - jedisService.doInPipeline((pipeline -> pkUidList.forEach(uidStr -> pipeline.hset(RedisKey.corss_room_round_pking.getKey(), uidStr, String.valueOf(round.getId()))))); + for (String uidStr : pkUidList){ + jedisService.hset(RedisKey.corss_room_round_pking.getKey(), uidStr, String.valueOf(round.getId())); + } String limitKey = RedisKey.cross_room_pk_initiate_limit.getKey(inviteRoom.getUid() + StrUtil.UNDERLINE + inviteeRoom.getUid()); jedisService.del(limitKey); @@ -576,7 +578,9 @@ public class CrossRoomPkRoundServiceImpl extends ServiceImpl pkUidList = Arrays.asList(String.valueOf(invitePkRoom.getRoomUid()), String.valueOf(acceptPkRoom.getRoomUid())); - jedisService.doInPipeline((pipeline -> pkUidList.forEach(uidStr -> pipeline.hdel(RedisKey.corss_room_round_pking.getKey(), uidStr)))); + for (String uidStr : pkUidList){ + jedisService.hdel(RedisKey.corss_room_round_pking.getKey(), uidStr); + } } //更新参与双方相关数据,如果为非强制结束,设置实际结束时间为计划结束时间 @@ -1234,7 +1238,9 @@ public class CrossRoomPkRoundServiceImpl extends ServiceImpl pkUidList = Arrays.asList(String.valueOf(invitePkRoom.getRoomUid()), String.valueOf(acceptPkRoom.getRoomUid())); - jedisService.doInPipeline((pipeline -> pkUidList.forEach(uidStr -> pipeline.hdel(RedisKey.corss_room_round_pking.getKey(), uidStr)))); + for (String uidStr : pkUidList){ + jedisService.hdel(RedisKey.corss_room_round_pking.getKey(), uidStr); + } } catch (Exception e) { log.error("结束pk出现异常", e); throw new ServiceException(BusiStatus.SERVERBUSY); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/SingleBroadcastPopularityServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/SingleBroadcastPopularityServiceImpl.java index bc5f01e0a..ce596eabb 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/SingleBroadcastPopularityServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/impl/SingleBroadcastPopularityServiceImpl.java @@ -31,7 +31,6 @@ import com.accompany.core.model.Users; import com.accompany.core.service.SysConfService; import com.accompany.core.service.common.JedisService; import com.accompany.core.service.user.UsersBaseService; -import com.accompany.core.vo.RedisHashVo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.Gson; @@ -287,19 +286,12 @@ public class SingleBroadcastPopularityServiceImpl extends ServiceImpl getSingleBroadcastMainVOList(List uids) { - List voList = new ArrayList<>(); - for (Long uid : uids) { - RedisHashVo redisHashVo = new RedisHashVo(); - redisHashVo.setKey(RedisKey.single_broadcast_room_popularity.getKey()); - redisHashVo.setField(uid.toString()); - voList.add(redisHashVo); - } - List redisHashVoList = jedisService.hgetBatch(voList); + List redisHashVoList = jedisService.hmread(RedisKey.single_broadcast_room_popularity.getKey(), uids.toArray(String[]::new)); List dtoList = new LinkedList<>(); - for (RedisHashVo hashVo : redisHashVoList) { - if (StringUtils.isNotEmpty(hashVo.getValue())) { - SingleBroadcastCacheDto singleBroad = gson.fromJson(hashVo.getValue(), SingleBroadcastCacheDto.class); + for (String hashVo : redisHashVoList) { + if (StringUtils.isNotEmpty(hashVo)) { + SingleBroadcastCacheDto singleBroad = gson.fromJson(hashVo, SingleBroadcastCacheDto.class); dtoList.add(singleBroad); } } @@ -316,7 +308,7 @@ public class SingleBroadcastPopularityServiceImpl extends ServiceImpl { String roundIdStr = jedisService.hget(RedisKey.corss_room_round_pking.getKey(), String.valueOf(result.getUid())); result.setCrossPking(org.apache.commons.lang3.StringUtils.isNotBlank(roundIdStr)); @@ -328,7 +320,7 @@ public class SingleBroadcastPopularityServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(SingleBroadcastPopularity::getIsDel, Constant.SingleBroadcastDel.NO_DEL).orderByDesc(SingleBroadcastPopularity::getIsTop) .orderByAsc(SingleBroadcastPopularity::getTopOrder); @@ -336,12 +328,10 @@ public class SingleBroadcastPopularityServiceImpl extends ServiceImpl recordList = this.list(queryWrapper); if (CollectionUtils.isEmpty(recordList)) return Boolean.TRUE; - jedisService.doInPipeline((pipeline) -> { - recordList.stream().forEach(broadcastPopularity -> { - SingleBroadcastCacheDto singleBroadcastCacheDto = buildSingleBroadcastCacheDtoF(broadcastPopularity, x -> buildSingleBroadcastCacheDto(x)); - pipeline.hset(RedisKey.single_broadcast_room_popularity.getKey(), - String.valueOf(broadcastPopularity.getUid()), gson.toJson(singleBroadcastCacheDto)); - }); + recordList.stream().forEach(broadcastPopularity -> { + SingleBroadcastCacheDto singleBroadcastCacheDto = buildSingleBroadcastCacheDtoF(broadcastPopularity, x -> buildSingleBroadcastCacheDto(x)); + jedisService.hset(RedisKey.single_broadcast_room_popularity.getKey(), + String.valueOf(broadcastPopularity.getUid()), gson.toJson(singleBroadcastCacheDto)); }); return Boolean.FALSE; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/treasure/SeizeTreasureService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/treasure/SeizeTreasureService.java index b93f1aa7a..0d9ca4a76 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/treasure/SeizeTreasureService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/treasure/SeizeTreasureService.java @@ -88,6 +88,7 @@ import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * 夺宝精灵活动 @@ -283,20 +284,11 @@ public class SeizeTreasureService { SpringContextHolder.getBean(SeizeTreasureService.class).initForestPool(poolLevel); throw new ServiceException(BusiStatus.SEIZE_TREASURE_DRAW_TOO_BUSY); } - List rewardCacheList = new ArrayList<>(drawNum); - List> rewardRespList = new ArrayList<>(); - jedisService.doInPipeline(pipeline -> { - for (int i = 0; i < drawNum; i++) { - rewardRespList.add(pipeline.lpop(poolKey)); - } - pipeline.sync(); - }); - rewardRespList.forEach(resp -> { - String rewardCacheStr = resp.get(); - if (StringUtils.hasText(rewardCacheStr)) { - rewardCacheList.add(gson.fromJson(rewardCacheStr, SeizeTreasurePoolRewardCache.class)); - } - }); + List rewardCacheList = IntStream.range(0, drawNum) + .mapToObj(n->jedisService.lpop(poolKey)) + .filter(StringUtils::hasText) + .map(rewardCacheStr -> gson.fromJson(rewardCacheStr, SeizeTreasurePoolRewardCache.class)) + .toList(); // 取出奖励数量小于抽奖次数 if (rewardCacheList.size() < drawNum) { log.info("SeizeTreasureService getForestPoolReward rewardCacheList.size:{} < drawNum:{}", rewardCacheList.size(), drawNum); @@ -387,20 +379,12 @@ public class SeizeTreasureService { //累计抽奖次数 Long currentDrawNum = jedisService.hincrBy(userInfoKey, DrawUserInfoField.CURRENT_DRAW_NUM_FIELD, drawNum.longValue()); if (CollectionUtil.isNotEmpty(poolRewardList)) { - try { - jedisService.doInPipeline(pipeline -> { - for (int i = 0; i < drawNum && i < poolRewardList.size(); i++) { - SeizeTreasurePoolRewardCache rewardCache = poolRewardList.get(i); - //清空上次差值 - if (ActPropsId.highElfIdList.contains(rewardCache.getReward().getRewardRefId())) { - pipeline.hdel(RedisKey.getActRedisKey(RedisKey.USER_INFO_KEY), DrawUserInfoField.LESS_DRAW_NUM_FIELD); - } - //更新差值数 - pipeline.hincrBy(userInfoKey, DrawUserInfoField.LESS_DRAW_NUM_FIELD, 1L); - } - }); - } catch (Exception e) { - log.error(e.getMessage(), e); + for (SeizeTreasurePoolRewardCache rewardCache : poolRewardList){ + if (ActPropsId.highElfIdList.contains(rewardCache.getReward().getRewardRefId())) { + //更新差值数 + jedisService.hdel(RedisKey.getActRedisKey(RedisKey.USER_INFO_KEY), DrawUserInfoField.LESS_DRAW_NUM_FIELD); + } + jedisService.hincrBy(userInfoKey, DrawUserInfoField.LESS_DRAW_NUM_FIELD, 1L); } } updateLuckyNum(); @@ -682,7 +666,7 @@ public class SeizeTreasureService { return seizeTreasurePoolRewardVos.stream().sorted(Comparator.comparingInt(SeizeTreasurePoolRewardVo::getRewardOrder).reversed()).collect(Collectors.toList()); } - public List getTreasurePoolReward(Integer drawNum) throws IOException { + public List getTreasurePoolReward(Integer drawNum) { String poolRedisKey = RedisKey.getActRedisKey(RedisKey.POOL_KEY); Long poolSize = jedisService.llen(poolRedisKey); log.info("SeizeTreasureService getTreasurePoolReward poolRedisKey:{} drawNum:{} poolSize:{}", poolRedisKey, drawNum, poolSize); @@ -693,20 +677,12 @@ public class SeizeTreasureService { SpringContextHolder.getBean(SeizeTreasureService.class).initTreasurePool(); throw new ServiceException(BusiStatus.SEIZE_TREASURE_DRAW_TOO_BUSY); } - List rewardCacheList = new ArrayList<>(drawNum); - List> rewardRespList = new ArrayList<>(); - jedisService.doInPipeline(pipeline -> { - for (int i = 0; i < drawNum; i++) { - rewardRespList.add(pipeline.lpop(poolRedisKey)); - } - pipeline.sync(); - }); - rewardRespList.forEach(resp -> { - String rewardCacheStr = resp.get(); - if (StringUtils.hasText(rewardCacheStr)) { - rewardCacheList.add(gson.fromJson(rewardCacheStr, SeizeTreasurePoolRewardCache.class)); - } - }); + List rewardCacheList = IntStream.range(0, drawNum) + .mapToObj(n->jedisService.lpop(poolRedisKey)) + .filter(StringUtils::hasText) + .map(rewardCacheStr -> gson.fromJson(rewardCacheStr, SeizeTreasurePoolRewardCache.class)) + .toList(); + // 取出奖励数量小于抽奖次数 if (rewardCacheList.size() < drawNum) { log.info("SeizeTreasureService getTreasurePoolReward rewardCacheList.size():{} < drawNum:{}", rewardCacheList.size(), drawNum); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/user/UserInRoomService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/user/UserInRoomService.java index 0eecb709c..fba438fa5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/user/UserInRoomService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/user/UserInRoomService.java @@ -36,6 +36,7 @@ import org.springframework.stereotype.Service; import redis.clients.jedis.Response; import java.util.*; +import java.util.stream.Collectors; /** * Created by liuguofu on 2017/10/17. @@ -139,21 +140,14 @@ public class UserInRoomService { return getUserInRoomMapBatchCache(uids); } - public Map getUserInRoomMapBatchCache(List uids) throws Exception { - Map roomVoMap = Maps.newHashMap(); - Map> roomVoMapStr = Maps.newHashMap(); - jedisService.doInPipeline((pipeline) -> { - uids.forEach(uid -> { - Response response = pipeline.hget(RedisKey.user_in_room.getKey(), uid); - roomVoMapStr.put(Long.valueOf(uid), response); - }); - }); - roomVoMapStr.forEach((key, response) -> { - if (StringUtils.isNotBlank(response.get())) { - roomVoMap.put(key, GsonUtil.getDefGson().fromJson(response.get(), RoomVo.class)); + public Map getUserInRoomMapBatchCache(List uids) { + return uids.stream().map(uid -> { + String roomVoStr = jedisService.hget(RedisKey.user_in_room.getKey(), uid); + if (StringUtils.isBlank(roomVoStr)){ + return null; } - }); - return roomVoMap; + return GsonUtil.getDefGson().fromJson(roomVoStr, RoomVo.class); + }).filter(Objects::nonNull).collect(Collectors.toMap(RoomVo::getUid, roomVo -> roomVo)); } public void updateUserInRoomRecord(Long uid, Long roomUid, Byte behaveType) { diff --git a/accompany-business/accompany-business-service/src/main/resources/lua/activity/backStock.lua b/accompany-business/accompany-business-service/src/main/resources/lua/activity/backStock.lua deleted file mode 100644 index 34b823caa..000000000 --- a/accompany-business/accompany-business-service/src/main/resources/lua/activity/backStock.lua +++ /dev/null @@ -1,8 +0,0 @@ - -local packId = ARGV[1] -local num = tonumber(ARGV[2]) - -redis.call('HINCRBY',KEYS[1],packId,-num) -redis.call('HINCRBY',KEYS[2],packId,-num) - -return 0 diff --git a/accompany-business/accompany-business-service/src/main/resources/lua/activity/deductStock.lua b/accompany-business/accompany-business-service/src/main/resources/lua/activity/deductStock.lua deleted file mode 100644 index a62d6cec9..000000000 --- a/accompany-business/accompany-business-service/src/main/resources/lua/activity/deductStock.lua +++ /dev/null @@ -1,33 +0,0 @@ - -local packId = ARGV[1] -local num = tonumber(ARGV[2]) -local stock = tonumber(ARGV[3]) -local allowBuyNum = tonumber(ARGV[4]) -local expireSeconds = 24 * 60 * 60 - -local salesStr = redis.call('HGET',KEYS[1],packId) -local sales = (salesStr ~= false and tonumber(salesStr)) or 0 -if stock > 0 and sales + num > stock then - return 1 -end - -local userBuyNumStr = redis.call('HGET',KEYS[2],packId) -local userBuyNum = (userBuyNumStr ~= false and tonumber(userBuyNumStr)) or 0 -if allowBuyNum > 0 and userBuyNum + num > allowBuyNum then - return 2 -end - -redis.call('HINCRBY',KEYS[1],packId,num) -redis.call('HINCRBY',KEYS[2],packId,num) - -local salesTtl = redis.call('ttl', KEYS[1]) -if salesTtl == -1 then - redis.call('EXPIRE',KEYS[1],expireSeconds) -end - -local userBuyNumTtl = redis.call('ttl', KEYS[2]) -if userBuyNumTtl == -1 then - redis.call('EXPIRE',KEYS[2],expireSeconds) -end - -return 0