1 package org.onap.msb.apiroute.wrapper.dao;
3 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import redis.clients.jedis.Jedis;
7 import redis.clients.jedis.ScanParams;
8 import redis.clients.jedis.ScanResult;
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
15 public class RedisAccessWrapper {
16 private static final Logger LOGGER = LoggerFactory.getLogger(RedisAccessWrapper.class);
17 //An iteration starts when the cursor is set to 0
18 private static final String REDIS_SCAN_POINTER_NEW_ITERATION = "0";
19 //An iteration terminated when the cursor returned by the server is 0
20 private static final String REDIS_SCAN_POINTER_ITERATION_END = "0";
21 private static final int REDIS_SCAN_COUNT = 50;
24 public static void save(String key,String value) throws Exception {
27 jedis = JedisUtil.borrowJedisInstance();
30 JedisUtil.returnJedisInstance(jedis);
34 public static String query(String key) throws Exception {
38 jedis = JedisUtil.borrowJedisInstance();
39 value = jedis.get(key);
41 JedisUtil.returnJedisInstance(jedis);
46 public static long delete(String key) throws Exception {
50 jedis = JedisUtil.borrowJedisInstance();
51 reply = jedis.del(key);
53 JedisUtil.returnJedisInstance(jedis);
58 public static boolean isExist(String key) throws Exception {
59 boolean isExist = false;
62 jedis = JedisUtil.borrowJedisInstance();
63 isExist = jedis.exists(key);
65 JedisUtil.returnJedisInstance(jedis);
70 public static List<String> queryMultiKeys(String keyPattern) throws Exception {
71 Set<String> keySet = filterKeys(keyPattern);
72 List<String> valueList = new ArrayList<>();
75 jedis = JedisUtil.borrowJedisInstance();
76 for(String key : keySet){
77 String value = jedis.get(key);
78 if(value !=null && !"".equals(value)){
83 JedisUtil.returnJedisInstance(jedis);
88 public static long deleteMultiKeys(String keyPattern) throws Exception {
89 Set<String> keySet = filterKeys(keyPattern);
93 jedis = JedisUtil.borrowJedisInstance();
94 for(String key : keySet){
95 long reply = jedis.del(key);
96 replySum = replySum + reply;
99 JedisUtil.returnJedisInstance(jedis);
105 * filter the keys according to the given pattern
106 * using "scan" instead of using "keys", incrementally iterate the keys space
107 * @param pattern the input filter pattern
108 * @return the matched keys set
110 public static Set<String> filterKeys(String pattern) throws Exception{
111 long start = System.currentTimeMillis();
113 Set<String> filteredKeys = new HashSet<>();
114 ScanParams scanParams = new ScanParams();
115 scanParams.match(pattern);
116 scanParams.count(REDIS_SCAN_COUNT);
118 jedis = JedisUtil.borrowJedisInstance();
119 ScanResult<String> scanResult = jedis.scan(REDIS_SCAN_POINTER_NEW_ITERATION,scanParams);
120 filteredKeys.addAll(scanResult.getResult());
121 while(!scanResult.getStringCursor().equals(REDIS_SCAN_POINTER_ITERATION_END)){
122 scanResult = jedis.scan(scanResult.getStringCursor(),scanParams);
123 filteredKeys.addAll(scanResult.getResult());
126 JedisUtil.returnJedisInstance(jedis);
128 long end = System.currentTimeMillis();
129 long costTime = end-start;
130 LOGGER.info("filterKeys " + pattern + " count:" + filteredKeys.size() + " cost: " + costTime);