Commit 8649cc207146a10b4eb3ae18fcb0fed45cc9ad4a
1 parent
35a28b80
AI添加问题 历史问题记录
Showing
14 changed files
with
1010 additions
and
2699 deletions
pom.xml
| @@ -79,6 +79,15 @@ | @@ -79,6 +79,15 @@ | ||
| 79 | <groupId>org.springframework.boot</groupId> | 79 | <groupId>org.springframework.boot</groupId> |
| 80 | <artifactId>spring-boot-starter-thymeleaf</artifactId> | 80 | <artifactId>spring-boot-starter-thymeleaf</artifactId> |
| 81 | </dependency> | 81 | </dependency> |
| 82 | + <dependency> | ||
| 83 | + <groupId>org.springframework.boot</groupId> | ||
| 84 | + <artifactId>spring-boot-starter-data-redis</artifactId> | ||
| 85 | + </dependency> | ||
| 86 | + <!-- 如果需要连接池,可以引入 commons-pool2 (可选) --> | ||
| 87 | + <dependency> | ||
| 88 | + <groupId>org.apache.commons</groupId> | ||
| 89 | + <artifactId>commons-pool2</artifactId> | ||
| 90 | + </dependency> | ||
| 82 | 91 | ||
| 83 | <!-- MyBatis --> | 92 | <!-- MyBatis --> |
| 84 | <dependency> | 93 | <dependency> |
src/main/java/com/xly/config/JedisUtil.java deleted
| 1 | -//package com.xly.utils.redis; | ||
| 2 | -// | ||
| 3 | -//import java.io.ByteArrayInputStream; | ||
| 4 | -//import java.io.ByteArrayOutputStream; | ||
| 5 | -//import java.io.ObjectInputStream; | ||
| 6 | -//import java.io.ObjectOutputStream; | ||
| 7 | -//import java.util.*; | ||
| 8 | -//import java.util.concurrent.TimeUnit; | ||
| 9 | -// | ||
| 10 | -//import cn.hutool.core.util.StrUtil; | ||
| 11 | -//import cn.hutool.json.JSONUtil; | ||
| 12 | -//import com.alibaba.fastjson.JSONObject; | ||
| 13 | -//import com.google.common.collect.Sets; | ||
| 14 | -//import groovy.util.logging.Slf4j; | ||
| 15 | -//import org.slf4j.Logger; | ||
| 16 | -//import org.slf4j.LoggerFactory; | ||
| 17 | -//import org.springframework.beans.factory.annotation.Autowired; | ||
| 18 | -//import org.springframework.beans.factory.annotation.Value; | ||
| 19 | -//import org.springframework.cache.annotation.Cacheable; | ||
| 20 | -//import org.springframework.stereotype.Component; | ||
| 21 | -// | ||
| 22 | -//import org.springframework.util.ObjectUtils; | ||
| 23 | -//import redis.clients.jedis.*; | ||
| 24 | -//import redis.clients.jedis.BinaryClient.LIST_POSITION; | ||
| 25 | -// | ||
| 26 | -//@Component | ||
| 27 | -//@Slf4j | ||
| 28 | -//public class JedisUtil { | ||
| 29 | -// | ||
| 30 | -// private static final Logger logger = LoggerFactory.getLogger(JedisUtil.class); | ||
| 31 | -// | ||
| 32 | -// private static final String LOCK_SUCCESS = "OK"; | ||
| 33 | -// private static final String SET_IF_NOT_EXIST = "NX"; | ||
| 34 | -// private static final String SET_WITH_EXPIRE_TIME = "PX"; | ||
| 35 | -// private static final String SET_WITH_EXPIRE_TIME_EX = "EX"; | ||
| 36 | -// private static final Long RELEASE_SUCCESS = 1L; | ||
| 37 | -// public static final int lockWaitTime = 4000; | ||
| 38 | -// public static final int scanlimit = 10000; | ||
| 39 | -// | ||
| 40 | -// @Value("${spring.redis.database}") | ||
| 41 | -// private int indexdb; | ||
| 42 | -// | ||
| 43 | -// @Autowired | ||
| 44 | -// private JedisPool jedisPool; | ||
| 45 | -// | ||
| 46 | -// /** | ||
| 47 | -// * <p> | ||
| 48 | -// * 通过key获取储存在redis中的value | ||
| 49 | -// * </p> | ||
| 50 | -// * <p> | ||
| 51 | -// * 并释放连接 | ||
| 52 | -// * </p> | ||
| 53 | -// * | ||
| 54 | -// * @param key | ||
| 55 | -// * @return 成功返回value 失败返回null | ||
| 56 | -// */ | ||
| 57 | -// public String get(String key) { | ||
| 58 | -// Jedis jedis = null; | ||
| 59 | -// String value = null; | ||
| 60 | -// try { | ||
| 61 | -// jedis = jedisPool.getResource(); | ||
| 62 | -// jedis.select(indexdb); | ||
| 63 | -// value = jedis.get(key); | ||
| 64 | -// } catch (Exception e) { | ||
| 65 | -// logger.error(e.getMessage()); | ||
| 66 | -// } finally { | ||
| 67 | -// returnResource(jedis); | ||
| 68 | -// } | ||
| 69 | -// return value; | ||
| 70 | -// } | ||
| 71 | -// /** | ||
| 72 | -// * <p> | ||
| 73 | -// * 通过key获取储存在redis中的value | ||
| 74 | -// * </p> | ||
| 75 | -// * <p> | ||
| 76 | -// * 并释放连接 | ||
| 77 | -// * </p> | ||
| 78 | -// * | ||
| 79 | -// * @param key | ||
| 80 | -// * @return 成功返回value 失败返回null | ||
| 81 | -// */ | ||
| 82 | -// public Object getObject(String key) { | ||
| 83 | -// Jedis jedis = null; | ||
| 84 | -// Object value = null; | ||
| 85 | -// try { | ||
| 86 | -// jedis = jedisPool.getResource(); | ||
| 87 | -// jedis.select(indexdb); | ||
| 88 | -// String jedV = jedis.get(key); | ||
| 89 | -// if(StrUtil.isNotEmpty(jedV) && JSONUtil.isJsonObj(jedV)){ | ||
| 90 | -// value = JSONUtil.parseObj(jedV); | ||
| 91 | -// }else{ | ||
| 92 | -// value = jedV; | ||
| 93 | -// } | ||
| 94 | -// } catch (Exception e) { | ||
| 95 | -// logger.error(e.getMessage()); | ||
| 96 | -// } finally { | ||
| 97 | -// returnResource(jedis); | ||
| 98 | -// } | ||
| 99 | -// return value; | ||
| 100 | -// } | ||
| 101 | -// | ||
| 102 | -// /** | ||
| 103 | -// * 递增 | ||
| 104 | -// * @param key 键 | ||
| 105 | -// * @return | ||
| 106 | -// */ | ||
| 107 | -// public long incr(String key, long delta){ | ||
| 108 | -// if(delta<0){ | ||
| 109 | -// throw new RuntimeException("递增因子必须大于0"); | ||
| 110 | -// } | ||
| 111 | -// Jedis jedis = null; | ||
| 112 | -// try { | ||
| 113 | -// jedis = jedisPool.getResource(); | ||
| 114 | -// jedis.select(indexdb); | ||
| 115 | -// return jedis.incrBy(key,delta); | ||
| 116 | -// } catch (Exception e) { | ||
| 117 | -// | ||
| 118 | -// logger.error(e.getMessage()); | ||
| 119 | -// return 0L; | ||
| 120 | -// } finally { | ||
| 121 | -// returnResource(jedis); | ||
| 122 | -// } | ||
| 123 | -// } | ||
| 124 | -// | ||
| 125 | -// /** | ||
| 126 | -// * <p> | ||
| 127 | -// * 通过key获取储存在redis中的value | ||
| 128 | -// * </p> | ||
| 129 | -// * <p> | ||
| 130 | -// * 并释放连接 | ||
| 131 | -// * </p> | ||
| 132 | -// * | ||
| 133 | -// * @param key | ||
| 134 | -// * @param indexdb 选择redis库 0-15 | ||
| 135 | -// * @return 成功返回value 失败返回null | ||
| 136 | -// */ | ||
| 137 | -// public byte[] get(byte[] key, int indexdb) { | ||
| 138 | -// Jedis jedis = null; | ||
| 139 | -// byte[] value = null; | ||
| 140 | -// try { | ||
| 141 | -// jedis = jedisPool.getResource(); | ||
| 142 | -// jedis.select(indexdb); | ||
| 143 | -// value = jedis.get(key); | ||
| 144 | -// } catch (Exception e) { | ||
| 145 | -// | ||
| 146 | -// logger.error(e.getMessage()); | ||
| 147 | -// } finally { | ||
| 148 | -// returnResource(jedis); | ||
| 149 | -// } | ||
| 150 | -// return value; | ||
| 151 | -// } | ||
| 152 | -// | ||
| 153 | -// /** | ||
| 154 | -// * <p> | ||
| 155 | -// * 向redis存入key和value,并释放连接资源 | ||
| 156 | -// * </p> | ||
| 157 | -// * <p> | ||
| 158 | -// * 如果key已经存在 则覆盖 | ||
| 159 | -// * </p> | ||
| 160 | -// * | ||
| 161 | -// * @param key | ||
| 162 | -// * @param value | ||
| 163 | -// * @param indexdb 选择redis库 0-15 | ||
| 164 | -// * @return 成功 返回OK 失败返回 0 | ||
| 165 | -// */ | ||
| 166 | -// public String set(String key, String value, int indexdb) { | ||
| 167 | -// Jedis jedis = null; | ||
| 168 | -// try { | ||
| 169 | -// jedis = jedisPool.getResource(); | ||
| 170 | -// jedis.select(indexdb); | ||
| 171 | -// return jedis.set(key, value); | ||
| 172 | -// } catch (Exception e) { | ||
| 173 | -// | ||
| 174 | -// logger.error(e.getMessage()); | ||
| 175 | -// return "0"; | ||
| 176 | -// } finally { | ||
| 177 | -// returnResource(jedis); | ||
| 178 | -// } | ||
| 179 | -// } | ||
| 180 | -// /** | ||
| 181 | -// * <p> | ||
| 182 | -// * 向redis存入key和value,并释放连接资源 | ||
| 183 | -// * </p> | ||
| 184 | -// * <p> | ||
| 185 | -// * 如果key已经存在 则覆盖 | ||
| 186 | -// * </p> | ||
| 187 | -// * | ||
| 188 | -// * @param key | ||
| 189 | -// * @param value | ||
| 190 | -// * @return 成功 返回OK 失败返回 0 | ||
| 191 | -// */ | ||
| 192 | -// public String set(String key, String value) { | ||
| 193 | -// return set( key, value, indexdb); | ||
| 194 | -// } | ||
| 195 | -// /** | ||
| 196 | -// * <p> | ||
| 197 | -// * 向redis存入key和value,并释放连接资源 | ||
| 198 | -// * </p> | ||
| 199 | -// * <p> | ||
| 200 | -// * 如果key已经存在 则覆盖 | ||
| 201 | -// * </p> | ||
| 202 | -// * | ||
| 203 | -// * @param key | ||
| 204 | -// * @param value | ||
| 205 | -// * @return 成功 返回OK 失败返回 0 | ||
| 206 | -// */ | ||
| 207 | -// public String setObject(String key, Object value) { | ||
| 208 | -// Jedis jedis = null; | ||
| 209 | -// try { | ||
| 210 | -// jedis = jedisPool.getResource(); | ||
| 211 | -// jedis.select(indexdb); | ||
| 212 | -// String objJson = JSONUtil.toJsonStr(value); | ||
| 213 | -// return jedis.set( key,objJson); | ||
| 214 | -// } catch (Exception e) { | ||
| 215 | -// | ||
| 216 | -// logger.error(e.getMessage()); | ||
| 217 | -// return "0"; | ||
| 218 | -// } finally { | ||
| 219 | -// returnResource(jedis); | ||
| 220 | -// } | ||
| 221 | -// } | ||
| 222 | -// | ||
| 223 | -// /** | ||
| 224 | -// * <p> | ||
| 225 | -// * 向redis存入key和value,并释放连接资源 | ||
| 226 | -// * </p> | ||
| 227 | -// * <p> | ||
| 228 | -// * 如果key已经存在 则覆盖 | ||
| 229 | -// * </p> | ||
| 230 | -// * | ||
| 231 | -// * @param key | ||
| 232 | -// * @param value | ||
| 233 | -// * @param indexdb 选择redis库 0-15 | ||
| 234 | -// * @return 成功 返回OK 失败返回 0 | ||
| 235 | -// */ | ||
| 236 | -// public String set(byte[] key, byte[] value, int indexdb) { | ||
| 237 | -// Jedis jedis = null; | ||
| 238 | -// try { | ||
| 239 | -// jedis = jedisPool.getResource(); | ||
| 240 | -// jedis.select(indexdb); | ||
| 241 | -// return jedis.set(key, value); | ||
| 242 | -// } catch (Exception e) { | ||
| 243 | -// | ||
| 244 | -// logger.error(e.getMessage()); | ||
| 245 | -// return "0"; | ||
| 246 | -// } finally { | ||
| 247 | -// returnResource(jedis); | ||
| 248 | -// } | ||
| 249 | -// } | ||
| 250 | -// | ||
| 251 | -// /** | ||
| 252 | -// * <p> | ||
| 253 | -// * 删除指定的key,也可以传入一个包含key的数组 | ||
| 254 | -// * </p> | ||
| 255 | -// * | ||
| 256 | -// * @param keys 一个key 也可以使 string 数组 | ||
| 257 | -// * @return 返回删除成功的个数 | ||
| 258 | -// */ | ||
| 259 | -// public Long del(String... keys) { | ||
| 260 | -// Jedis jedis = null; | ||
| 261 | -// try { | ||
| 262 | -// jedis = jedisPool.getResource(); | ||
| 263 | -// jedis.select(indexdb); | ||
| 264 | -// return jedis.del(keys); | ||
| 265 | -// } catch (Exception e) { | ||
| 266 | -// | ||
| 267 | -// logger.error(e.getMessage()); | ||
| 268 | -// return 0L; | ||
| 269 | -// } finally { | ||
| 270 | -// returnResource(jedis); | ||
| 271 | -// } | ||
| 272 | -// } | ||
| 273 | -// /** | ||
| 274 | -// * <p> | ||
| 275 | -// * 删除指定的key,也可以传入一个包含key的数组 | ||
| 276 | -// * </p> | ||
| 277 | -// * | ||
| 278 | -// * @param keysSet 一个key 也可以使 string 数组 | ||
| 279 | -// * @return 返回删除成功的个数 | ||
| 280 | -// */ | ||
| 281 | -// public Long delSet(Set<String> keysSet) { | ||
| 282 | -// return del(keysSet.toArray(new String[keysSet.size()])); | ||
| 283 | -// } | ||
| 284 | -// | ||
| 285 | -// /** | ||
| 286 | -// * <p> | ||
| 287 | -// * 删除指定的key,也可以传入一个包含key的数组 | ||
| 288 | -// * </p> | ||
| 289 | -// * | ||
| 290 | -// * @param indexdb 选择redis库 0-15 | ||
| 291 | -// * @param keys 一个key 也可以使 string 数组 | ||
| 292 | -// * @return 返回删除成功的个数 | ||
| 293 | -// */ | ||
| 294 | -// public Long del(int indexdb, String... keys) { | ||
| 295 | -// Jedis jedis = null; | ||
| 296 | -// try { | ||
| 297 | -// jedis = jedisPool.getResource(); | ||
| 298 | -// jedis.select(indexdb); | ||
| 299 | -// return jedis.del(keys); | ||
| 300 | -// } catch (Exception e) { | ||
| 301 | -// | ||
| 302 | -// logger.error(e.getMessage()); | ||
| 303 | -// return 0L; | ||
| 304 | -// } finally { | ||
| 305 | -// returnResource(jedis); | ||
| 306 | -// } | ||
| 307 | -// } | ||
| 308 | -// | ||
| 309 | -// /** | ||
| 310 | -// * <p> | ||
| 311 | -// * 删除指定的key,也可以传入一个包含key的数组 | ||
| 312 | -// * </p> | ||
| 313 | -// * | ||
| 314 | -// * @param indexdb 选择redis库 0-15 | ||
| 315 | -// * @param keys 一个key 也可以使 string 数组 | ||
| 316 | -// * @return 返回删除成功的个数 | ||
| 317 | -// */ | ||
| 318 | -// public Long del(int indexdb, byte[]... keys) { | ||
| 319 | -// Jedis jedis = null; | ||
| 320 | -// try { | ||
| 321 | -// jedis = jedisPool.getResource(); | ||
| 322 | -// jedis.select(indexdb); | ||
| 323 | -// return jedis.del(keys); | ||
| 324 | -// } catch (Exception e) { | ||
| 325 | -// | ||
| 326 | -// logger.error(e.getMessage()); | ||
| 327 | -// return 0L; | ||
| 328 | -// } finally { | ||
| 329 | -// returnResource(jedis); | ||
| 330 | -// } | ||
| 331 | -// } | ||
| 332 | -// | ||
| 333 | -// /** | ||
| 334 | -// * <p> | ||
| 335 | -// * 通过key向指定的value值追加值 | ||
| 336 | -// * </p> | ||
| 337 | -// * | ||
| 338 | -// * @param key | ||
| 339 | -// * @param str | ||
| 340 | -// * @return 成功返回 添加后value的长度 失败 返回 添加的 value 的长度 异常返回0L | ||
| 341 | -// */ | ||
| 342 | -// public Long append(String key, String str) { | ||
| 343 | -// Jedis jedis = null; | ||
| 344 | -// Long res = null; | ||
| 345 | -// try { | ||
| 346 | -// jedis = jedisPool.getResource(); | ||
| 347 | -// jedis.select(indexdb); | ||
| 348 | -// res = jedis.append(key, str); | ||
| 349 | -// } catch (Exception e) { | ||
| 350 | -// logger.error(e.getMessage()); | ||
| 351 | -// return 0L; | ||
| 352 | -// } finally { | ||
| 353 | -// returnResource(jedis); | ||
| 354 | -// } | ||
| 355 | -// return res; | ||
| 356 | -// } | ||
| 357 | -// | ||
| 358 | -// /** | ||
| 359 | -// * <p> | ||
| 360 | -// * 判断key是否存在 | ||
| 361 | -// * </p> | ||
| 362 | -// * | ||
| 363 | -// * @param key | ||
| 364 | -// * @return true OR false | ||
| 365 | -// */ | ||
| 366 | -// public Boolean exists(String key) { | ||
| 367 | -// Jedis jedis = null; | ||
| 368 | -// try { | ||
| 369 | -// jedis = jedisPool.getResource(); | ||
| 370 | -// jedis.select(indexdb); | ||
| 371 | -// return jedis.exists(key); | ||
| 372 | -// } catch (Exception e) { | ||
| 373 | -// | ||
| 374 | -// logger.error(e.getMessage()); | ||
| 375 | -// return false; | ||
| 376 | -// } finally { | ||
| 377 | -// returnResource(jedis); | ||
| 378 | -// } | ||
| 379 | -// } | ||
| 380 | -// | ||
| 381 | -// /** | ||
| 382 | -// * <p> | ||
| 383 | -// * 清空当前数据库中的所有 key,此命令从不失败。 | ||
| 384 | -// * </p> | ||
| 385 | -// * | ||
| 386 | -// * @return 总是返回 OK | ||
| 387 | -// */ | ||
| 388 | -// public String flushDB() { | ||
| 389 | -// Jedis jedis = null; | ||
| 390 | -// try { | ||
| 391 | -// jedis = jedisPool.getResource(); | ||
| 392 | -// jedis.select(indexdb); | ||
| 393 | -// return jedis.flushDB(); | ||
| 394 | -// } catch (Exception e) { | ||
| 395 | -// logger.error(e.getMessage()); | ||
| 396 | -// } finally { | ||
| 397 | -// returnResource(jedis); | ||
| 398 | -// } | ||
| 399 | -// return null; | ||
| 400 | -// } | ||
| 401 | -// | ||
| 402 | -// /** | ||
| 403 | -// * <p> | ||
| 404 | -// * 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 | ||
| 405 | -// * </p> | ||
| 406 | -// * | ||
| 407 | -// * @param key | ||
| 408 | -// * @param value 过期时间,单位:秒 | ||
| 409 | -// * @return 成功返回1 如果存在 和 发生异常 返回 0 | ||
| 410 | -// */ | ||
| 411 | -// public Long expire(String key, int value, int indexdb) { | ||
| 412 | -// Jedis jedis = null; | ||
| 413 | -// try { | ||
| 414 | -// jedis = jedisPool.getResource(); | ||
| 415 | -// jedis.select(indexdb); | ||
| 416 | -// return jedis.expire(key, value); | ||
| 417 | -// } catch (Exception e) { | ||
| 418 | -// logger.error(e.getMessage()); | ||
| 419 | -// return 0L; | ||
| 420 | -// } finally { | ||
| 421 | -// returnResource(jedis); | ||
| 422 | -// } | ||
| 423 | -// } | ||
| 424 | -// | ||
| 425 | -// /** | ||
| 426 | -// * 普通缓存放入并设置时间 | ||
| 427 | -// * @param key 键 | ||
| 428 | -// * @param value 值 | ||
| 429 | -// * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 | ||
| 430 | -// * @return true成功 false 失败 | ||
| 431 | -// */ | ||
| 432 | -// public boolean setObjectExpire(String key,Object value,long time){ | ||
| 433 | -// String valueJson = JSONUtil.toJsonStr(value); | ||
| 434 | -// this.setex( key, new Long(time).intValue(), valueJson); | ||
| 435 | -// return true; | ||
| 436 | -// } | ||
| 437 | -// | ||
| 438 | -// /** | ||
| 439 | -// * <p> | ||
| 440 | -// * 以秒为单位,返回给定 key 的剩余生存时间 | ||
| 441 | -// * </p> | ||
| 442 | -// * | ||
| 443 | -// * @param key | ||
| 444 | -// * @return 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key | ||
| 445 | -// * 的剩余生存时间。 发生异常 返回 0 | ||
| 446 | -// */ | ||
| 447 | -// public Long ttl(String key, int indexdb) { | ||
| 448 | -// Jedis jedis = null; | ||
| 449 | -// try { | ||
| 450 | -// jedis = jedisPool.getResource(); | ||
| 451 | -// jedis.select(indexdb); | ||
| 452 | -// return jedis.ttl(key); | ||
| 453 | -// } catch (Exception e) { | ||
| 454 | -// | ||
| 455 | -// logger.error(e.getMessage()); | ||
| 456 | -// return 0L; | ||
| 457 | -// } finally { | ||
| 458 | -// returnResource(jedis); | ||
| 459 | -// } | ||
| 460 | -// } | ||
| 461 | -// /** | ||
| 462 | -// * 普通缓存放入并设置时间 | ||
| 463 | -// * @param key 键 | ||
| 464 | -// * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 | ||
| 465 | -// * @return true成功 false 失败 | ||
| 466 | -// */ | ||
| 467 | -// public Long expireSeconds(String key,long time){ | ||
| 468 | -// return expire( key, new Long(time).intValue(), indexdb); | ||
| 469 | -// } | ||
| 470 | -// /** | ||
| 471 | -// * 普通缓存放入并设置时间 | ||
| 472 | -// * @param key 键 | ||
| 473 | -// * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 | ||
| 474 | -// * @return true成功 false 失败 | ||
| 475 | -// */ | ||
| 476 | -// public Long expireMinutes(String key,long time){ | ||
| 477 | -// time = time * 60; | ||
| 478 | -// return expire( key, new Long(time).intValue(), indexdb); | ||
| 479 | -// } | ||
| 480 | -// /** | ||
| 481 | -// * 普通缓存放入并设置时间 | ||
| 482 | -// * @param key 键 | ||
| 483 | -// * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 | ||
| 484 | -// * @return true成功 false 失败 | ||
| 485 | -// */ | ||
| 486 | -// public String createAndExpireMinutes(String key,String value,long time){ | ||
| 487 | -// return setexMinutes(key,new Long(time).intValue(), value); | ||
| 488 | -// } | ||
| 489 | -// | ||
| 490 | -// /** | ||
| 491 | -// * <p> | ||
| 492 | -// * 移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key ) | ||
| 493 | -// * </p> | ||
| 494 | -// * | ||
| 495 | -// * @param key | ||
| 496 | -// * @return 当生存时间移除成功时,返回 1 .如果 key 不存在或 key 没有设置生存时间,返回 0 , 发生异常 返回 -1 | ||
| 497 | -// */ | ||
| 498 | -// public Long persist(String key) { | ||
| 499 | -// Jedis jedis = null; | ||
| 500 | -// try { | ||
| 501 | -// jedis = jedisPool.getResource(); | ||
| 502 | -// jedis.select(indexdb); | ||
| 503 | -// return jedis.persist(key); | ||
| 504 | -// } catch (Exception e) { | ||
| 505 | -// | ||
| 506 | -// logger.error(e.getMessage()); | ||
| 507 | -// return -1L; | ||
| 508 | -// } finally { | ||
| 509 | -// returnResource(jedis); | ||
| 510 | -// } | ||
| 511 | -// } | ||
| 512 | -// | ||
| 513 | -// /** | ||
| 514 | -// * <p> | ||
| 515 | -// * 新增key,并将 key 的生存时间 (以秒为单位) | ||
| 516 | -// * </p> | ||
| 517 | -// * | ||
| 518 | -// * @param key | ||
| 519 | -// * @param seconds 生存时间 单位:秒 | ||
| 520 | -// * @param value | ||
| 521 | -// * @return 设置成功时返回 OK 。当 seconds 参数不合法时,返回一个错误。 | ||
| 522 | -// */ | ||
| 523 | -// public String setex(String key, int seconds, String value) { | ||
| 524 | -// Jedis jedis = null; | ||
| 525 | -// try { | ||
| 526 | -// jedis = jedisPool.getResource(); | ||
| 527 | -// jedis.select(indexdb); | ||
| 528 | -// return jedis.setex(key, seconds, value); | ||
| 529 | -// } catch (Exception e) { | ||
| 530 | -// | ||
| 531 | -// logger.error(e.getMessage()); | ||
| 532 | -// } finally { | ||
| 533 | -// returnResource(jedis); | ||
| 534 | -// } | ||
| 535 | -// return null; | ||
| 536 | -// } | ||
| 537 | -// /** | ||
| 538 | -// * <p> | ||
| 539 | -// * 新增key,并将 key 的生存时间 (以秒为单位) | ||
| 540 | -// * </p> | ||
| 541 | -// * | ||
| 542 | -// * @param key | ||
| 543 | -// * @param seconds 生存时间 单位:秒 | ||
| 544 | -// * @param value | ||
| 545 | -// * @return 设置成功时返回 OK 。当 seconds 参数不合法时,返回一个错误。 | ||
| 546 | -// */ | ||
| 547 | -// public String setexMinutes(String key, int seconds, String value) { | ||
| 548 | -// Jedis jedis = null; | ||
| 549 | -// try { | ||
| 550 | -// jedis = jedisPool.getResource(); | ||
| 551 | -// jedis.select(indexdb); | ||
| 552 | -// seconds = seconds*60; | ||
| 553 | -// return jedis.setex(key, seconds, value); | ||
| 554 | -// } catch (Exception e) { | ||
| 555 | -// logger.error(e.getMessage()); | ||
| 556 | -// } finally { | ||
| 557 | -// returnResource(jedis); | ||
| 558 | -// } | ||
| 559 | -// return null; | ||
| 560 | -// } | ||
| 561 | -// | ||
| 562 | -// /** | ||
| 563 | -// * <p> | ||
| 564 | -// * 设置key value,如果key已经存在则返回0,nx==> not exist | ||
| 565 | -// * </p> | ||
| 566 | -// * | ||
| 567 | -// * @param key | ||
| 568 | -// * @param value | ||
| 569 | -// * @return 成功返回1 如果存在 和 发生异常 返回 0 | ||
| 570 | -// */ | ||
| 571 | -// public Long setnx(String key, String value) { | ||
| 572 | -// Jedis jedis = null; | ||
| 573 | -// try { | ||
| 574 | -// jedis = jedisPool.getResource(); | ||
| 575 | -// jedis.select(indexdb); | ||
| 576 | -// return jedis.setnx(key, value); | ||
| 577 | -// } catch (Exception e) { | ||
| 578 | -// | ||
| 579 | -// logger.error(e.getMessage()); | ||
| 580 | -// return 0L; | ||
| 581 | -// } finally { | ||
| 582 | -// returnResource(jedis); | ||
| 583 | -// } | ||
| 584 | -// } | ||
| 585 | -// | ||
| 586 | -// /** | ||
| 587 | -// * <p> | ||
| 588 | -// * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 | ||
| 589 | -// * </p> | ||
| 590 | -// * <p> | ||
| 591 | -// * 当 key 存在但不是字符串类型时,返回一个错误。 | ||
| 592 | -// * </p> | ||
| 593 | -// * | ||
| 594 | -// * @param key | ||
| 595 | -// * @param value | ||
| 596 | -// * @return 返回给定 key 的旧值。当 key 没有旧值时,也即是, key 不存在时,返回 nil | ||
| 597 | -// */ | ||
| 598 | -// public String getSet(String key, String value) { | ||
| 599 | -// Jedis jedis = null; | ||
| 600 | -// try { | ||
| 601 | -// jedis = jedisPool.getResource(); | ||
| 602 | -// jedis.select(indexdb); | ||
| 603 | -// return jedis.getSet(key, value); | ||
| 604 | -// } catch (Exception e) { | ||
| 605 | -// | ||
| 606 | -// logger.error(e.getMessage()); | ||
| 607 | -// } finally { | ||
| 608 | -// returnResource(jedis); | ||
| 609 | -// } | ||
| 610 | -// return null; | ||
| 611 | -// } | ||
| 612 | -// | ||
| 613 | -// /** | ||
| 614 | -// * <p> | ||
| 615 | -// * 设置key value并制定这个键值的有效期 | ||
| 616 | -// * </p> | ||
| 617 | -// * | ||
| 618 | -// * @param key | ||
| 619 | -// * @param value | ||
| 620 | -// * @param seconds 单位:秒 | ||
| 621 | -// * @return 成功返回OK 失败和异常返回null | ||
| 622 | -// */ | ||
| 623 | -// public String setex(String key, String value, int seconds) { | ||
| 624 | -// Jedis jedis = null; | ||
| 625 | -// String res = null; | ||
| 626 | -// try { | ||
| 627 | -// jedis = jedisPool.getResource(); | ||
| 628 | -// jedis.select(indexdb); | ||
| 629 | -// res = jedis.setex(key, seconds, value); | ||
| 630 | -// } catch (Exception e) { | ||
| 631 | -// | ||
| 632 | -// logger.error(e.getMessage()); | ||
| 633 | -// } finally { | ||
| 634 | -// returnResource(jedis); | ||
| 635 | -// } | ||
| 636 | -// return res; | ||
| 637 | -// } | ||
| 638 | -// | ||
| 639 | -// /** | ||
| 640 | -// * <p> | ||
| 641 | -// * 通过key 和offset 从指定的位置开始将原先value替换 | ||
| 642 | -// * </p> | ||
| 643 | -// * <p> | ||
| 644 | -// * 下标从0开始,offset表示从offset下标开始替换 | ||
| 645 | -// * </p> | ||
| 646 | -// * <p> | ||
| 647 | -// * 如果替换的字符串长度过小则会这样 | ||
| 648 | -// * </p> | ||
| 649 | -// * <p> | ||
| 650 | -// * example: | ||
| 651 | -// * </p> | ||
| 652 | -// * <p> | ||
| 653 | -// * value : bigsea@zto.cn | ||
| 654 | -// * </p> | ||
| 655 | -// * <p> | ||
| 656 | -// * str : abc | ||
| 657 | -// * </p> | ||
| 658 | -// * <P> | ||
| 659 | -// * 从下标7开始替换 则结果为 | ||
| 660 | -// * </p> | ||
| 661 | -// * <p> | ||
| 662 | -// * RES : bigsea.abc.cn | ||
| 663 | -// * </p> | ||
| 664 | -// * | ||
| 665 | -// * @param key | ||
| 666 | -// * @param str | ||
| 667 | -// * @param offset 下标位置 | ||
| 668 | -// * @return 返回替换后 value 的长度 | ||
| 669 | -// */ | ||
| 670 | -// public Long setrange(String key, String str, int offset) { | ||
| 671 | -// Jedis jedis = null; | ||
| 672 | -// try { | ||
| 673 | -// jedis = jedisPool.getResource(); | ||
| 674 | -// jedis.select(indexdb); | ||
| 675 | -// return jedis.setrange(key, offset, str); | ||
| 676 | -// } catch (Exception e) { | ||
| 677 | -// | ||
| 678 | -// logger.error(e.getMessage()); | ||
| 679 | -// return 0L; | ||
| 680 | -// } finally { | ||
| 681 | -// returnResource(jedis); | ||
| 682 | -// } | ||
| 683 | -// } | ||
| 684 | -// | ||
| 685 | -// /** | ||
| 686 | -// * <p> | ||
| 687 | -// * 通过批量的key获取批量的value | ||
| 688 | -// * </p> | ||
| 689 | -// * | ||
| 690 | -// * @param keys string数组 也可以是一个key | ||
| 691 | -// * @return 成功返回value的集合, 失败返回null的集合 ,异常返回空 | ||
| 692 | -// */ | ||
| 693 | -// public List<String> mget(String... keys) { | ||
| 694 | -// Jedis jedis = null; | ||
| 695 | -// List<String> values = null; | ||
| 696 | -// try { | ||
| 697 | -// jedis = jedisPool.getResource(); | ||
| 698 | -// jedis.select(indexdb); | ||
| 699 | -// values = jedis.mget(keys); | ||
| 700 | -// } catch (Exception e) { | ||
| 701 | -// | ||
| 702 | -// logger.error(e.getMessage()); | ||
| 703 | -// } finally { | ||
| 704 | -// returnResource(jedis); | ||
| 705 | -// } | ||
| 706 | -// return values; | ||
| 707 | -// } | ||
| 708 | -// | ||
| 709 | -// /** | ||
| 710 | -// * <p> | ||
| 711 | -// * 批量的设置key:value,可以一个 | ||
| 712 | -// * </p> | ||
| 713 | -// * <p> | ||
| 714 | -// * example: | ||
| 715 | -// * </p> | ||
| 716 | -// * <p> | ||
| 717 | -// * obj.mset(new String[]{"key2","value1","key2","value2"}) | ||
| 718 | -// * </p> | ||
| 719 | -// * | ||
| 720 | -// * @param keysvalues | ||
| 721 | -// * @return 成功返回OK 失败 异常 返回 null | ||
| 722 | -// */ | ||
| 723 | -// public String mset(String... keysvalues) { | ||
| 724 | -// Jedis jedis = null; | ||
| 725 | -// String res = null; | ||
| 726 | -// try { | ||
| 727 | -// jedis = jedisPool.getResource(); | ||
| 728 | -// jedis.select(indexdb); | ||
| 729 | -// res = jedis.mset(keysvalues); | ||
| 730 | -// } catch (Exception e) { | ||
| 731 | -// | ||
| 732 | -// logger.error(e.getMessage()); | ||
| 733 | -// } finally { | ||
| 734 | -// returnResource(jedis); | ||
| 735 | -// } | ||
| 736 | -// return res; | ||
| 737 | -// } | ||
| 738 | -// | ||
| 739 | -// /** | ||
| 740 | -// * <p> | ||
| 741 | -// * 批量的设置key:value,可以一个,如果key已经存在则会失败,操作会回滚 | ||
| 742 | -// * </p> | ||
| 743 | -// * <p> | ||
| 744 | -// * example: | ||
| 745 | -// * </p> | ||
| 746 | -// * <p> | ||
| 747 | -// * obj.msetnx(new String[]{"key2","value1","key2","value2"}) | ||
| 748 | -// * </p> | ||
| 749 | -// * | ||
| 750 | -// * @param keysvalues | ||
| 751 | -// * @return 成功返回1 失败返回0 | ||
| 752 | -// */ | ||
| 753 | -// public Long msetnx(String... keysvalues) { | ||
| 754 | -// Jedis jedis = null; | ||
| 755 | -// Long res = 0L; | ||
| 756 | -// try { | ||
| 757 | -// jedis = jedisPool.getResource(); | ||
| 758 | -// jedis.select(indexdb); | ||
| 759 | -// res = jedis.msetnx(keysvalues); | ||
| 760 | -// } catch (Exception e) { | ||
| 761 | -// | ||
| 762 | -// logger.error(e.getMessage()); | ||
| 763 | -// } finally { | ||
| 764 | -// returnResource(jedis); | ||
| 765 | -// } | ||
| 766 | -// return res; | ||
| 767 | -// } | ||
| 768 | -// | ||
| 769 | -// /** | ||
| 770 | -// * <p> | ||
| 771 | -// * 设置key的值,并返回一个旧值 | ||
| 772 | -// * </p> | ||
| 773 | -// * | ||
| 774 | -// * @param key | ||
| 775 | -// * @param value | ||
| 776 | -// * @return 旧值 如果key不存在 则返回null | ||
| 777 | -// */ | ||
| 778 | -// public String getset(String key, String value) { | ||
| 779 | -// Jedis jedis = null; | ||
| 780 | -// String res = null; | ||
| 781 | -// try { | ||
| 782 | -// jedis = jedisPool.getResource(); | ||
| 783 | -// jedis.select(indexdb); | ||
| 784 | -// res = jedis.getSet(key, value); | ||
| 785 | -// } catch (Exception e) { | ||
| 786 | -// | ||
| 787 | -// logger.error(e.getMessage()); | ||
| 788 | -// } finally { | ||
| 789 | -// returnResource(jedis); | ||
| 790 | -// } | ||
| 791 | -// return res; | ||
| 792 | -// } | ||
| 793 | -// | ||
| 794 | -// /** | ||
| 795 | -// * <p> | ||
| 796 | -// * 通过下标 和key 获取指定下标位置的 value | ||
| 797 | -// * </p> | ||
| 798 | -// * | ||
| 799 | -// * @param key | ||
| 800 | -// * @param startOffset 开始位置 从0 开始 负数表示从右边开始截取 | ||
| 801 | -// * @param endOffset | ||
| 802 | -// * @return 如果没有返回null | ||
| 803 | -// */ | ||
| 804 | -// public String getrange(String key, int startOffset, int endOffset) { | ||
| 805 | -// Jedis jedis = null; | ||
| 806 | -// String res = null; | ||
| 807 | -// try { | ||
| 808 | -// jedis = jedisPool.getResource(); | ||
| 809 | -// jedis.select(indexdb); | ||
| 810 | -// res = jedis.getrange(key, startOffset, endOffset); | ||
| 811 | -// } catch (Exception e) { | ||
| 812 | -// | ||
| 813 | -// logger.error(e.getMessage()); | ||
| 814 | -// } finally { | ||
| 815 | -// returnResource(jedis); | ||
| 816 | -// } | ||
| 817 | -// return res; | ||
| 818 | -// } | ||
| 819 | -// | ||
| 820 | -// /** | ||
| 821 | -// * <p> | ||
| 822 | -// * 通过key 对value进行加值+1操作,当value不是int类型时会返回错误,当key不存在是则value为1 | ||
| 823 | -// * </p> | ||
| 824 | -// * | ||
| 825 | -// * @param key | ||
| 826 | -// * @return 加值后的结果 | ||
| 827 | -// */ | ||
| 828 | -// public Long incr(String key) { | ||
| 829 | -// Jedis jedis = null; | ||
| 830 | -// Long res = null; | ||
| 831 | -// try { | ||
| 832 | -// jedis = jedisPool.getResource(); | ||
| 833 | -// jedis.select(indexdb); | ||
| 834 | -// res = jedis.incr(key); | ||
| 835 | -// } catch (Exception e) { | ||
| 836 | -// | ||
| 837 | -// logger.error(e.getMessage()); | ||
| 838 | -// } finally { | ||
| 839 | -// returnResource(jedis); | ||
| 840 | -// } | ||
| 841 | -// return res; | ||
| 842 | -// } | ||
| 843 | -// | ||
| 844 | -// /** | ||
| 845 | -// * <p> | ||
| 846 | -// * 通过key给指定的value加值,如果key不存在,则这是value为该值 | ||
| 847 | -// * </p> | ||
| 848 | -// * | ||
| 849 | -// * @param key | ||
| 850 | -// * @param integer | ||
| 851 | -// * @return | ||
| 852 | -// */ | ||
| 853 | -// public Long incrBy(String key, Long integer) { | ||
| 854 | -// Jedis jedis = null; | ||
| 855 | -// Long res = null; | ||
| 856 | -// try { | ||
| 857 | -// jedis = jedisPool.getResource(); | ||
| 858 | -// jedis.select(indexdb); | ||
| 859 | -// res = jedis.incrBy(key, integer); | ||
| 860 | -// } catch (Exception e) { | ||
| 861 | -// | ||
| 862 | -// logger.error(e.getMessage()); | ||
| 863 | -// } finally { | ||
| 864 | -// returnResource(jedis); | ||
| 865 | -// } | ||
| 866 | -// return res; | ||
| 867 | -// } | ||
| 868 | -// | ||
| 869 | -// /** | ||
| 870 | -// * <p> | ||
| 871 | -// * 对key的值做减减操作,如果key不存在,则设置key为-1 | ||
| 872 | -// * </p> | ||
| 873 | -// * | ||
| 874 | -// * @param key | ||
| 875 | -// * @return | ||
| 876 | -// */ | ||
| 877 | -// public Long decr(String key) { | ||
| 878 | -// Jedis jedis = null; | ||
| 879 | -// Long res = null; | ||
| 880 | -// try { | ||
| 881 | -// jedis = jedisPool.getResource(); | ||
| 882 | -// jedis.select(indexdb); | ||
| 883 | -// res = jedis.decr(key); | ||
| 884 | -// } catch (Exception e) { | ||
| 885 | -// | ||
| 886 | -// logger.error(e.getMessage()); | ||
| 887 | -// } finally { | ||
| 888 | -// returnResource(jedis); | ||
| 889 | -// } | ||
| 890 | -// return res; | ||
| 891 | -// } | ||
| 892 | -// | ||
| 893 | -// /** | ||
| 894 | -// * <p> | ||
| 895 | -// * 减去指定的值 | ||
| 896 | -// * </p> | ||
| 897 | -// * | ||
| 898 | -// * @param key | ||
| 899 | -// * @param integer | ||
| 900 | -// * @return | ||
| 901 | -// */ | ||
| 902 | -// public Long decrBy(String key, Long integer) { | ||
| 903 | -// Jedis jedis = null; | ||
| 904 | -// Long res = null; | ||
| 905 | -// try { | ||
| 906 | -// jedis = jedisPool.getResource(); | ||
| 907 | -// jedis.select(indexdb); | ||
| 908 | -// res = jedis.decrBy(key, integer); | ||
| 909 | -// } catch (Exception e) { | ||
| 910 | -// | ||
| 911 | -// logger.error(e.getMessage()); | ||
| 912 | -// } finally { | ||
| 913 | -// returnResource(jedis); | ||
| 914 | -// } | ||
| 915 | -// return res; | ||
| 916 | -// } | ||
| 917 | -// | ||
| 918 | -// /** | ||
| 919 | -// * <p> | ||
| 920 | -// * 通过key获取value值的长度 | ||
| 921 | -// * </p> | ||
| 922 | -// * | ||
| 923 | -// * @param key | ||
| 924 | -// * @return 失败返回null | ||
| 925 | -// */ | ||
| 926 | -// public Long serlen(String key) { | ||
| 927 | -// Jedis jedis = null; | ||
| 928 | -// Long res = null; | ||
| 929 | -// try { | ||
| 930 | -// jedis = jedisPool.getResource(); | ||
| 931 | -// jedis.select(indexdb); | ||
| 932 | -// res = jedis.strlen(key); | ||
| 933 | -// } catch (Exception e) { | ||
| 934 | -// | ||
| 935 | -// logger.error(e.getMessage()); | ||
| 936 | -// } finally { | ||
| 937 | -// returnResource(jedis); | ||
| 938 | -// } | ||
| 939 | -// return res; | ||
| 940 | -// } | ||
| 941 | -// | ||
| 942 | -// /** | ||
| 943 | -// * <p> | ||
| 944 | -// * 通过key给field设置指定的值,如果key不存在,则先创建 | ||
| 945 | -// * </p> | ||
| 946 | -// * | ||
| 947 | -// * @param key | ||
| 948 | -// * @param field 字段 | ||
| 949 | -// * @param value | ||
| 950 | -// * @return 如果存在返回0 异常返回null | ||
| 951 | -// */ | ||
| 952 | -// public Long hset(String key, String field, String value) { | ||
| 953 | -// Jedis jedis = null; | ||
| 954 | -// Long res = null; | ||
| 955 | -// try { | ||
| 956 | -// jedis = jedisPool.getResource(); | ||
| 957 | -// jedis.select(indexdb); | ||
| 958 | -// res = jedis.hset(key, field, value); | ||
| 959 | -// } catch (Exception e) { | ||
| 960 | -// | ||
| 961 | -// logger.error(e.getMessage()); | ||
| 962 | -// } finally { | ||
| 963 | -// returnResource(jedis); | ||
| 964 | -// } | ||
| 965 | -// return res; | ||
| 966 | -// } | ||
| 967 | -// | ||
| 968 | -// /** | ||
| 969 | -// * <p> | ||
| 970 | -// * 通过key给field设置指定的值,如果key不存在则先创建,如果field已经存在,返回0 | ||
| 971 | -// * </p> | ||
| 972 | -// * | ||
| 973 | -// * @param key | ||
| 974 | -// * @param field | ||
| 975 | -// * @param value | ||
| 976 | -// * @return | ||
| 977 | -// */ | ||
| 978 | -// public Long hsetnx(String key, String field, String value) { | ||
| 979 | -// Jedis jedis = null; | ||
| 980 | -// Long res = null; | ||
| 981 | -// try { | ||
| 982 | -// jedis = jedisPool.getResource(); | ||
| 983 | -// jedis.select(indexdb); | ||
| 984 | -// res = jedis.hsetnx(key, field, value); | ||
| 985 | -// } catch (Exception e) { | ||
| 986 | -// | ||
| 987 | -// logger.error(e.getMessage()); | ||
| 988 | -// } finally { | ||
| 989 | -// returnResource(jedis); | ||
| 990 | -// } | ||
| 991 | -// return res; | ||
| 992 | -// } | ||
| 993 | -// | ||
| 994 | -// /** | ||
| 995 | -// * <p> | ||
| 996 | -// * 通过key同时设置 hash的多个field | ||
| 997 | -// * </p> | ||
| 998 | -// * | ||
| 999 | -// * @param key | ||
| 1000 | -// * @param hash | ||
| 1001 | -// * @return 返回OK 异常返回null | ||
| 1002 | -// */ | ||
| 1003 | -// public String hmset(String key, Map<String, String> hash, int indexdb) { | ||
| 1004 | -// Jedis jedis = null; | ||
| 1005 | -// String res = null; | ||
| 1006 | -// try { | ||
| 1007 | -// jedis = jedisPool.getResource(); | ||
| 1008 | -// jedis.select(indexdb); | ||
| 1009 | -// res = jedis.hmset(key, hash); | ||
| 1010 | -// } catch (Exception e) { | ||
| 1011 | -// | ||
| 1012 | -// logger.error(e.getMessage()); | ||
| 1013 | -// } finally { | ||
| 1014 | -// returnResource(jedis); | ||
| 1015 | -// } | ||
| 1016 | -// return res; | ||
| 1017 | -// } | ||
| 1018 | -// | ||
| 1019 | -// /** | ||
| 1020 | -// * <p> | ||
| 1021 | -// * 通过key 和 field 获取指定的 value | ||
| 1022 | -// * </p> | ||
| 1023 | -// * | ||
| 1024 | -// * @param key | ||
| 1025 | -// * @param field | ||
| 1026 | -// * @return 没有返回null | ||
| 1027 | -// */ | ||
| 1028 | -// public String hget(String key, String field) { | ||
| 1029 | -// Jedis jedis = null; | ||
| 1030 | -// String res = null; | ||
| 1031 | -// try { | ||
| 1032 | -// jedis = jedisPool.getResource(); | ||
| 1033 | -// jedis.select(indexdb); | ||
| 1034 | -// res = jedis.hget(key, field); | ||
| 1035 | -// } catch (Exception e) { | ||
| 1036 | -// | ||
| 1037 | -// logger.error(e.getMessage()); | ||
| 1038 | -// } finally { | ||
| 1039 | -// returnResource(jedis); | ||
| 1040 | -// } | ||
| 1041 | -// return res; | ||
| 1042 | -// } | ||
| 1043 | -// | ||
| 1044 | -// /** | ||
| 1045 | -// * <p> | ||
| 1046 | -// * 通过key 和 fields 获取指定的value 如果没有对应的value则返回null | ||
| 1047 | -// * </p> | ||
| 1048 | -// * | ||
| 1049 | -// * @param key | ||
| 1050 | -// * @param fields 可以使 一个String 也可以是 String数组 | ||
| 1051 | -// * @return | ||
| 1052 | -// */ | ||
| 1053 | -// public List<String> hmget(String key, int indexdb, String... fields) { | ||
| 1054 | -// Jedis jedis = null; | ||
| 1055 | -// List<String> res = null; | ||
| 1056 | -// try { | ||
| 1057 | -// jedis = jedisPool.getResource(); | ||
| 1058 | -// jedis.select(indexdb); | ||
| 1059 | -// res = jedis.hmget(key, fields); | ||
| 1060 | -// } catch (Exception e) { | ||
| 1061 | -// | ||
| 1062 | -// logger.error(e.getMessage()); | ||
| 1063 | -// } finally { | ||
| 1064 | -// returnResource(jedis); | ||
| 1065 | -// } | ||
| 1066 | -// return res; | ||
| 1067 | -// } | ||
| 1068 | -// | ||
| 1069 | -// /** | ||
| 1070 | -// * <p> | ||
| 1071 | -// * 通过key给指定的field的value加上给定的值 | ||
| 1072 | -// * </p> | ||
| 1073 | -// * | ||
| 1074 | -// * @param key | ||
| 1075 | -// * @param field | ||
| 1076 | -// * @param value | ||
| 1077 | -// * @return | ||
| 1078 | -// */ | ||
| 1079 | -// public Long hincrby(String key, String field, Long value) { | ||
| 1080 | -// Jedis jedis = null; | ||
| 1081 | -// Long res = null; | ||
| 1082 | -// try { | ||
| 1083 | -// jedis = jedisPool.getResource(); | ||
| 1084 | -// jedis.select(indexdb); | ||
| 1085 | -// res = jedis.hincrBy(key, field, value); | ||
| 1086 | -// } catch (Exception e) { | ||
| 1087 | -// | ||
| 1088 | -// logger.error(e.getMessage()); | ||
| 1089 | -// } finally { | ||
| 1090 | -// returnResource(jedis); | ||
| 1091 | -// } | ||
| 1092 | -// return res; | ||
| 1093 | -// } | ||
| 1094 | -// | ||
| 1095 | -// /** | ||
| 1096 | -// * <p> | ||
| 1097 | -// * 通过key和field判断是否有指定的value存在 | ||
| 1098 | -// * </p> | ||
| 1099 | -// * | ||
| 1100 | -// * @param key | ||
| 1101 | -// * @param field | ||
| 1102 | -// * @return | ||
| 1103 | -// */ | ||
| 1104 | -// public Boolean hexists(String key, String field) { | ||
| 1105 | -// Jedis jedis = null; | ||
| 1106 | -// Boolean res = false; | ||
| 1107 | -// try { | ||
| 1108 | -// jedis = jedisPool.getResource(); | ||
| 1109 | -// jedis.select(indexdb); | ||
| 1110 | -// res = jedis.hexists(key, field); | ||
| 1111 | -// } catch (Exception e) { | ||
| 1112 | -// | ||
| 1113 | -// logger.error(e.getMessage()); | ||
| 1114 | -// } finally { | ||
| 1115 | -// returnResource(jedis); | ||
| 1116 | -// } | ||
| 1117 | -// return res; | ||
| 1118 | -// } | ||
| 1119 | -// | ||
| 1120 | -// /** | ||
| 1121 | -// * <p> | ||
| 1122 | -// * 通过key返回field的数量 | ||
| 1123 | -// * </p> | ||
| 1124 | -// * | ||
| 1125 | -// * @param key | ||
| 1126 | -// * @return | ||
| 1127 | -// */ | ||
| 1128 | -// public Long hlen(String key) { | ||
| 1129 | -// Jedis jedis = null; | ||
| 1130 | -// Long res = null; | ||
| 1131 | -// try { | ||
| 1132 | -// jedis = jedisPool.getResource(); | ||
| 1133 | -// jedis.select(indexdb); | ||
| 1134 | -// res = jedis.hlen(key); | ||
| 1135 | -// } catch (Exception e) { | ||
| 1136 | -// | ||
| 1137 | -// logger.error(e.getMessage()); | ||
| 1138 | -// } finally { | ||
| 1139 | -// returnResource(jedis); | ||
| 1140 | -// } | ||
| 1141 | -// return res; | ||
| 1142 | -// | ||
| 1143 | -// } | ||
| 1144 | -// | ||
| 1145 | -// /** | ||
| 1146 | -// * <p> | ||
| 1147 | -// * 通过key 删除指定的 field | ||
| 1148 | -// * </p> | ||
| 1149 | -// * | ||
| 1150 | -// * @param key | ||
| 1151 | -// * @param fields 可以是 一个 field 也可以是 一个数组 | ||
| 1152 | -// * @return | ||
| 1153 | -// */ | ||
| 1154 | -// public Long hdel(String key, String... fields) { | ||
| 1155 | -// Jedis jedis = null; | ||
| 1156 | -// Long res = null; | ||
| 1157 | -// try { | ||
| 1158 | -// jedis = jedisPool.getResource(); | ||
| 1159 | -// jedis.select(indexdb); | ||
| 1160 | -// res = jedis.hdel(key, fields); | ||
| 1161 | -// } catch (Exception e) { | ||
| 1162 | -// | ||
| 1163 | -// logger.error(e.getMessage()); | ||
| 1164 | -// } finally { | ||
| 1165 | -// returnResource(jedis); | ||
| 1166 | -// } | ||
| 1167 | -// return res; | ||
| 1168 | -// } | ||
| 1169 | -// | ||
| 1170 | -// /** | ||
| 1171 | -// * <p> | ||
| 1172 | -// * 通过key返回所有的field | ||
| 1173 | -// * </p> | ||
| 1174 | -// * | ||
| 1175 | -// * @param key | ||
| 1176 | -// * @return | ||
| 1177 | -// */ | ||
| 1178 | -// public Set<String> hkeys(String key) { | ||
| 1179 | -// Jedis jedis = null; | ||
| 1180 | -// Set<String> res = null; | ||
| 1181 | -// try { | ||
| 1182 | -// jedis = jedisPool.getResource(); | ||
| 1183 | -// jedis.select(indexdb); | ||
| 1184 | -// res = jedis.hkeys(key); | ||
| 1185 | -// } catch (Exception e) { | ||
| 1186 | -// | ||
| 1187 | -// logger.error(e.getMessage()); | ||
| 1188 | -// } finally { | ||
| 1189 | -// returnResource(jedis); | ||
| 1190 | -// } | ||
| 1191 | -// return res; | ||
| 1192 | -// } | ||
| 1193 | -// | ||
| 1194 | -// /** | ||
| 1195 | -// * <p> | ||
| 1196 | -// * 通过key返回所有和key有关的value | ||
| 1197 | -// * </p> | ||
| 1198 | -// * | ||
| 1199 | -// * @param key | ||
| 1200 | -// * @return | ||
| 1201 | -// */ | ||
| 1202 | -// public List<String> hvals(String key) { | ||
| 1203 | -// Jedis jedis = null; | ||
| 1204 | -// List<String> res = null; | ||
| 1205 | -// try { | ||
| 1206 | -// jedis = jedisPool.getResource(); | ||
| 1207 | -// jedis.select(indexdb); | ||
| 1208 | -// res = jedis.hvals(key); | ||
| 1209 | -// } catch (Exception e) { | ||
| 1210 | -// | ||
| 1211 | -// logger.error(e.getMessage()); | ||
| 1212 | -// } finally { | ||
| 1213 | -// returnResource(jedis); | ||
| 1214 | -// } | ||
| 1215 | -// return res; | ||
| 1216 | -// } | ||
| 1217 | -// | ||
| 1218 | -// /** | ||
| 1219 | -// * <p> | ||
| 1220 | -// * 通过key获取所有的field和value | ||
| 1221 | -// * </p> | ||
| 1222 | -// * | ||
| 1223 | -// * @param key | ||
| 1224 | -// * @return | ||
| 1225 | -// */ | ||
| 1226 | -// public Map<String, String> hgetall(String key, int indexdb) { | ||
| 1227 | -// Jedis jedis = null; | ||
| 1228 | -// Map<String, String> res = null; | ||
| 1229 | -// try { | ||
| 1230 | -// jedis = jedisPool.getResource(); | ||
| 1231 | -// jedis.select(indexdb); | ||
| 1232 | -// res = jedis.hgetAll(key); | ||
| 1233 | -// } catch (Exception e) { | ||
| 1234 | -// logger.error(e.getMessage()); | ||
| 1235 | -// } finally { | ||
| 1236 | -// returnResource(jedis); | ||
| 1237 | -// } | ||
| 1238 | -// return res; | ||
| 1239 | -// } | ||
| 1240 | -// | ||
| 1241 | -// /** | ||
| 1242 | -// * <p> | ||
| 1243 | -// * 通过key向list头部添加字符串 | ||
| 1244 | -// * </p> | ||
| 1245 | -// * | ||
| 1246 | -// * @param key | ||
| 1247 | -// * @param strs 可以使一个string 也可以使string数组 | ||
| 1248 | -// * @return 返回list的value个数 | ||
| 1249 | -// */ | ||
| 1250 | -// public Long lpush(int indexdb, String key, String... strs) { | ||
| 1251 | -// Jedis jedis = null; | ||
| 1252 | -// Long res = null; | ||
| 1253 | -// try { | ||
| 1254 | -// jedis = jedisPool.getResource(); | ||
| 1255 | -// jedis.select(indexdb); | ||
| 1256 | -// res = jedis.lpush(key, strs); | ||
| 1257 | -// } catch (Exception e) { | ||
| 1258 | -// | ||
| 1259 | -// logger.error(e.getMessage()); | ||
| 1260 | -// } finally { | ||
| 1261 | -// returnResource(jedis); | ||
| 1262 | -// } | ||
| 1263 | -// return res; | ||
| 1264 | -// } | ||
| 1265 | -// | ||
| 1266 | -// /** | ||
| 1267 | -// * <p> | ||
| 1268 | -// * 通过key向list尾部添加字符串 | ||
| 1269 | -// * </p> | ||
| 1270 | -// * | ||
| 1271 | -// * @param key | ||
| 1272 | -// * @param strs 可以使一个string 也可以使string数组 | ||
| 1273 | -// * @return 返回list的value个数 | ||
| 1274 | -// */ | ||
| 1275 | -// public Long rpush(String key, String... strs) { | ||
| 1276 | -// Jedis jedis = null; | ||
| 1277 | -// Long res = null; | ||
| 1278 | -// try { | ||
| 1279 | -// jedis = jedisPool.getResource(); | ||
| 1280 | -// jedis.select(indexdb); | ||
| 1281 | -// res = jedis.rpush(key, strs); | ||
| 1282 | -// } catch (Exception e) { | ||
| 1283 | -// | ||
| 1284 | -// logger.error(e.getMessage()); | ||
| 1285 | -// } finally { | ||
| 1286 | -// returnResource(jedis); | ||
| 1287 | -// } | ||
| 1288 | -// return res; | ||
| 1289 | -// } | ||
| 1290 | -// | ||
| 1291 | -// /** | ||
| 1292 | -// * <p> | ||
| 1293 | -// * 通过key在list指定的位置之前或者之后 添加字符串元素 | ||
| 1294 | -// * </p> | ||
| 1295 | -// * | ||
| 1296 | -// * @param key | ||
| 1297 | -// * @param where LIST_POSITION枚举类型 | ||
| 1298 | -// * @param pivot list里面的value | ||
| 1299 | -// * @param value 添加的value | ||
| 1300 | -// * @return | ||
| 1301 | -// */ | ||
| 1302 | -// public Long linsert(String key, LIST_POSITION where, String pivot, | ||
| 1303 | -// String value) { | ||
| 1304 | -// Jedis jedis = null; | ||
| 1305 | -// Long res = null; | ||
| 1306 | -// try { | ||
| 1307 | -// jedis = jedisPool.getResource(); | ||
| 1308 | -// jedis.select(indexdb); | ||
| 1309 | -// res = jedis.linsert(key, where, pivot, value); | ||
| 1310 | -// } catch (Exception e) { | ||
| 1311 | -// | ||
| 1312 | -// logger.error(e.getMessage()); | ||
| 1313 | -// } finally { | ||
| 1314 | -// returnResource(jedis); | ||
| 1315 | -// } | ||
| 1316 | -// return res; | ||
| 1317 | -// } | ||
| 1318 | -// | ||
| 1319 | -// /** | ||
| 1320 | -// * <p> | ||
| 1321 | -// * 通过key设置list指定下标位置的value | ||
| 1322 | -// * </p> | ||
| 1323 | -// * <p> | ||
| 1324 | -// * 如果下标超过list里面value的个数则报错 | ||
| 1325 | -// * </p> | ||
| 1326 | -// * | ||
| 1327 | -// * @param key | ||
| 1328 | -// * @param index 从0开始 | ||
| 1329 | -// * @param value | ||
| 1330 | -// * @return 成功返回OK | ||
| 1331 | -// */ | ||
| 1332 | -// public String lset(String key, Long index, String value) { | ||
| 1333 | -// Jedis jedis = null; | ||
| 1334 | -// String res = null; | ||
| 1335 | -// try { | ||
| 1336 | -// jedis = jedisPool.getResource(); | ||
| 1337 | -// jedis.select(indexdb); | ||
| 1338 | -// res = jedis.lset(key, index, value); | ||
| 1339 | -// } catch (Exception e) { | ||
| 1340 | -// | ||
| 1341 | -// logger.error(e.getMessage()); | ||
| 1342 | -// } finally { | ||
| 1343 | -// returnResource(jedis); | ||
| 1344 | -// } | ||
| 1345 | -// return res; | ||
| 1346 | -// } | ||
| 1347 | -// | ||
| 1348 | -// /** | ||
| 1349 | -// * <p> | ||
| 1350 | -// * 通过key从对应的list中删除指定的count个 和 value相同的元素 | ||
| 1351 | -// * </p> | ||
| 1352 | -// * | ||
| 1353 | -// * @param key | ||
| 1354 | -// * @param count 当count为0时删除全部 | ||
| 1355 | -// * @param value | ||
| 1356 | -// * @return 返回被删除的个数 | ||
| 1357 | -// */ | ||
| 1358 | -// public Long lrem(String key, long count, String value) { | ||
| 1359 | -// Jedis jedis = null; | ||
| 1360 | -// Long res = null; | ||
| 1361 | -// try { | ||
| 1362 | -// jedis = jedisPool.getResource(); | ||
| 1363 | -// jedis.select(indexdb); | ||
| 1364 | -// res = jedis.lrem(key, count, value); | ||
| 1365 | -// } catch (Exception e) { | ||
| 1366 | -// | ||
| 1367 | -// logger.error(e.getMessage()); | ||
| 1368 | -// } finally { | ||
| 1369 | -// returnResource(jedis); | ||
| 1370 | -// } | ||
| 1371 | -// return res; | ||
| 1372 | -// } | ||
| 1373 | -// | ||
| 1374 | -// /** | ||
| 1375 | -// * <p> | ||
| 1376 | -// * 通过key保留list中从strat下标开始到end下标结束的value值 | ||
| 1377 | -// * </p> | ||
| 1378 | -// * | ||
| 1379 | -// * @param key | ||
| 1380 | -// * @param start | ||
| 1381 | -// * @param end | ||
| 1382 | -// * @return 成功返回OK | ||
| 1383 | -// */ | ||
| 1384 | -// public String ltrim(String key, long start, long end) { | ||
| 1385 | -// Jedis jedis = null; | ||
| 1386 | -// String res = null; | ||
| 1387 | -// try { | ||
| 1388 | -// jedis = jedisPool.getResource(); | ||
| 1389 | -// jedis.select(indexdb); | ||
| 1390 | -// res = jedis.ltrim(key, start, end); | ||
| 1391 | -// } catch (Exception e) { | ||
| 1392 | -// | ||
| 1393 | -// logger.error(e.getMessage()); | ||
| 1394 | -// } finally { | ||
| 1395 | -// returnResource(jedis); | ||
| 1396 | -// } | ||
| 1397 | -// return res; | ||
| 1398 | -// } | ||
| 1399 | -// | ||
| 1400 | -// /** | ||
| 1401 | -// * <p> | ||
| 1402 | -// * 通过key从list的头部删除一个value,并返回该value | ||
| 1403 | -// * </p> | ||
| 1404 | -// * | ||
| 1405 | -// * @param key | ||
| 1406 | -// * @return | ||
| 1407 | -// */ | ||
| 1408 | -// synchronized public String lpop(String key) { | ||
| 1409 | -// Jedis jedis = null; | ||
| 1410 | -// String res = null; | ||
| 1411 | -// try { | ||
| 1412 | -// jedis = jedisPool.getResource(); | ||
| 1413 | -// jedis.select(indexdb); | ||
| 1414 | -// res = jedis.lpop(key); | ||
| 1415 | -// } catch (Exception e) { | ||
| 1416 | -// | ||
| 1417 | -// logger.error(e.getMessage()); | ||
| 1418 | -// } finally { | ||
| 1419 | -// returnResource(jedis); | ||
| 1420 | -// } | ||
| 1421 | -// return res; | ||
| 1422 | -// } | ||
| 1423 | -// | ||
| 1424 | -// /** | ||
| 1425 | -// * <p> | ||
| 1426 | -// * 通过key从list尾部删除一个value,并返回该元素 | ||
| 1427 | -// * </p> | ||
| 1428 | -// * | ||
| 1429 | -// * @param key | ||
| 1430 | -// * @return | ||
| 1431 | -// */ | ||
| 1432 | -// synchronized public String rpop(String key, int indexdb) { | ||
| 1433 | -// Jedis jedis = null; | ||
| 1434 | -// String res = null; | ||
| 1435 | -// try { | ||
| 1436 | -// jedis = jedisPool.getResource(); | ||
| 1437 | -// jedis.select(indexdb); | ||
| 1438 | -// res = jedis.rpop(key); | ||
| 1439 | -// } catch (Exception e) { | ||
| 1440 | -// | ||
| 1441 | -// logger.error(e.getMessage()); | ||
| 1442 | -// } finally { | ||
| 1443 | -// returnResource(jedis); | ||
| 1444 | -// } | ||
| 1445 | -// return res; | ||
| 1446 | -// } | ||
| 1447 | -// | ||
| 1448 | -// /** | ||
| 1449 | -// * <p> | ||
| 1450 | -// * 通过key从一个list的尾部删除一个value并添加到另一个list的头部,并返回该value | ||
| 1451 | -// * </p> | ||
| 1452 | -// * <p> | ||
| 1453 | -// * 如果第一个list为空或者不存在则返回null | ||
| 1454 | -// * </p> | ||
| 1455 | -// * | ||
| 1456 | -// * @param srckey | ||
| 1457 | -// * @param dstkey | ||
| 1458 | -// * @return | ||
| 1459 | -// */ | ||
| 1460 | -// public String rpoplpush(String srckey, String dstkey, int indexdb) { | ||
| 1461 | -// Jedis jedis = null; | ||
| 1462 | -// String res = null; | ||
| 1463 | -// try { | ||
| 1464 | -// jedis = jedisPool.getResource(); | ||
| 1465 | -// jedis.select(indexdb); | ||
| 1466 | -// res = jedis.rpoplpush(srckey, dstkey); | ||
| 1467 | -// } catch (Exception e) { | ||
| 1468 | -// | ||
| 1469 | -// logger.error(e.getMessage()); | ||
| 1470 | -// } finally { | ||
| 1471 | -// returnResource(jedis); | ||
| 1472 | -// } | ||
| 1473 | -// return res; | ||
| 1474 | -// } | ||
| 1475 | -// | ||
| 1476 | -// /** | ||
| 1477 | -// * <p> | ||
| 1478 | -// * 通过key获取list中指定下标位置的value | ||
| 1479 | -// * </p> | ||
| 1480 | -// * | ||
| 1481 | -// * @param key | ||
| 1482 | -// * @param index | ||
| 1483 | -// * @return 如果没有返回null | ||
| 1484 | -// */ | ||
| 1485 | -// public String lindex(String key, long index) { | ||
| 1486 | -// Jedis jedis = null; | ||
| 1487 | -// String res = null; | ||
| 1488 | -// try { | ||
| 1489 | -// jedis = jedisPool.getResource(); | ||
| 1490 | -// jedis.select(indexdb); | ||
| 1491 | -// res = jedis.lindex(key, index); | ||
| 1492 | -// } catch (Exception e) { | ||
| 1493 | -// | ||
| 1494 | -// logger.error(e.getMessage()); | ||
| 1495 | -// } finally { | ||
| 1496 | -// returnResource(jedis); | ||
| 1497 | -// } | ||
| 1498 | -// return res; | ||
| 1499 | -// } | ||
| 1500 | -// | ||
| 1501 | -// /** | ||
| 1502 | -// * <p> | ||
| 1503 | -// * 通过key返回list的长度 | ||
| 1504 | -// * </p> | ||
| 1505 | -// * | ||
| 1506 | -// * @param key | ||
| 1507 | -// * @return | ||
| 1508 | -// */ | ||
| 1509 | -// public Long llen(String key) { | ||
| 1510 | -// Jedis jedis = null; | ||
| 1511 | -// Long res = null; | ||
| 1512 | -// try { | ||
| 1513 | -// jedis = jedisPool.getResource(); | ||
| 1514 | -// jedis.select(indexdb); | ||
| 1515 | -// res = jedis.llen(key); | ||
| 1516 | -// } catch (Exception e) { | ||
| 1517 | -// | ||
| 1518 | -// logger.error(e.getMessage()); | ||
| 1519 | -// } finally { | ||
| 1520 | -// returnResource(jedis); | ||
| 1521 | -// } | ||
| 1522 | -// return res; | ||
| 1523 | -// } | ||
| 1524 | -// | ||
| 1525 | -// /** | ||
| 1526 | -// * <p> | ||
| 1527 | -// * 通过key获取list指定下标位置的value | ||
| 1528 | -// * </p> | ||
| 1529 | -// * <p> | ||
| 1530 | -// * 如果start 为 0 end 为 -1 则返回全部的list中的value | ||
| 1531 | -// * </p> | ||
| 1532 | -// * | ||
| 1533 | -// * @param key | ||
| 1534 | -// * @param start | ||
| 1535 | -// * @param end | ||
| 1536 | -// * @return | ||
| 1537 | -// */ | ||
| 1538 | -// public List<String> lrange(String key, long start, long end, int indexdb) { | ||
| 1539 | -// Jedis jedis = null; | ||
| 1540 | -// List<String> res = null; | ||
| 1541 | -// try { | ||
| 1542 | -// jedis = jedisPool.getResource(); | ||
| 1543 | -// jedis.select(indexdb); | ||
| 1544 | -// res = jedis.lrange(key, start, end); | ||
| 1545 | -// } catch (Exception e) { | ||
| 1546 | -// | ||
| 1547 | -// logger.error(e.getMessage()); | ||
| 1548 | -// } finally { | ||
| 1549 | -// returnResource(jedis); | ||
| 1550 | -// } | ||
| 1551 | -// return res; | ||
| 1552 | -// } | ||
| 1553 | -// | ||
| 1554 | -// /** | ||
| 1555 | -// * <p> | ||
| 1556 | -// * 将列表 key 下标为 index 的元素的值设置为 value | ||
| 1557 | -// * </p> | ||
| 1558 | -// * | ||
| 1559 | -// * @param key | ||
| 1560 | -// * @param index | ||
| 1561 | -// * @param value | ||
| 1562 | -// * @return 操作成功返回 ok ,否则返回错误信息 | ||
| 1563 | -// */ | ||
| 1564 | -// public String lset(String key, long index, String value) { | ||
| 1565 | -// Jedis jedis = null; | ||
| 1566 | -// try { | ||
| 1567 | -// jedis = jedisPool.getResource(); | ||
| 1568 | -// jedis.select(indexdb); | ||
| 1569 | -// return jedis.lset(key, index, value); | ||
| 1570 | -// } catch (Exception e) { | ||
| 1571 | -// | ||
| 1572 | -// logger.error(e.getMessage()); | ||
| 1573 | -// } finally { | ||
| 1574 | -// returnResource(jedis); | ||
| 1575 | -// } | ||
| 1576 | -// return null; | ||
| 1577 | -// } | ||
| 1578 | -// | ||
| 1579 | -// /** | ||
| 1580 | -// * <p> | ||
| 1581 | -// * 返回给定排序后的结果 | ||
| 1582 | -// * </p> | ||
| 1583 | -// * | ||
| 1584 | -// * @param key | ||
| 1585 | -// * @param sortingParameters | ||
| 1586 | -// * @return 返回列表形式的排序结果 | ||
| 1587 | -// */ | ||
| 1588 | -// public List<String> sort(String key, SortingParams sortingParameters) { | ||
| 1589 | -// Jedis jedis = null; | ||
| 1590 | -// try { | ||
| 1591 | -// jedis = jedisPool.getResource(); | ||
| 1592 | -// jedis.select(indexdb); | ||
| 1593 | -// return jedis.sort(key, sortingParameters); | ||
| 1594 | -// } catch (Exception e) { | ||
| 1595 | -// | ||
| 1596 | -// logger.error(e.getMessage()); | ||
| 1597 | -// } finally { | ||
| 1598 | -// returnResource(jedis); | ||
| 1599 | -// } | ||
| 1600 | -// return null; | ||
| 1601 | -// } | ||
| 1602 | -// | ||
| 1603 | -// /** | ||
| 1604 | -// * <p> | ||
| 1605 | -// * 返回排序后的结果,排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。 | ||
| 1606 | -// * </p> | ||
| 1607 | -// * | ||
| 1608 | -// * @param key | ||
| 1609 | -// * @return 返回列表形式的排序结果 | ||
| 1610 | -// */ | ||
| 1611 | -// public List<String> sort(String key) { | ||
| 1612 | -// Jedis jedis = null; | ||
| 1613 | -// try { | ||
| 1614 | -// jedis = jedisPool.getResource(); | ||
| 1615 | -// jedis.select(indexdb); | ||
| 1616 | -// return jedis.sort(key); | ||
| 1617 | -// } catch (Exception e) { | ||
| 1618 | -// | ||
| 1619 | -// logger.error(e.getMessage()); | ||
| 1620 | -// } finally { | ||
| 1621 | -// returnResource(jedis); | ||
| 1622 | -// } | ||
| 1623 | -// return null; | ||
| 1624 | -// } | ||
| 1625 | -// | ||
| 1626 | -// /** | ||
| 1627 | -// * <p> | ||
| 1628 | -// * 通过key向指定的set中添加value | ||
| 1629 | -// * </p> | ||
| 1630 | -// * | ||
| 1631 | -// * @param key | ||
| 1632 | -// * @param members 可以是一个String 也可以是一个String数组 | ||
| 1633 | -// * @return 添加成功的个数 | ||
| 1634 | -// */ | ||
| 1635 | -// public Long sadd(String key, String... members) { | ||
| 1636 | -// Jedis jedis = null; | ||
| 1637 | -// Long res = null; | ||
| 1638 | -// try { | ||
| 1639 | -// jedis = jedisPool.getResource(); | ||
| 1640 | -// jedis.select(indexdb); | ||
| 1641 | -// res = jedis.sadd(key, members); | ||
| 1642 | -// } catch (Exception e) { | ||
| 1643 | -// | ||
| 1644 | -// logger.error(e.getMessage()); | ||
| 1645 | -// } finally { | ||
| 1646 | -// returnResource(jedis); | ||
| 1647 | -// } | ||
| 1648 | -// return res; | ||
| 1649 | -// } | ||
| 1650 | -// | ||
| 1651 | -// /** | ||
| 1652 | -// * <p> | ||
| 1653 | -// * 通过key删除set中对应的value值 | ||
| 1654 | -// * </p> | ||
| 1655 | -// * | ||
| 1656 | -// * @param key | ||
| 1657 | -// * @param members 可以是一个String 也可以是一个String数组 | ||
| 1658 | -// * @return 删除的个数 | ||
| 1659 | -// */ | ||
| 1660 | -// public Long srem(String key, String... members) { | ||
| 1661 | -// Jedis jedis = null; | ||
| 1662 | -// Long res = null; | ||
| 1663 | -// try { | ||
| 1664 | -// jedis = jedisPool.getResource(); | ||
| 1665 | -// jedis.select(indexdb); | ||
| 1666 | -// res = jedis.srem(key, members); | ||
| 1667 | -// } catch (Exception e) { | ||
| 1668 | -// | ||
| 1669 | -// logger.error(e.getMessage()); | ||
| 1670 | -// } finally { | ||
| 1671 | -// returnResource(jedis); | ||
| 1672 | -// } | ||
| 1673 | -// return res; | ||
| 1674 | -// } | ||
| 1675 | -// | ||
| 1676 | -// /** | ||
| 1677 | -// * <p> | ||
| 1678 | -// * 通过key随机删除一个set中的value并返回该值 | ||
| 1679 | -// * </p> | ||
| 1680 | -// * | ||
| 1681 | -// * @param key | ||
| 1682 | -// * @return | ||
| 1683 | -// */ | ||
| 1684 | -// public String spop(String key) { | ||
| 1685 | -// Jedis jedis = null; | ||
| 1686 | -// String res = null; | ||
| 1687 | -// try { | ||
| 1688 | -// jedis = jedisPool.getResource(); | ||
| 1689 | -// jedis.select(indexdb); | ||
| 1690 | -// res = jedis.spop(key); | ||
| 1691 | -// } catch (Exception e) { | ||
| 1692 | -// | ||
| 1693 | -// logger.error(e.getMessage()); | ||
| 1694 | -// } finally { | ||
| 1695 | -// returnResource(jedis); | ||
| 1696 | -// } | ||
| 1697 | -// return res; | ||
| 1698 | -// } | ||
| 1699 | -// | ||
| 1700 | -// /** | ||
| 1701 | -// * <p> | ||
| 1702 | -// * 通过key获取set中的差集 | ||
| 1703 | -// * </p> | ||
| 1704 | -// * <p> | ||
| 1705 | -// * 以第一个set为标准 | ||
| 1706 | -// * </p> | ||
| 1707 | -// * | ||
| 1708 | -// * @param keys 可以使一个string 则返回set中所有的value 也可以是string数组 | ||
| 1709 | -// * @return | ||
| 1710 | -// */ | ||
| 1711 | -// public Set<String> sdiff(String... keys) { | ||
| 1712 | -// Jedis jedis = null; | ||
| 1713 | -// Set<String> res = null; | ||
| 1714 | -// try { | ||
| 1715 | -// jedis = jedisPool.getResource(); | ||
| 1716 | -// jedis.select(indexdb); | ||
| 1717 | -// res = jedis.sdiff(keys); | ||
| 1718 | -// } catch (Exception e) { | ||
| 1719 | -// | ||
| 1720 | -// logger.error(e.getMessage()); | ||
| 1721 | -// } finally { | ||
| 1722 | -// returnResource(jedis); | ||
| 1723 | -// } | ||
| 1724 | -// return res; | ||
| 1725 | -// } | ||
| 1726 | -// | ||
| 1727 | -// /** | ||
| 1728 | -// * <p> | ||
| 1729 | -// * 通过key获取set中的差集并存入到另一个key中 | ||
| 1730 | -// * </p> | ||
| 1731 | -// * <p> | ||
| 1732 | -// * 以第一个set为标准 | ||
| 1733 | -// * </p> | ||
| 1734 | -// * | ||
| 1735 | -// * @param dstkey 差集存入的key | ||
| 1736 | -// * @param keys 可以使一个string 则返回set中所有的value 也可以是string数组 | ||
| 1737 | -// * @return | ||
| 1738 | -// */ | ||
| 1739 | -// public Long sdiffstore(String dstkey, String... keys) { | ||
| 1740 | -// Jedis jedis = null; | ||
| 1741 | -// Long res = null; | ||
| 1742 | -// try { | ||
| 1743 | -// jedis = jedisPool.getResource(); | ||
| 1744 | -// jedis.select(indexdb); | ||
| 1745 | -// res = jedis.sdiffstore(dstkey, keys); | ||
| 1746 | -// } catch (Exception e) { | ||
| 1747 | -// | ||
| 1748 | -// logger.error(e.getMessage()); | ||
| 1749 | -// } finally { | ||
| 1750 | -// returnResource(jedis); | ||
| 1751 | -// } | ||
| 1752 | -// return res; | ||
| 1753 | -// } | ||
| 1754 | -// | ||
| 1755 | -// /** | ||
| 1756 | -// * <p> | ||
| 1757 | -// * 通过key获取指定set中的交集 | ||
| 1758 | -// * </p> | ||
| 1759 | -// * | ||
| 1760 | -// * @param keys 可以使一个string 也可以是一个string数组 | ||
| 1761 | -// * @return | ||
| 1762 | -// */ | ||
| 1763 | -// public Set<String> sinter(String... keys) { | ||
| 1764 | -// Jedis jedis = null; | ||
| 1765 | -// Set<String> res = null; | ||
| 1766 | -// try { | ||
| 1767 | -// jedis = jedisPool.getResource(); | ||
| 1768 | -// jedis.select(indexdb); | ||
| 1769 | -// res = jedis.sinter(keys); | ||
| 1770 | -// } catch (Exception e) { | ||
| 1771 | -// | ||
| 1772 | -// logger.error(e.getMessage()); | ||
| 1773 | -// } finally { | ||
| 1774 | -// returnResource(jedis); | ||
| 1775 | -// } | ||
| 1776 | -// return res; | ||
| 1777 | -// } | ||
| 1778 | -// | ||
| 1779 | -// /** | ||
| 1780 | -// * <p> | ||
| 1781 | -// * 通过key获取指定set中的交集 并将结果存入新的set中 | ||
| 1782 | -// * </p> | ||
| 1783 | -// * | ||
| 1784 | -// * @param dstkey | ||
| 1785 | -// * @param keys 可以使一个string 也可以是一个string数组 | ||
| 1786 | -// * @return | ||
| 1787 | -// */ | ||
| 1788 | -// public Long sinterstore(String dstkey, String... keys) { | ||
| 1789 | -// Jedis jedis = null; | ||
| 1790 | -// Long res = null; | ||
| 1791 | -// try { | ||
| 1792 | -// jedis = jedisPool.getResource(); | ||
| 1793 | -// jedis.select(indexdb); | ||
| 1794 | -// res = jedis.sinterstore(dstkey, keys); | ||
| 1795 | -// } catch (Exception e) { | ||
| 1796 | -// | ||
| 1797 | -// logger.error(e.getMessage()); | ||
| 1798 | -// } finally { | ||
| 1799 | -// returnResource(jedis); | ||
| 1800 | -// } | ||
| 1801 | -// return res; | ||
| 1802 | -// } | ||
| 1803 | -// | ||
| 1804 | -// /** | ||
| 1805 | -// * <p> | ||
| 1806 | -// * 通过key返回所有set的并集 | ||
| 1807 | -// * </p> | ||
| 1808 | -// * | ||
| 1809 | -// * @param keys 可以使一个string 也可以是一个string数组 | ||
| 1810 | -// * @return | ||
| 1811 | -// */ | ||
| 1812 | -// public Set<String> sunion(String... keys) { | ||
| 1813 | -// Jedis jedis = null; | ||
| 1814 | -// Set<String> res = null; | ||
| 1815 | -// try { | ||
| 1816 | -// jedis = jedisPool.getResource(); | ||
| 1817 | -// jedis.select(indexdb); | ||
| 1818 | -// res = jedis.sunion(keys); | ||
| 1819 | -// } catch (Exception e) { | ||
| 1820 | -// | ||
| 1821 | -// logger.error(e.getMessage()); | ||
| 1822 | -// } finally { | ||
| 1823 | -// returnResource(jedis); | ||
| 1824 | -// } | ||
| 1825 | -// return res; | ||
| 1826 | -// } | ||
| 1827 | -// | ||
| 1828 | -// /** | ||
| 1829 | -// * <p> | ||
| 1830 | -// * 通过key返回所有set的并集,并存入到新的set中 | ||
| 1831 | -// * </p> | ||
| 1832 | -// * | ||
| 1833 | -// * @param dstkey | ||
| 1834 | -// * @param keys 可以使一个string 也可以是一个string数组 | ||
| 1835 | -// * @return | ||
| 1836 | -// */ | ||
| 1837 | -// public Long sunionstore(String dstkey, String... keys) { | ||
| 1838 | -// Jedis jedis = null; | ||
| 1839 | -// Long res = null; | ||
| 1840 | -// try { | ||
| 1841 | -// jedis = jedisPool.getResource(); | ||
| 1842 | -// jedis.select(indexdb); | ||
| 1843 | -// res = jedis.sunionstore(dstkey, keys); | ||
| 1844 | -// } catch (Exception e) { | ||
| 1845 | -// | ||
| 1846 | -// logger.error(e.getMessage()); | ||
| 1847 | -// } finally { | ||
| 1848 | -// returnResource(jedis); | ||
| 1849 | -// } | ||
| 1850 | -// return res; | ||
| 1851 | -// } | ||
| 1852 | -// | ||
| 1853 | -// /** | ||
| 1854 | -// * <p> | ||
| 1855 | -// * 通过key将set中的value移除并添加到第二个set中 | ||
| 1856 | -// * </p> | ||
| 1857 | -// * | ||
| 1858 | -// * @param srckey 需要移除的 | ||
| 1859 | -// * @param dstkey 添加的 | ||
| 1860 | -// * @param member set中的value | ||
| 1861 | -// * @return | ||
| 1862 | -// */ | ||
| 1863 | -// public Long smove(String srckey, String dstkey, String member) { | ||
| 1864 | -// Jedis jedis = null; | ||
| 1865 | -// Long res = null; | ||
| 1866 | -// try { | ||
| 1867 | -// jedis = jedisPool.getResource(); | ||
| 1868 | -// jedis.select(indexdb); | ||
| 1869 | -// res = jedis.smove(srckey, dstkey, member); | ||
| 1870 | -// } catch (Exception e) { | ||
| 1871 | -// | ||
| 1872 | -// logger.error(e.getMessage()); | ||
| 1873 | -// } finally { | ||
| 1874 | -// returnResource(jedis); | ||
| 1875 | -// } | ||
| 1876 | -// return res; | ||
| 1877 | -// } | ||
| 1878 | -// | ||
| 1879 | -// /** | ||
| 1880 | -// * <p> | ||
| 1881 | -// * 通过key获取set中value的个数 | ||
| 1882 | -// * </p> | ||
| 1883 | -// * | ||
| 1884 | -// * @param key | ||
| 1885 | -// * @return | ||
| 1886 | -// */ | ||
| 1887 | -// public Long scard(String key) { | ||
| 1888 | -// Jedis jedis = null; | ||
| 1889 | -// Long res = null; | ||
| 1890 | -// try { | ||
| 1891 | -// jedis = jedisPool.getResource(); | ||
| 1892 | -// jedis.select(indexdb); | ||
| 1893 | -// res = jedis.scard(key); | ||
| 1894 | -// } catch (Exception e) { | ||
| 1895 | -// | ||
| 1896 | -// logger.error(e.getMessage()); | ||
| 1897 | -// } finally { | ||
| 1898 | -// returnResource(jedis); | ||
| 1899 | -// } | ||
| 1900 | -// return res; | ||
| 1901 | -// } | ||
| 1902 | -// | ||
| 1903 | -// /** | ||
| 1904 | -// * <p> | ||
| 1905 | -// * 通过key判断value是否是set中的元素 | ||
| 1906 | -// * </p> | ||
| 1907 | -// * | ||
| 1908 | -// * @param key | ||
| 1909 | -// * @param member | ||
| 1910 | -// * @return | ||
| 1911 | -// */ | ||
| 1912 | -// public Boolean sismember(String key, String member) { | ||
| 1913 | -// Jedis jedis = null; | ||
| 1914 | -// Boolean res = null; | ||
| 1915 | -// try { | ||
| 1916 | -// jedis = jedisPool.getResource(); | ||
| 1917 | -// jedis.select(indexdb); | ||
| 1918 | -// res = jedis.sismember(key, member); | ||
| 1919 | -// } catch (Exception e) { | ||
| 1920 | -// | ||
| 1921 | -// logger.error(e.getMessage()); | ||
| 1922 | -// } finally { | ||
| 1923 | -// returnResource(jedis); | ||
| 1924 | -// } | ||
| 1925 | -// return res; | ||
| 1926 | -// } | ||
| 1927 | -// | ||
| 1928 | -// /** | ||
| 1929 | -// * <p> | ||
| 1930 | -// * 通过key获取set中随机的value,不删除元素 | ||
| 1931 | -// * </p> | ||
| 1932 | -// * | ||
| 1933 | -// * @param key | ||
| 1934 | -// * @return | ||
| 1935 | -// */ | ||
| 1936 | -// public String srandmember(String key) { | ||
| 1937 | -// Jedis jedis = null; | ||
| 1938 | -// String res = null; | ||
| 1939 | -// try { | ||
| 1940 | -// jedis = jedisPool.getResource(); | ||
| 1941 | -// jedis.select(indexdb); | ||
| 1942 | -// res = jedis.srandmember(key); | ||
| 1943 | -// } catch (Exception e) { | ||
| 1944 | -// | ||
| 1945 | -// logger.error(e.getMessage()); | ||
| 1946 | -// } finally { | ||
| 1947 | -// returnResource(jedis); | ||
| 1948 | -// } | ||
| 1949 | -// return res; | ||
| 1950 | -// } | ||
| 1951 | -// | ||
| 1952 | -// /** | ||
| 1953 | -// * <p> | ||
| 1954 | -// * 通过key获取set中所有的value | ||
| 1955 | -// * </p> | ||
| 1956 | -// * | ||
| 1957 | -// * @param key | ||
| 1958 | -// * @return | ||
| 1959 | -// */ | ||
| 1960 | -// public Set<String> smembers(String key) { | ||
| 1961 | -// Jedis jedis = null; | ||
| 1962 | -// Set<String> res = null; | ||
| 1963 | -// try { | ||
| 1964 | -// jedis = jedisPool.getResource(); | ||
| 1965 | -// jedis.select(indexdb); | ||
| 1966 | -// res = jedis.smembers(key); | ||
| 1967 | -// } catch (Exception e) { | ||
| 1968 | -// | ||
| 1969 | -// logger.error(e.getMessage()); | ||
| 1970 | -// } finally { | ||
| 1971 | -// returnResource(jedis); | ||
| 1972 | -// } | ||
| 1973 | -// return res; | ||
| 1974 | -// } | ||
| 1975 | -// | ||
| 1976 | -// /** | ||
| 1977 | -// * <p> | ||
| 1978 | -// * 通过key向zset中添加value,score,其中score就是用来排序的 | ||
| 1979 | -// * </p> | ||
| 1980 | -// * <p> | ||
| 1981 | -// * 如果该value已经存在则根据score更新元素 | ||
| 1982 | -// * </p> | ||
| 1983 | -// * | ||
| 1984 | -// * @param key | ||
| 1985 | -// * @param score | ||
| 1986 | -// * @param member | ||
| 1987 | -// * @return | ||
| 1988 | -// */ | ||
| 1989 | -// public Long zadd(String key, double score, String member) { | ||
| 1990 | -// Jedis jedis = null; | ||
| 1991 | -// Long res = null; | ||
| 1992 | -// try { | ||
| 1993 | -// jedis = jedisPool.getResource(); | ||
| 1994 | -// jedis.select(indexdb); | ||
| 1995 | -// res = jedis.zadd(key, score, member); | ||
| 1996 | -// } catch (Exception e) { | ||
| 1997 | -// | ||
| 1998 | -// logger.error(e.getMessage()); | ||
| 1999 | -// } finally { | ||
| 2000 | -// returnResource(jedis); | ||
| 2001 | -// } | ||
| 2002 | -// return res; | ||
| 2003 | -// } | ||
| 2004 | -// | ||
| 2005 | -// /** | ||
| 2006 | -// * <p> | ||
| 2007 | -// * 返回有序集 key 中,指定区间内的成员。min=0,max=-1代表所有元素 | ||
| 2008 | -// * </p> | ||
| 2009 | -// * | ||
| 2010 | -// * @param key | ||
| 2011 | -// * @param min | ||
| 2012 | -// * @param max | ||
| 2013 | -// * @return 指定区间内的有序集成员的列表。 | ||
| 2014 | -// */ | ||
| 2015 | -// public Set<String> zrange(String key, long min, long max) { | ||
| 2016 | -// Jedis jedis = null; | ||
| 2017 | -// try { | ||
| 2018 | -// jedis = jedisPool.getResource(); | ||
| 2019 | -// jedis.select(indexdb); | ||
| 2020 | -// return jedis.zrange(key, min, max); | ||
| 2021 | -// } catch (Exception e) { | ||
| 2022 | -// | ||
| 2023 | -// logger.error(e.getMessage()); | ||
| 2024 | -// } finally { | ||
| 2025 | -// returnResource(jedis); | ||
| 2026 | -// } | ||
| 2027 | -// return null; | ||
| 2028 | -// } | ||
| 2029 | -// | ||
| 2030 | -// /** | ||
| 2031 | -// * <p> | ||
| 2032 | -// * 统计有序集 key 中,值在 min 和 max 之间的成员的数量 | ||
| 2033 | -// * </p> | ||
| 2034 | -// * | ||
| 2035 | -// * @param key | ||
| 2036 | -// * @param min | ||
| 2037 | -// * @param max | ||
| 2038 | -// * @return 值在 min 和 max 之间的成员的数量。异常返回0 | ||
| 2039 | -// */ | ||
| 2040 | -// public Long zcount(String key, double min, double max) { | ||
| 2041 | -// Jedis jedis = null; | ||
| 2042 | -// try { | ||
| 2043 | -// jedis = jedisPool.getResource(); | ||
| 2044 | -// jedis.select(indexdb); | ||
| 2045 | -// return jedis.zcount(key, min, max); | ||
| 2046 | -// } catch (Exception e) { | ||
| 2047 | -// | ||
| 2048 | -// logger.error(e.getMessage()); | ||
| 2049 | -// return 0L; | ||
| 2050 | -// } finally { | ||
| 2051 | -// returnResource(jedis); | ||
| 2052 | -// } | ||
| 2053 | -// | ||
| 2054 | -// } | ||
| 2055 | -// | ||
| 2056 | -// /** | ||
| 2057 | -// * <p> | ||
| 2058 | -// * 为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。 如果 key | ||
| 2059 | -// * 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 | ||
| 2060 | -// * 对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。 | ||
| 2061 | -// * </p> | ||
| 2062 | -// * <p> | ||
| 2063 | -// * 将名称为key的hash中field的value增加integer | ||
| 2064 | -// * </p> | ||
| 2065 | -// * | ||
| 2066 | -// * @param key | ||
| 2067 | -// * @param value | ||
| 2068 | -// * @param increment | ||
| 2069 | -// * @return 执行 HINCRBY 命令之后,哈希表 key 中域 field的值。异常返回0 | ||
| 2070 | -// */ | ||
| 2071 | -// public Long hincrBy(String key, String value, long increment) { | ||
| 2072 | -// Jedis jedis = null; | ||
| 2073 | -// try { | ||
| 2074 | -// jedis = jedisPool.getResource(); | ||
| 2075 | -// jedis.select(indexdb); | ||
| 2076 | -// return jedis.hincrBy(key, value, increment); | ||
| 2077 | -// } catch (Exception e) { | ||
| 2078 | -// logger.error(e.getMessage()); | ||
| 2079 | -// return 0L; | ||
| 2080 | -// } finally { | ||
| 2081 | -// returnResource(jedis); | ||
| 2082 | -// } | ||
| 2083 | -// | ||
| 2084 | -// } | ||
| 2085 | -// | ||
| 2086 | -// /** | ||
| 2087 | -// * <p> | ||
| 2088 | -// * 通过key删除在zset中指定的value | ||
| 2089 | -// * </p> | ||
| 2090 | -// * | ||
| 2091 | -// * @param key | ||
| 2092 | -// * @param members 可以使一个string 也可以是一个string数组 | ||
| 2093 | -// * @return | ||
| 2094 | -// */ | ||
| 2095 | -// public Long zrem(String key, String... members) { | ||
| 2096 | -// Jedis jedis = null; | ||
| 2097 | -// Long res = null; | ||
| 2098 | -// try { | ||
| 2099 | -// jedis = jedisPool.getResource(); | ||
| 2100 | -// jedis.select(indexdb); | ||
| 2101 | -// res = jedis.zrem(key, members); | ||
| 2102 | -// } catch (Exception e) { | ||
| 2103 | -// | ||
| 2104 | -// logger.error(e.getMessage()); | ||
| 2105 | -// } finally { | ||
| 2106 | -// returnResource(jedis); | ||
| 2107 | -// } | ||
| 2108 | -// return res; | ||
| 2109 | -// } | ||
| 2110 | -// | ||
| 2111 | -// /** | ||
| 2112 | -// * <p> | ||
| 2113 | -// * 通过key增加该zset中value的score的值 | ||
| 2114 | -// * </p> | ||
| 2115 | -// * | ||
| 2116 | -// * @param key | ||
| 2117 | -// * @param score | ||
| 2118 | -// * @param member | ||
| 2119 | -// * @return | ||
| 2120 | -// */ | ||
| 2121 | -// public Double zincrby(String key, double score, String member) { | ||
| 2122 | -// Jedis jedis = null; | ||
| 2123 | -// Double res = null; | ||
| 2124 | -// try { | ||
| 2125 | -// jedis = jedisPool.getResource(); | ||
| 2126 | -// jedis.select(indexdb); | ||
| 2127 | -// res = jedis.zincrby(key, score, member); | ||
| 2128 | -// } catch (Exception e) { | ||
| 2129 | -// | ||
| 2130 | -// logger.error(e.getMessage()); | ||
| 2131 | -// } finally { | ||
| 2132 | -// returnResource(jedis); | ||
| 2133 | -// } | ||
| 2134 | -// return res; | ||
| 2135 | -// } | ||
| 2136 | -// | ||
| 2137 | -// /** | ||
| 2138 | -// * <p> | ||
| 2139 | -// * 通过key返回zset中value的排名 | ||
| 2140 | -// * </p> | ||
| 2141 | -// * <p> | ||
| 2142 | -// * 下标从小到大排序 | ||
| 2143 | -// * </p> | ||
| 2144 | -// * | ||
| 2145 | -// * @param key | ||
| 2146 | -// * @param member | ||
| 2147 | -// * @return | ||
| 2148 | -// */ | ||
| 2149 | -// public Long zrank(String key, String member) { | ||
| 2150 | -// Jedis jedis = null; | ||
| 2151 | -// Long res = null; | ||
| 2152 | -// try { | ||
| 2153 | -// jedis = jedisPool.getResource(); | ||
| 2154 | -// jedis.select(indexdb); | ||
| 2155 | -// res = jedis.zrank(key, member); | ||
| 2156 | -// } catch (Exception e) { | ||
| 2157 | -// | ||
| 2158 | -// logger.error(e.getMessage()); | ||
| 2159 | -// } finally { | ||
| 2160 | -// returnResource(jedis); | ||
| 2161 | -// } | ||
| 2162 | -// return res; | ||
| 2163 | -// } | ||
| 2164 | -// | ||
| 2165 | -// /** | ||
| 2166 | -// * <p> | ||
| 2167 | -// * 通过key返回zset中value的排名 | ||
| 2168 | -// * </p> | ||
| 2169 | -// * <p> | ||
| 2170 | -// * 下标从大到小排序 | ||
| 2171 | -// * </p> | ||
| 2172 | -// * | ||
| 2173 | -// * @param key | ||
| 2174 | -// * @param member | ||
| 2175 | -// * @return | ||
| 2176 | -// */ | ||
| 2177 | -// public Long zrevrank(String key, String member) { | ||
| 2178 | -// Jedis jedis = null; | ||
| 2179 | -// Long res = null; | ||
| 2180 | -// try { | ||
| 2181 | -// jedis = jedisPool.getResource(); | ||
| 2182 | -// jedis.select(indexdb); | ||
| 2183 | -// res = jedis.zrevrank(key, member); | ||
| 2184 | -// } catch (Exception e) { | ||
| 2185 | -// | ||
| 2186 | -// logger.error(e.getMessage()); | ||
| 2187 | -// } finally { | ||
| 2188 | -// returnResource(jedis); | ||
| 2189 | -// } | ||
| 2190 | -// return res; | ||
| 2191 | -// } | ||
| 2192 | -// | ||
| 2193 | -// /** | ||
| 2194 | -// * <p> | ||
| 2195 | -// * 通过key将获取score从start到end中zset的value | ||
| 2196 | -// * </p> | ||
| 2197 | -// * <p> | ||
| 2198 | -// * socre从大到小排序 | ||
| 2199 | -// * </p> | ||
| 2200 | -// * <p> | ||
| 2201 | -// * 当start为0 end为-1时返回全部 | ||
| 2202 | -// * </p> | ||
| 2203 | -// * | ||
| 2204 | -// * @param key | ||
| 2205 | -// * @param start | ||
| 2206 | -// * @param end | ||
| 2207 | -// * @return | ||
| 2208 | -// */ | ||
| 2209 | -// public Set<String> zrevrange(String key, long start, long end) { | ||
| 2210 | -// Jedis jedis = null; | ||
| 2211 | -// Set<String> res = null; | ||
| 2212 | -// try { | ||
| 2213 | -// jedis = jedisPool.getResource(); | ||
| 2214 | -// jedis.select(indexdb); | ||
| 2215 | -// res = jedis.zrevrange(key, start, end); | ||
| 2216 | -// } catch (Exception e) { | ||
| 2217 | -// | ||
| 2218 | -// logger.error(e.getMessage()); | ||
| 2219 | -// } finally { | ||
| 2220 | -// returnResource(jedis); | ||
| 2221 | -// } | ||
| 2222 | -// return res; | ||
| 2223 | -// } | ||
| 2224 | -// | ||
| 2225 | -// /** | ||
| 2226 | -// * <p> | ||
| 2227 | -// * 通过key返回指定score内zset中的value | ||
| 2228 | -// * </p> | ||
| 2229 | -// * | ||
| 2230 | -// * @param key | ||
| 2231 | -// * @param max | ||
| 2232 | -// * @param min | ||
| 2233 | -// * @return | ||
| 2234 | -// */ | ||
| 2235 | -// public Set<String> zrangebyscore(String key, String max, String min) { | ||
| 2236 | -// Jedis jedis = null; | ||
| 2237 | -// Set<String> res = null; | ||
| 2238 | -// try { | ||
| 2239 | -// jedis = jedisPool.getResource(); | ||
| 2240 | -// jedis.select(indexdb); | ||
| 2241 | -// res = jedis.zrevrangeByScore(key, max, min); | ||
| 2242 | -// } catch (Exception e) { | ||
| 2243 | -// | ||
| 2244 | -// logger.error(e.getMessage()); | ||
| 2245 | -// } finally { | ||
| 2246 | -// returnResource(jedis); | ||
| 2247 | -// } | ||
| 2248 | -// return res; | ||
| 2249 | -// } | ||
| 2250 | -// | ||
| 2251 | -// /** | ||
| 2252 | -// * <p> | ||
| 2253 | -// * 通过key返回指定score内zset中的value | ||
| 2254 | -// * </p> | ||
| 2255 | -// * | ||
| 2256 | -// * @param key | ||
| 2257 | -// * @param max | ||
| 2258 | -// * @param min | ||
| 2259 | -// * @return | ||
| 2260 | -// */ | ||
| 2261 | -// public Set<String> zrangeByScore(String key, double max, double min) { | ||
| 2262 | -// Jedis jedis = null; | ||
| 2263 | -// Set<String> res = null; | ||
| 2264 | -// try { | ||
| 2265 | -// jedis = jedisPool.getResource(); | ||
| 2266 | -// jedis.select(indexdb); | ||
| 2267 | -// res = jedis.zrevrangeByScore(key, max, min); | ||
| 2268 | -// } catch (Exception e) { | ||
| 2269 | -// | ||
| 2270 | -// logger.error(e.getMessage()); | ||
| 2271 | -// } finally { | ||
| 2272 | -// returnResource(jedis); | ||
| 2273 | -// } | ||
| 2274 | -// return res; | ||
| 2275 | -// } | ||
| 2276 | -// | ||
| 2277 | -// /** | ||
| 2278 | -// * <p> | ||
| 2279 | -// * 返回指定区间内zset中value的数量 | ||
| 2280 | -// * </p> | ||
| 2281 | -// * | ||
| 2282 | -// * @param key | ||
| 2283 | -// * @param min | ||
| 2284 | -// * @param max | ||
| 2285 | -// * @return | ||
| 2286 | -// */ | ||
| 2287 | -// public Long zcount(String key, String min, String max) { | ||
| 2288 | -// Jedis jedis = null; | ||
| 2289 | -// Long res = null; | ||
| 2290 | -// try { | ||
| 2291 | -// jedis = jedisPool.getResource(); | ||
| 2292 | -// jedis.select(indexdb); | ||
| 2293 | -// res = jedis.zcount(key, min, max); | ||
| 2294 | -// } catch (Exception e) { | ||
| 2295 | -// | ||
| 2296 | -// logger.error(e.getMessage()); | ||
| 2297 | -// } finally { | ||
| 2298 | -// returnResource(jedis); | ||
| 2299 | -// } | ||
| 2300 | -// return res; | ||
| 2301 | -// } | ||
| 2302 | -// | ||
| 2303 | -// /** | ||
| 2304 | -// * <p> | ||
| 2305 | -// * 通过key返回zset中的value个数 | ||
| 2306 | -// * </p> | ||
| 2307 | -// * | ||
| 2308 | -// * @param key | ||
| 2309 | -// * @return | ||
| 2310 | -// */ | ||
| 2311 | -// public Long zcard(String key) { | ||
| 2312 | -// Jedis jedis = null; | ||
| 2313 | -// Long res = null; | ||
| 2314 | -// try { | ||
| 2315 | -// jedis = jedisPool.getResource(); | ||
| 2316 | -// jedis.select(indexdb); | ||
| 2317 | -// res = jedis.zcard(key); | ||
| 2318 | -// } catch (Exception e) { | ||
| 2319 | -// | ||
| 2320 | -// logger.error(e.getMessage()); | ||
| 2321 | -// } finally { | ||
| 2322 | -// returnResource(jedis); | ||
| 2323 | -// } | ||
| 2324 | -// return res; | ||
| 2325 | -// } | ||
| 2326 | -// | ||
| 2327 | -// /** | ||
| 2328 | -// * <p> | ||
| 2329 | -// * 通过key获取zset中value的score值 | ||
| 2330 | -// * </p> | ||
| 2331 | -// * | ||
| 2332 | -// * @param key | ||
| 2333 | -// * @param member | ||
| 2334 | -// * @return | ||
| 2335 | -// */ | ||
| 2336 | -// public Double zscore(String key, String member) { | ||
| 2337 | -// Jedis jedis = null; | ||
| 2338 | -// Double res = null; | ||
| 2339 | -// try { | ||
| 2340 | -// jedis = jedisPool.getResource(); | ||
| 2341 | -// jedis.select(indexdb); | ||
| 2342 | -// res = jedis.zscore(key, member); | ||
| 2343 | -// } catch (Exception e) { | ||
| 2344 | -// | ||
| 2345 | -// logger.error(e.getMessage()); | ||
| 2346 | -// } finally { | ||
| 2347 | -// returnResource(jedis); | ||
| 2348 | -// } | ||
| 2349 | -// return res; | ||
| 2350 | -// } | ||
| 2351 | -// | ||
| 2352 | -// /** | ||
| 2353 | -// * <p> | ||
| 2354 | -// * 通过key删除给定区间内的元素 | ||
| 2355 | -// * </p> | ||
| 2356 | -// * | ||
| 2357 | -// * @param key | ||
| 2358 | -// * @param start | ||
| 2359 | -// * @param end | ||
| 2360 | -// * @return | ||
| 2361 | -// */ | ||
| 2362 | -// public Long zremrangeByRank(String key, long start, long end) { | ||
| 2363 | -// Jedis jedis = null; | ||
| 2364 | -// Long res = null; | ||
| 2365 | -// try { | ||
| 2366 | -// jedis = jedisPool.getResource(); | ||
| 2367 | -// jedis.select(indexdb); | ||
| 2368 | -// res = jedis.zremrangeByRank(key, start, end); | ||
| 2369 | -// } catch (Exception e) { | ||
| 2370 | -// | ||
| 2371 | -// logger.error(e.getMessage()); | ||
| 2372 | -// } finally { | ||
| 2373 | -// returnResource(jedis); | ||
| 2374 | -// } | ||
| 2375 | -// return res; | ||
| 2376 | -// } | ||
| 2377 | -// | ||
| 2378 | -// /** | ||
| 2379 | -// * <p> | ||
| 2380 | -// * 通过key删除指定score内的元素 | ||
| 2381 | -// * </p> | ||
| 2382 | -// * | ||
| 2383 | -// * @param key | ||
| 2384 | -// * @param start | ||
| 2385 | -// * @param end | ||
| 2386 | -// * @return | ||
| 2387 | -// */ | ||
| 2388 | -// public Long zremrangeByScore(String key, double start, double end) { | ||
| 2389 | -// Jedis jedis = null; | ||
| 2390 | -// Long res = null; | ||
| 2391 | -// try { | ||
| 2392 | -// jedis = jedisPool.getResource(); | ||
| 2393 | -// jedis.select(indexdb); | ||
| 2394 | -// res = jedis.zremrangeByScore(key, start, end); | ||
| 2395 | -// } catch (Exception e) { | ||
| 2396 | -// | ||
| 2397 | -// logger.error(e.getMessage()); | ||
| 2398 | -// } finally { | ||
| 2399 | -// returnResource(jedis); | ||
| 2400 | -// } | ||
| 2401 | -// return res; | ||
| 2402 | -// } | ||
| 2403 | -// | ||
| 2404 | -// /**返回满足pattern表达式的所有 key*/ | ||
| 2405 | -// public Set<String> keys(String pattern) { | ||
| 2406 | -// Set<String> res = this.scan(pattern); | ||
| 2407 | -// return res; | ||
| 2408 | -// } | ||
| 2409 | -// | ||
| 2410 | -// /** | ||
| 2411 | -// * key模糊查找 | ||
| 2412 | -// * @param keys 要查找的key 例: aaa* ,aaa开头的所有key | ||
| 2413 | -// * @return 匹配到的key集合 | ||
| 2414 | -// */ | ||
| 2415 | -// public Set<String> scan(String keys) { | ||
| 2416 | -// return scan(keys,scanlimit); | ||
| 2417 | -// } | ||
| 2418 | -// | ||
| 2419 | -// /** | ||
| 2420 | -// * 根据match 查询redis中中的所有key | ||
| 2421 | -// * @param match input the argument "ONLINE_*" | ||
| 2422 | -// * @param limit 每次查询个数,不要太大 | ||
| 2423 | -// */ | ||
| 2424 | -// public Set<String> scan(String match,int limit) { | ||
| 2425 | -// HashSet<String> keySet = Sets.newHashSet(); | ||
| 2426 | -// Jedis jedis = null; | ||
| 2427 | -// try { | ||
| 2428 | -// jedis = jedisPool.getResource(); | ||
| 2429 | -// jedis.select(indexdb); | ||
| 2430 | -// //指定规则 | ||
| 2431 | -// ScanParams scanParams = new ScanParams().match(match).count(limit); | ||
| 2432 | -// boolean hasNext = true; | ||
| 2433 | -// //第一次查询的游标 | ||
| 2434 | -// String cursor = "0"; | ||
| 2435 | -// while (hasNext) { | ||
| 2436 | -// ScanResult<String> scanResult = jedis.scan(cursor,scanParams); | ||
| 2437 | -// //返回当前查询的key | ||
| 2438 | -// List<String> keyList = scanResult.getResult(); | ||
| 2439 | -// keySet.addAll(keyList); | ||
| 2440 | -// | ||
| 2441 | -// cursor = scanResult.getStringCursor(); | ||
| 2442 | -// if ("0".equals(cursor)) { | ||
| 2443 | -// hasNext = false; | ||
| 2444 | -// } | ||
| 2445 | -// } | ||
| 2446 | -// } catch (Exception e) { | ||
| 2447 | -// logger.error(e.getMessage()); | ||
| 2448 | -// } finally { | ||
| 2449 | -// returnResource(jedis); | ||
| 2450 | -// } | ||
| 2451 | -// return keySet; | ||
| 2452 | -// } | ||
| 2453 | -// | ||
| 2454 | -// /** | ||
| 2455 | -// * <p> | ||
| 2456 | -// * 通过key判断值得类型 | ||
| 2457 | -// * </p> | ||
| 2458 | -// * | ||
| 2459 | -// * @param key | ||
| 2460 | -// * @return | ||
| 2461 | -// */ | ||
| 2462 | -// public String type(String key) { | ||
| 2463 | -// Jedis jedis = null; | ||
| 2464 | -// String res = null; | ||
| 2465 | -// try { | ||
| 2466 | -// jedis = jedisPool.getResource(); | ||
| 2467 | -// jedis.select(indexdb); | ||
| 2468 | -// res = jedis.type(key); | ||
| 2469 | -// } catch (Exception e) { | ||
| 2470 | -// | ||
| 2471 | -// logger.error(e.getMessage()); | ||
| 2472 | -// } finally { | ||
| 2473 | -// returnResource(jedis); | ||
| 2474 | -// } | ||
| 2475 | -// return res; | ||
| 2476 | -// } | ||
| 2477 | -// | ||
| 2478 | -// /** | ||
| 2479 | -// * 序列化对象 | ||
| 2480 | -// * | ||
| 2481 | -// * @param obj | ||
| 2482 | -// * @return 对象需实现Serializable接口 | ||
| 2483 | -// */ | ||
| 2484 | -// public static byte[] ObjTOSerialize(Object obj) { | ||
| 2485 | -// ObjectOutputStream oos = null; | ||
| 2486 | -// ByteArrayOutputStream byteOut = null; | ||
| 2487 | -// try { | ||
| 2488 | -// byteOut = new ByteArrayOutputStream(); | ||
| 2489 | -// oos = new ObjectOutputStream(byteOut); | ||
| 2490 | -// oos.writeObject(obj); | ||
| 2491 | -// byte[] bytes = byteOut.toByteArray(); | ||
| 2492 | -// return bytes; | ||
| 2493 | -// } catch (Exception e) { | ||
| 2494 | -// } | ||
| 2495 | -// return null; | ||
| 2496 | -// } | ||
| 2497 | -// | ||
| 2498 | -// /** | ||
| 2499 | -// * 反序列化对象 | ||
| 2500 | -// * | ||
| 2501 | -// * @param bytes | ||
| 2502 | -// * @return 对象需实现Serializable接口 | ||
| 2503 | -// */ | ||
| 2504 | -// public static Object unserialize(byte[] bytes) { | ||
| 2505 | -// ByteArrayInputStream bais = null; | ||
| 2506 | -// try { | ||
| 2507 | -// //反序列化 | ||
| 2508 | -// bais = new ByteArrayInputStream(bytes); | ||
| 2509 | -// ObjectInputStream ois = new ObjectInputStream(bais); | ||
| 2510 | -// return ois.readObject(); | ||
| 2511 | -// } catch (Exception e) { | ||
| 2512 | -// } | ||
| 2513 | -// return null; | ||
| 2514 | -// } | ||
| 2515 | -// | ||
| 2516 | -// /** | ||
| 2517 | -// * 返还到连接池 | ||
| 2518 | -// * | ||
| 2519 | -// * @param jedis | ||
| 2520 | -// */ | ||
| 2521 | -// public static void returnResource(Jedis jedis) { | ||
| 2522 | -// if (jedis != null) { | ||
| 2523 | -// jedis.close(); | ||
| 2524 | -// } | ||
| 2525 | -// } | ||
| 2526 | -// | ||
| 2527 | -// /** | ||
| 2528 | -// * jedis 上锁 | ||
| 2529 | -// * @param lockKey | ||
| 2530 | -// * @param requestId 锁的值 | ||
| 2531 | -// * @param expireTime | ||
| 2532 | -// * @return | ||
| 2533 | -// */ | ||
| 2534 | -// public boolean tryLock(String lockKey, String requestId, int expireTime) { | ||
| 2535 | -// Jedis jedis = null; | ||
| 2536 | -// try { | ||
| 2537 | -// jedis = jedisPool.getResource(); | ||
| 2538 | -// jedis.select(indexdb); | ||
| 2539 | -// String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME_EX, expireTime); | ||
| 2540 | -// if (LOCK_SUCCESS.equals(result)) { | ||
| 2541 | -// return true; | ||
| 2542 | -// } | ||
| 2543 | -// } catch (Exception e) { | ||
| 2544 | -// e.printStackTrace(); | ||
| 2545 | -// return false; | ||
| 2546 | -// } finally { | ||
| 2547 | -// returnResource(jedis); | ||
| 2548 | -// } | ||
| 2549 | -// return false; | ||
| 2550 | -// } | ||
| 2551 | -// /** | ||
| 2552 | -// * jedis 上锁 | ||
| 2553 | -// * @param lockKey | ||
| 2554 | -// * @param requestId 锁的值 | ||
| 2555 | -// * @param expireTime | ||
| 2556 | -// * @return | ||
| 2557 | -// */ | ||
| 2558 | -// public boolean tryLockSec(String lockKey, String requestId, int expireTime) { | ||
| 2559 | -// Jedis jedis = null; | ||
| 2560 | -// try { | ||
| 2561 | -// jedis = jedisPool.getResource(); | ||
| 2562 | -// jedis.select(indexdb); | ||
| 2563 | -// String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME_EX, expireTime); | ||
| 2564 | -// if (LOCK_SUCCESS.equals(result)) { | ||
| 2565 | -// return true; | ||
| 2566 | -// } | ||
| 2567 | -// } catch (Exception e) { | ||
| 2568 | -// e.printStackTrace(); | ||
| 2569 | -// return false; | ||
| 2570 | -// } finally { | ||
| 2571 | -// returnResource(jedis); | ||
| 2572 | -// } | ||
| 2573 | -// return false; | ||
| 2574 | -// } | ||
| 2575 | -// /** | ||
| 2576 | -// * jedis 上锁 | ||
| 2577 | -// * @param lockKey | ||
| 2578 | -// * @param requestId 锁的值 | ||
| 2579 | -// * @return | ||
| 2580 | -// */ | ||
| 2581 | -// public boolean tryLock(String lockKey, String requestId) { | ||
| 2582 | -// return this.tryLock( lockKey, requestId, lockWaitTime); | ||
| 2583 | -// } | ||
| 2584 | -// | ||
| 2585 | -// | ||
| 2586 | -// /** | ||
| 2587 | -// * jedis 上锁没返回 | ||
| 2588 | -// * @param lockKey | ||
| 2589 | -// * @param requestId | ||
| 2590 | -// * @param expireTime | ||
| 2591 | -// */ | ||
| 2592 | -// public void lock(String lockKey, String requestId, int expireTime) { | ||
| 2593 | -// while (true) { | ||
| 2594 | -// if (tryLock(lockKey, requestId, expireTime)) { | ||
| 2595 | -// return; | ||
| 2596 | -// } | ||
| 2597 | -// } | ||
| 2598 | -// } | ||
| 2599 | -// | ||
| 2600 | -// /** | ||
| 2601 | -// * jedis解锁 | ||
| 2602 | -// * @param lockKey | ||
| 2603 | -// * @param requestId | ||
| 2604 | -// * @return | ||
| 2605 | -// */ | ||
| 2606 | -// public boolean unLock(String lockKey, String requestId) { | ||
| 2607 | -// String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; | ||
| 2608 | -// Jedis jedis = null; | ||
| 2609 | -// try { | ||
| 2610 | -// jedis = jedisPool.getResource(); | ||
| 2611 | -// jedis.select(indexdb); | ||
| 2612 | -// Object result = jedis.eval(script, Collections.singletonList(lockKey), | ||
| 2613 | -// Collections.singletonList(requestId)); | ||
| 2614 | -// if (RELEASE_SUCCESS.equals(result)) { | ||
| 2615 | -// System.out.println("unlock "+ Thread.currentThread().getName()+ " requestId:" + requestId); | ||
| 2616 | -// return true; | ||
| 2617 | -// } | ||
| 2618 | -// jedis.del(lockKey); | ||
| 2619 | -// } catch (Exception e) { | ||
| 2620 | -// throw e; | ||
| 2621 | -// } finally { | ||
| 2622 | -// returnResource(jedis); | ||
| 2623 | -// } | ||
| 2624 | -// return false; | ||
| 2625 | -// } | ||
| 2626 | -// | ||
| 2627 | -// | ||
| 2628 | -// @Cacheable(value="getSelectRedis" ,key="#sCacheableName") | ||
| 2629 | -// public List<Map<String,Object>> getSelectRedis(String sCacheableName,List<Map<String,Object>> selectDate) { | ||
| 2630 | -// return selectDate; | ||
| 2631 | -// } | ||
| 2632 | -// | ||
| 2633 | -// public static void main(String[] args) { | ||
| 2634 | -// /*JedisPool jedisPool = new JedisPool(null,"localhost",6379,100,"123456"); | ||
| 2635 | -// Jedis jedis = jedisPool.getResource(); | ||
| 2636 | -// //r.get("", RedisConstants.datebase4); | ||
| 2637 | -// jedis.select(RedisConstants.datebase4); | ||
| 2638 | -// Set<String> str = jedis.keys("*"); | ||
| 2639 | -// for (String string : str) { | ||
| 2640 | -// System.out.println(string); | ||
| 2641 | -// }*/ | ||
| 2642 | -// } | ||
| 2643 | -//} | ||
| 2644 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/java/com/xly/config/RedisConfig.java
0 → 100644
| 1 | +package com.xly.config; | ||
| 2 | + | ||
| 3 | +import org.springframework.context.annotation.Bean; | ||
| 4 | +import org.springframework.context.annotation.Configuration; | ||
| 5 | +import org.springframework.data.redis.connection.RedisConnectionFactory; | ||
| 6 | +import org.springframework.data.redis.core.RedisTemplate; | ||
| 7 | +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; | ||
| 8 | +import org.springframework.data.redis.serializer.StringRedisSerializer; | ||
| 9 | + | ||
| 10 | +@Configuration | ||
| 11 | +public class RedisConfig { | ||
| 12 | + | ||
| 13 | + @Bean | ||
| 14 | + public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { | ||
| 15 | + RedisTemplate<String, Object> template = new RedisTemplate<>(); | ||
| 16 | + template.setConnectionFactory(factory); | ||
| 17 | + | ||
| 18 | + // key 采用 String 序列化 | ||
| 19 | + template.setKeySerializer(new StringRedisSerializer()); | ||
| 20 | + // hash 的 key 也采用 String 序列化 | ||
| 21 | + template.setHashKeySerializer(new StringRedisSerializer()); | ||
| 22 | + | ||
| 23 | + // value 采用 Jackson 序列化 | ||
| 24 | + GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer(); | ||
| 25 | + template.setValueSerializer(jsonSerializer); | ||
| 26 | + template.setHashValueSerializer(jsonSerializer); | ||
| 27 | + | ||
| 28 | + template.afterPropertiesSet(); | ||
| 29 | + return template; | ||
| 30 | + } | ||
| 31 | +} | ||
| 0 | \ No newline at end of file | 32 | \ No newline at end of file |
src/main/java/com/xly/config/SpringContextHolder.java
0 → 100644
| 1 | +package com.xly.config; | ||
| 2 | + | ||
| 3 | +import org.apache.commons.lang3.Validate; | ||
| 4 | +import org.slf4j.Logger; | ||
| 5 | +import org.slf4j.LoggerFactory; | ||
| 6 | +import org.springframework.beans.factory.DisposableBean; | ||
| 7 | +import org.springframework.context.ApplicationContext; | ||
| 8 | +import org.springframework.context.ApplicationContextAware; | ||
| 9 | +import org.springframework.context.annotation.Lazy; | ||
| 10 | +import org.springframework.stereotype.Service; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. | ||
| 14 | + */ | ||
| 15 | +@Service | ||
| 16 | +@Lazy(false) | ||
| 17 | +public class SpringContextHolder implements ApplicationContextAware, DisposableBean { | ||
| 18 | + | ||
| 19 | + private static ApplicationContext applicationContext = null; | ||
| 20 | + | ||
| 21 | + private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 取得存储在静态变量中的ApplicationContext. | ||
| 25 | + */ | ||
| 26 | + public static ApplicationContext getApplicationContext() { | ||
| 27 | + assertContextInjected(); | ||
| 28 | + return applicationContext; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. | ||
| 33 | + */ | ||
| 34 | + @SuppressWarnings("unchecked") | ||
| 35 | + public static <T> T getBean(String name) { | ||
| 36 | + assertContextInjected(); | ||
| 37 | + return (T) applicationContext.getBean(name); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. | ||
| 42 | + */ | ||
| 43 | + public static <T> T getBean(Class<T> requiredType) { | ||
| 44 | + assertContextInjected(); | ||
| 45 | + return applicationContext.getBean(requiredType); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 清除SpringContextHolder中的ApplicationContext为Null. | ||
| 50 | + */ | ||
| 51 | + public static void clearHolder() { | ||
| 52 | + if (logger.isDebugEnabled()){ | ||
| 53 | + logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); | ||
| 54 | + } | ||
| 55 | + applicationContext = null; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 实现ApplicationContextAware接口, 注入Context到静态变量中. | ||
| 60 | + */ | ||
| 61 | + @Override | ||
| 62 | + public void setApplicationContext(ApplicationContext applicationContext) { | ||
| 63 | + SpringContextHolder.applicationContext = applicationContext; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * 实现DisposableBean接口, 在Context关闭时清理静态变量. | ||
| 68 | + */ | ||
| 69 | + @Override | ||
| 70 | + public void destroy() throws Exception { | ||
| 71 | + SpringContextHolder.clearHolder(); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + /** | ||
| 75 | + * 检查ApplicationContext不为空. | ||
| 76 | + */ | ||
| 77 | + private static void assertContextInjected() { | ||
| 78 | + Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); | ||
| 79 | + } | ||
| 80 | +} | ||
| 0 | \ No newline at end of file | 81 | \ No newline at end of file |
src/main/java/com/xly/entity/AiSqlErrorHistory.java
0 → 100644
| 1 | +package com.xly.entity; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import java.util.Date; | ||
| 7 | + | ||
| 8 | +@Data | ||
| 9 | +public class AiSqlErrorHistory { | ||
| 10 | + | ||
| 11 | + private Integer iIncrement; | ||
| 12 | + private String sId; | ||
| 13 | + private Integer iOrder; | ||
| 14 | + private Date tCreateDate; | ||
| 15 | + private String sBrandsId; | ||
| 16 | + private String sSubsidiaryId; | ||
| 17 | + private String sMakePerson; | ||
| 18 | + private String sBillNo; | ||
| 19 | + private String sFormId= StrUtil.EMPTY; | ||
| 20 | + private Integer sStatus; | ||
| 21 | + private String sSceneId; | ||
| 22 | + private String sMethodId; | ||
| 23 | + private String sQuestion; | ||
| 24 | + private String sError_sql; | ||
| 25 | + private String sError_mes; | ||
| 26 | + private String sCorrect_sql; | ||
| 27 | + private Boolean bCheck = false; | ||
| 28 | + private Boolean bInvalid = false; | ||
| 29 | + private String sLoginId; | ||
| 30 | +} |
src/main/java/com/xly/entity/AiUserAgentQuestion.java
0 → 100644
| 1 | +package com.xly.entity; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import java.util.Date; | ||
| 7 | +import java.util.List; | ||
| 8 | +import java.util.Map; | ||
| 9 | + | ||
| 10 | +@Data | ||
| 11 | +public class AiUserAgentQuestion { | ||
| 12 | + | ||
| 13 | + private Integer iIncrement; | ||
| 14 | + private String sId; | ||
| 15 | + private Integer iOrder; | ||
| 16 | + private Date tCreateDate; | ||
| 17 | + private String sBrandsId; | ||
| 18 | + private String sSubsidiaryId; | ||
| 19 | + private String sMakePerson; | ||
| 20 | + private String sBillNo; | ||
| 21 | + private String sFormId= StrUtil.EMPTY; | ||
| 22 | + private Integer sStatus; | ||
| 23 | + private String sSceneId; | ||
| 24 | + private String sMethodId; | ||
| 25 | + private String sQuestion; | ||
| 26 | + private String sSqlContent; | ||
| 27 | + private Boolean bCheck = false; | ||
| 28 | + private Boolean bInvalid = false; | ||
| 29 | + private String sLoginId; | ||
| 30 | + private String sQuestionGroupNo; | ||
| 31 | + private Boolean bRedis = false; | ||
| 32 | + private Date tUpdateDate; | ||
| 33 | + private Integer iUpdate; | ||
| 34 | + | ||
| 35 | + | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + | ||
| 39 | +} |
src/main/java/com/xly/entity/UserSceneSession.java
| @@ -29,6 +29,10 @@ public class UserSceneSession { | @@ -29,6 +29,10 @@ public class UserSceneSession { | ||
| 29 | * 该用户权限内可访问的所有场景(从权限映射中获取) | 29 | * 该用户权限内可访问的所有场景(从权限映射中获取) |
| 30 | */ | 30 | */ |
| 31 | private List<SceneDto> authScenes; | 31 | private List<SceneDto> authScenes; |
| 32 | + /*** | ||
| 33 | + * 用户问题集合 | ||
| 34 | + **/ | ||
| 35 | + private List<String> sUserQuestionList; | ||
| 32 | 36 | ||
| 33 | private List<ToolMeta> authTool; | 37 | private List<ToolMeta> authTool; |
| 34 | /** | 38 | /** |
src/main/java/com/xly/service/DynamicExeDbService.java
| @@ -214,16 +214,7 @@ public class DynamicExeDbService { | @@ -214,16 +214,7 @@ public class DynamicExeDbService { | ||
| 214 | public Map<String, Object> getDoProMap(String sProName, Map<String, Object> params) throws BusinessException{ | 214 | public Map<String, Object> getDoProMap(String sProName, Map<String, Object> params) throws BusinessException{ |
| 215 | Map<String,Object> searMap = new HashMap<>(4); | 215 | Map<String,Object> searMap = new HashMap<>(4); |
| 216 | try{ | 216 | try{ |
| 217 | - //根据过程名称获取过程参数 | ||
| 218 | - //添加公司子公司 | ||
| 219 | -// if((ObjectUtil.isEmpty(params.get("sBrId")) | ||
| 220 | -// || ObjectUtil.isEmpty(params.get("sSuId")))){ | ||
| 221 | -// params.put("sBrId",params.get("sBrandsId")); | ||
| 222 | -// params.put("sSuId",params.get("sSubsidiaryId")); | ||
| 223 | -// } | ||
| 224 | -// if(ObjectUtil.isEmpty(params.get("sLoginId"))){ | ||
| 225 | -// params.put("sLoginId",params.get("sUserId")); | ||
| 226 | -// } | 217 | + |
| 227 | List<Map<String, Object>> proList = getProcParam( sProName); | 218 | List<Map<String, Object>> proList = getProcParam( sProName); |
| 228 | //{CALL mytest(#{ownerid,mode=IN,jdbcType=INTEGER},#{examcount,mode=OUT,jdbcType=INTEGER})} | 219 | //{CALL mytest(#{ownerid,mode=IN,jdbcType=INTEGER},#{examcount,mode=OUT,jdbcType=INTEGER})} |
| 229 | StringBuffer sb = new StringBuffer(); | 220 | StringBuffer sb = new StringBuffer(); |
src/main/java/com/xly/service/RedisService.java
0 → 100644
| 1 | +package com.xly.service; | ||
| 2 | + | ||
| 3 | +import lombok.RequiredArgsConstructor; | ||
| 4 | +import lombok.extern.slf4j.Slf4j; | ||
| 5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 6 | +import org.springframework.data.redis.core.*; | ||
| 7 | +import org.springframework.stereotype.Service; | ||
| 8 | +import org.springframework.util.CollectionUtils; | ||
| 9 | + | ||
| 10 | +import java.util.*; | ||
| 11 | +import java.util.concurrent.TimeUnit; | ||
| 12 | + | ||
| 13 | +@Slf4j | ||
| 14 | +@Service("redisService") | ||
| 15 | +@RequiredArgsConstructor | ||
| 16 | +public class RedisService { | ||
| 17 | + | ||
| 18 | + @Autowired | ||
| 19 | + private RedisTemplate<String, Object> redisTemplate; | ||
| 20 | + | ||
| 21 | + // ============================= common ============================ | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 指定缓存失效时间 | ||
| 25 | + */ | ||
| 26 | + public boolean expire(String key, long time) { | ||
| 27 | + try { | ||
| 28 | + if (time > 0) { | ||
| 29 | + redisTemplate.expire(key, time, TimeUnit.SECONDS); | ||
| 30 | + } | ||
| 31 | + return true; | ||
| 32 | + } catch (Exception e) { | ||
| 33 | + e.printStackTrace(); | ||
| 34 | + return false; | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 根据key获取过期时间 | ||
| 40 | + */ | ||
| 41 | + public long getExpire(String key) { | ||
| 42 | + return redisTemplate.getExpire(key, TimeUnit.SECONDS); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 判断key是否存在 | ||
| 47 | + */ | ||
| 48 | + public boolean hasKey(String key) { | ||
| 49 | + try { | ||
| 50 | + return redisTemplate.hasKey(key); | ||
| 51 | + } catch (Exception e) { | ||
| 52 | + e.printStackTrace(); | ||
| 53 | + return false; | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + /** | ||
| 58 | + * 删除缓存 | ||
| 59 | + */ | ||
| 60 | + @SuppressWarnings("unchecked") | ||
| 61 | + public boolean del(String... key) { | ||
| 62 | + try { | ||
| 63 | + if (key != null && key.length > 0) { | ||
| 64 | + if (key.length == 1) { | ||
| 65 | + redisTemplate.delete(key[0]); | ||
| 66 | + } else { | ||
| 67 | + redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key)); | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + return true; | ||
| 71 | + } catch (Exception e) { | ||
| 72 | + e.printStackTrace(); | ||
| 73 | + return false; | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + // ============================ String ============================= | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * 普通缓存获取 | ||
| 81 | + */ | ||
| 82 | + public Object get(String key) { | ||
| 83 | + return key == null ? null : redisTemplate.opsForValue().get(key); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + /** | ||
| 87 | + * 普通缓存放入 | ||
| 88 | + */ | ||
| 89 | + public boolean set(String key, Object value) { | ||
| 90 | + try { | ||
| 91 | + redisTemplate.opsForValue().set(key, value); | ||
| 92 | + return true; | ||
| 93 | + } catch (Exception e) { | ||
| 94 | + e.printStackTrace(); | ||
| 95 | + return false; | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + /** | ||
| 100 | + * 普通缓存放入并设置时间 | ||
| 101 | + */ | ||
| 102 | + public boolean set(String key, Object value, long time) { | ||
| 103 | + try { | ||
| 104 | + if (time > 0) { | ||
| 105 | + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); | ||
| 106 | + } else { | ||
| 107 | + set(key, value); | ||
| 108 | + } | ||
| 109 | + return true; | ||
| 110 | + } catch (Exception e) { | ||
| 111 | + e.printStackTrace(); | ||
| 112 | + return false; | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + /** | ||
| 117 | + * 递增 | ||
| 118 | + */ | ||
| 119 | + public long incr(String key, long delta) { | ||
| 120 | + if (delta < 0) { | ||
| 121 | + throw new RuntimeException("递增因子必须大于0"); | ||
| 122 | + } | ||
| 123 | + return redisTemplate.opsForValue().increment(key, delta); | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + /** | ||
| 127 | + * 递减 | ||
| 128 | + */ | ||
| 129 | + public long decr(String key, long delta) { | ||
| 130 | + if (delta < 0) { | ||
| 131 | + throw new RuntimeException("递减因子必须大于0"); | ||
| 132 | + } | ||
| 133 | + return redisTemplate.opsForValue().increment(key, -delta); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + // ================================ Map ================================= | ||
| 137 | + | ||
| 138 | + /** | ||
| 139 | + * HashGet | ||
| 140 | + */ | ||
| 141 | + public Object hget(String key, String item) { | ||
| 142 | + return redisTemplate.opsForHash().get(key, item); | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + /** | ||
| 146 | + * 获取hashKey对应的所有键值 | ||
| 147 | + */ | ||
| 148 | + public Map<Object, Object> hmget(String key) { | ||
| 149 | + return redisTemplate.opsForHash().entries(key); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + /** | ||
| 153 | + * HashSet | ||
| 154 | + */ | ||
| 155 | + public boolean hmset(String key, Map<String, Object> map) { | ||
| 156 | + try { | ||
| 157 | + redisTemplate.opsForHash().putAll(key, map); | ||
| 158 | + return true; | ||
| 159 | + } catch (Exception e) { | ||
| 160 | + e.printStackTrace(); | ||
| 161 | + return false; | ||
| 162 | + } | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * HashSet 并设置时间 | ||
| 167 | + */ | ||
| 168 | + public boolean hmset(String key, Map<String, Object> map, long time) { | ||
| 169 | + try { | ||
| 170 | + redisTemplate.opsForHash().putAll(key, map); | ||
| 171 | + if (time > 0) { | ||
| 172 | + expire(key, time); | ||
| 173 | + } | ||
| 174 | + return true; | ||
| 175 | + } catch (Exception e) { | ||
| 176 | + e.printStackTrace(); | ||
| 177 | + return false; | ||
| 178 | + } | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + /** | ||
| 182 | + * 向一张hash表中放入数据,如果不存在将创建 | ||
| 183 | + */ | ||
| 184 | + public boolean hset(String key, String item, Object value) { | ||
| 185 | + try { | ||
| 186 | + redisTemplate.opsForHash().put(key, item, value); | ||
| 187 | + return true; | ||
| 188 | + } catch (Exception e) { | ||
| 189 | + e.printStackTrace(); | ||
| 190 | + return false; | ||
| 191 | + } | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + /** | ||
| 195 | + * 向一张hash表中放入数据,并设置时间 | ||
| 196 | + */ | ||
| 197 | + public boolean hset(String key, String item, Object value, long time) { | ||
| 198 | + try { | ||
| 199 | + redisTemplate.opsForHash().put(key, item, value); | ||
| 200 | + if (time > 0) { | ||
| 201 | + expire(key, time); | ||
| 202 | + } | ||
| 203 | + return true; | ||
| 204 | + } catch (Exception e) { | ||
| 205 | + e.printStackTrace(); | ||
| 206 | + return false; | ||
| 207 | + } | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + /** | ||
| 211 | + * 删除hash表中的值 | ||
| 212 | + */ | ||
| 213 | + public void hdel(String key, Object... item) { | ||
| 214 | + redisTemplate.opsForHash().delete(key, item); | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + /** | ||
| 218 | + * 判断hash表中是否有该项的值 | ||
| 219 | + */ | ||
| 220 | + public boolean hHasKey(String key, String item) { | ||
| 221 | + return redisTemplate.opsForHash().hasKey(key, item); | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + /** | ||
| 225 | + * hash递增 | ||
| 226 | + */ | ||
| 227 | + public double hincr(String key, String item, double by) { | ||
| 228 | + return redisTemplate.opsForHash().increment(key, item, by); | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + /** | ||
| 232 | + * hash递减 | ||
| 233 | + */ | ||
| 234 | + public double hdecr(String key, String item, double by) { | ||
| 235 | + return redisTemplate.opsForHash().increment(key, item, -by); | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + // ============================ set ============================= | ||
| 239 | + | ||
| 240 | + /** | ||
| 241 | + * 根据key获取Set中的所有值 | ||
| 242 | + */ | ||
| 243 | + public Set<Object> sGet(String key) { | ||
| 244 | + try { | ||
| 245 | + return redisTemplate.opsForSet().members(key); | ||
| 246 | + } catch (Exception e) { | ||
| 247 | + e.printStackTrace(); | ||
| 248 | + return null; | ||
| 249 | + } | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + /** | ||
| 253 | + * 根据value从一个set中查询,是否存在 | ||
| 254 | + */ | ||
| 255 | + public boolean sHasKey(String key, Object value) { | ||
| 256 | + try { | ||
| 257 | + return redisTemplate.opsForSet().isMember(key, value); | ||
| 258 | + } catch (Exception e) { | ||
| 259 | + e.printStackTrace(); | ||
| 260 | + return false; | ||
| 261 | + } | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + /** | ||
| 265 | + * 将数据放入set缓存 | ||
| 266 | + */ | ||
| 267 | + public long sSet(String key, Object... values) { | ||
| 268 | + try { | ||
| 269 | + return redisTemplate.opsForSet().add(key, values); | ||
| 270 | + } catch (Exception e) { | ||
| 271 | + e.printStackTrace(); | ||
| 272 | + return 0; | ||
| 273 | + } | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | + /** | ||
| 277 | + * 将set数据放入缓存 | ||
| 278 | + */ | ||
| 279 | + public long sSetAndTime(String key, long time, Object... values) { | ||
| 280 | + try { | ||
| 281 | + Long count = redisTemplate.opsForSet().add(key, values); | ||
| 282 | + if (time > 0) { | ||
| 283 | + expire(key, time); | ||
| 284 | + } | ||
| 285 | + return count; | ||
| 286 | + } catch (Exception e) { | ||
| 287 | + e.printStackTrace(); | ||
| 288 | + return 0; | ||
| 289 | + } | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + /** | ||
| 293 | + * 获取set缓存的长度 | ||
| 294 | + */ | ||
| 295 | + public long sGetSetSize(String key) { | ||
| 296 | + try { | ||
| 297 | + return redisTemplate.opsForSet().size(key); | ||
| 298 | + } catch (Exception e) { | ||
| 299 | + e.printStackTrace(); | ||
| 300 | + return 0; | ||
| 301 | + } | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + /** | ||
| 305 | + * 移除值为value的 | ||
| 306 | + */ | ||
| 307 | + public long setRemove(String key, Object... values) { | ||
| 308 | + try { | ||
| 309 | + return redisTemplate.opsForSet().remove(key, values); | ||
| 310 | + } catch (Exception e) { | ||
| 311 | + e.printStackTrace(); | ||
| 312 | + return 0; | ||
| 313 | + } | ||
| 314 | + } | ||
| 315 | + | ||
| 316 | + // =============================== list ================================= | ||
| 317 | + | ||
| 318 | + /** | ||
| 319 | + * 获取list缓存的内容 | ||
| 320 | + */ | ||
| 321 | + public List<Object> lGet(String key, long start, long end) { | ||
| 322 | + try { | ||
| 323 | + return redisTemplate.opsForList().range(key, start, end); | ||
| 324 | + } catch (Exception e) { | ||
| 325 | + e.printStackTrace(); | ||
| 326 | + return null; | ||
| 327 | + } | ||
| 328 | + } | ||
| 329 | + | ||
| 330 | + /** | ||
| 331 | + * 获取list缓存的长度 | ||
| 332 | + */ | ||
| 333 | + public long lGetListSize(String key) { | ||
| 334 | + try { | ||
| 335 | + return redisTemplate.opsForList().size(key); | ||
| 336 | + } catch (Exception e) { | ||
| 337 | + e.printStackTrace(); | ||
| 338 | + return 0; | ||
| 339 | + } | ||
| 340 | + } | ||
| 341 | + | ||
| 342 | + /** | ||
| 343 | + * 通过索引获取list中的值 | ||
| 344 | + */ | ||
| 345 | + public Object lGetIndex(String key, long index) { | ||
| 346 | + try { | ||
| 347 | + return redisTemplate.opsForList().index(key, index); | ||
| 348 | + } catch (Exception e) { | ||
| 349 | + e.printStackTrace(); | ||
| 350 | + return null; | ||
| 351 | + } | ||
| 352 | + } | ||
| 353 | + | ||
| 354 | + /** | ||
| 355 | + * 将list放入缓存 | ||
| 356 | + */ | ||
| 357 | + public boolean lSet(String key, Object value) { | ||
| 358 | + try { | ||
| 359 | + redisTemplate.opsForList().rightPush(key, value); | ||
| 360 | + return true; | ||
| 361 | + } catch (Exception e) { | ||
| 362 | + e.printStackTrace(); | ||
| 363 | + return false; | ||
| 364 | + } | ||
| 365 | + } | ||
| 366 | + | ||
| 367 | + /** | ||
| 368 | + * 将list放入缓存 | ||
| 369 | + */ | ||
| 370 | + public boolean lSet(String key, Object value, long time) { | ||
| 371 | + try { | ||
| 372 | + redisTemplate.opsForList().rightPush(key, value); | ||
| 373 | + if (time > 0) { | ||
| 374 | + expire(key, time); | ||
| 375 | + } | ||
| 376 | + return true; | ||
| 377 | + } catch (Exception e) { | ||
| 378 | + e.printStackTrace(); | ||
| 379 | + return false; | ||
| 380 | + } | ||
| 381 | + } | ||
| 382 | + | ||
| 383 | + /** | ||
| 384 | + * 将list放入缓存 | ||
| 385 | + */ | ||
| 386 | + public boolean lSet(String key, List<Object> value) { | ||
| 387 | + try { | ||
| 388 | + redisTemplate.opsForList().rightPushAll(key, value); | ||
| 389 | + return true; | ||
| 390 | + } catch (Exception e) { | ||
| 391 | + e.printStackTrace(); | ||
| 392 | + return false; | ||
| 393 | + } | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + /** | ||
| 397 | + * 将list放入缓存 | ||
| 398 | + */ | ||
| 399 | + public boolean lSet(String key, List<Object> value, long time) { | ||
| 400 | + try { | ||
| 401 | + redisTemplate.opsForList().rightPushAll(key, value); | ||
| 402 | + if (time > 0) { | ||
| 403 | + expire(key, time); | ||
| 404 | + } | ||
| 405 | + return true; | ||
| 406 | + } catch (Exception e) { | ||
| 407 | + e.printStackTrace(); | ||
| 408 | + return false; | ||
| 409 | + } | ||
| 410 | + } | ||
| 411 | + | ||
| 412 | + /** | ||
| 413 | + * 根据索引修改list中的某条数据 | ||
| 414 | + */ | ||
| 415 | + public boolean lUpdateIndex(String key, long index, Object value) { | ||
| 416 | + try { | ||
| 417 | + redisTemplate.opsForList().set(key, index, value); | ||
| 418 | + return true; | ||
| 419 | + } catch (Exception e) { | ||
| 420 | + e.printStackTrace(); | ||
| 421 | + return false; | ||
| 422 | + } | ||
| 423 | + } | ||
| 424 | + | ||
| 425 | + /** | ||
| 426 | + * 移除N个值为value | ||
| 427 | + */ | ||
| 428 | + public long lRemove(String key, long count, Object value) { | ||
| 429 | + try { | ||
| 430 | + return redisTemplate.opsForList().remove(key, count, value); | ||
| 431 | + } catch (Exception e) { | ||
| 432 | + e.printStackTrace(); | ||
| 433 | + return 0; | ||
| 434 | + } | ||
| 435 | + } | ||
| 436 | +} | ||
| 0 | \ No newline at end of file | 437 | \ No newline at end of file |
src/main/java/com/xly/service/XlyErpService.java
| @@ -3,6 +3,7 @@ package com.xly.service; | @@ -3,6 +3,7 @@ package com.xly.service; | ||
| 3 | import cn.hutool.core.collection.ListUtil; | 3 | import cn.hutool.core.collection.ListUtil; |
| 4 | import cn.hutool.core.date.DatePattern; | 4 | import cn.hutool.core.date.DatePattern; |
| 5 | import cn.hutool.core.date.DateUtil; | 5 | import cn.hutool.core.date.DateUtil; |
| 6 | +import cn.hutool.core.util.IdUtil; | ||
| 6 | import cn.hutool.core.util.ObjectUtil; | 7 | import cn.hutool.core.util.ObjectUtil; |
| 7 | import cn.hutool.core.util.StrUtil; | 8 | import cn.hutool.core.util.StrUtil; |
| 8 | import com.alibaba.fastjson2.JSON; | 9 | import com.alibaba.fastjson2.JSON; |
| @@ -16,8 +17,10 @@ import com.xly.constant.ReturnTypeCode; | @@ -16,8 +17,10 @@ import com.xly.constant.ReturnTypeCode; | ||
| 16 | import com.xly.entity.*; | 17 | import com.xly.entity.*; |
| 17 | import com.xly.exception.sqlexception.SqlGenerateException; | 18 | import com.xly.exception.sqlexception.SqlGenerateException; |
| 18 | import com.xly.exception.sqlexception.SqlValidateException; | 19 | import com.xly.exception.sqlexception.SqlValidateException; |
| 19 | -import com.xly.mapper.ToolMetaMapper; | ||
| 20 | import com.xly.runner.AppStartupRunner; | 20 | import com.xly.runner.AppStartupRunner; |
| 21 | +import com.xly.thread.AiSqlErrorHistoryThread; | ||
| 22 | +import com.xly.thread.AiUserAgentQuestionThread; | ||
| 23 | +import com.xly.thread.MultiThreadPoolServer; | ||
| 21 | import com.xly.tool.DynamicToolProvider; | 24 | import com.xly.tool.DynamicToolProvider; |
| 22 | import com.xly.util.EnhancedErrorGuidance; | 25 | import com.xly.util.EnhancedErrorGuidance; |
| 23 | import com.xly.util.InputPreprocessor; | 26 | import com.xly.util.InputPreprocessor; |
| @@ -34,6 +37,7 @@ import lombok.RequiredArgsConstructor; | @@ -34,6 +37,7 @@ import lombok.RequiredArgsConstructor; | ||
| 34 | import lombok.extern.slf4j.Slf4j; | 37 | import lombok.extern.slf4j.Slf4j; |
| 35 | import org.springframework.beans.factory.annotation.Value; | 38 | import org.springframework.beans.factory.annotation.Value; |
| 36 | import org.springframework.stereotype.Service; | 39 | import org.springframework.stereotype.Service; |
| 40 | +import org.springframework.util.IdGenerator; | ||
| 37 | 41 | ||
| 38 | import java.time.Duration; | 42 | import java.time.Duration; |
| 39 | import java.util.*; | 43 | import java.util.*; |
| @@ -51,6 +55,7 @@ public class XlyErpService { | @@ -51,6 +55,7 @@ public class XlyErpService { | ||
| 51 | private final DynamicToolProvider dynamicToolProvider; | 55 | private final DynamicToolProvider dynamicToolProvider; |
| 52 | private final OperableChatMemoryProvider operableChatMemoryProvider; | 56 | private final OperableChatMemoryProvider operableChatMemoryProvider; |
| 53 | private final DynamicExeDbService dynamicExeDbService; | 57 | private final DynamicExeDbService dynamicExeDbService; |
| 58 | + private final RedisService redisService; | ||
| 54 | 59 | ||
| 55 | //执行动态语句 执行异常的情况下 最多执行次数 | 60 | //执行动态语句 执行异常的情况下 最多执行次数 |
| 56 | private final Integer maxRetries = 5; | 61 | private final Integer maxRetries = 5; |
| @@ -186,6 +191,18 @@ public class XlyErpService { | @@ -186,6 +191,18 @@ public class XlyErpService { | ||
| 186 | while (attempt < maxRetries) { | 191 | while (attempt < maxRetries) { |
| 187 | try{ | 192 | try{ |
| 188 | attempt = attempt+1; | 193 | attempt = attempt+1; |
| 194 | + if(attempt==1){ | ||
| 195 | + List<String> userQuestionList = session.getSUserQuestionList(); | ||
| 196 | + if(ObjectUtil.isEmpty(userQuestionList)){ | ||
| 197 | + userQuestionList = new ArrayList<>(); | ||
| 198 | + } | ||
| 199 | + String sQuestion = StrUtil.replace(userInput," ",StrUtil.EMPTY); | ||
| 200 | + sQuestion = StrUtil.replace(sQuestion,"\t",StrUtil.EMPTY); | ||
| 201 | + sQuestion = StrUtil.replace(sQuestion,"\n",StrUtil.EMPTY); | ||
| 202 | + sQuestion = sQuestion.toLowerCase(); | ||
| 203 | + userQuestionList.add(sQuestion); | ||
| 204 | + session.setSUserQuestionList(userQuestionList); | ||
| 205 | + } | ||
| 189 | return getDynamicTableSqlExec(session, input, userId, userInput,errorSql,errorMessage,iErroCount,historySqlList, aiAgent); | 206 | return getDynamicTableSqlExec(session, input, userId, userInput,errorSql,errorMessage,iErroCount,historySqlList, aiAgent); |
| 190 | }catch (SqlValidateException e){ | 207 | }catch (SqlValidateException e){ |
| 191 | return "本场景没有识别到您的意图<br/> 如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]"; | 208 | return "本场景没有识别到您的意图<br/> 如果切换场景,点[回首页],如果在本场景下,转换意图,点[清除记忆]"; |
| @@ -243,38 +260,63 @@ public class XlyErpService { | @@ -243,38 +260,63 @@ public class XlyErpService { | ||
| 243 | **/ | 260 | **/ |
| 244 | private String getDynamicTableSqlExec(UserSceneSession session,String input,String userId,String userInput,String errorSql,String errorMessage,String iErroCount,String historySqlList,ErpAiAgent aiAgent){ | 261 | private String getDynamicTableSqlExec(UserSceneSession session,String input,String userId,String userInput,String errorSql,String errorMessage,String iErroCount,String historySqlList,ErpAiAgent aiAgent){ |
| 245 | // 1. 构建自然语言转SQLAgent, | 262 | // 1. 构建自然语言转SQLAgent, |
| 246 | - DynamicTableNl2SqlAiAgent aiDynamicTableNl2SqlAiAgent = createDynamicTableNl2SqlAiAgent(userId, input, session); | ||
| 247 | - String tableNames = session.getCurrentTool().getSInputTabelName(); | ||
| 248 | - // "订单表:viw_salsalesorder,客户信息表:elecustomer,结算方式表:sispayment,产品表(无单价,无金额,无数量):viw_product_sort,销售人员表:viw_sissalesman_depart"; | ||
| 249 | - String tableStruct = session.getCurrentTool().getSStructureMemo(); | ||
| 250 | - String sDataNow = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_TIME_FORMAT); | ||
| 251 | - String rawSql = StrUtil.EMPTY; | ||
| 252 | - if(ObjectUtil.isEmpty(errorSql) && ObjectUtil.isEmpty(errorMessage)){ | ||
| 253 | - rawSql = aiDynamicTableNl2SqlAiAgent.generateMysqlSql(userId,tableNames,tableStruct,sDataNow,userInput); | ||
| 254 | - }else{ | ||
| 255 | - rawSql = aiDynamicTableNl2SqlAiAgent.regenerateSqlWithError(userId, tableNames,tableStruct,sDataNow,userInput,errorSql,errorMessage,iErroCount,historySqlList); | ||
| 256 | - } | ||
| 257 | - log.info("rawSql:"+rawSql); | ||
| 258 | - if (rawSql == null || rawSql.trim().isEmpty()) { | ||
| 259 | - throw new SqlValidateException("SQL EMPTY"); | ||
| 260 | - } | ||
| 261 | - // 2. 清理SQL多余符号 + 生产级强校验(核心安全保障,不可省略) | ||
| 262 | - String cleanSql = SqlValidateUtil.cleanSqlSymbol(rawSql); | ||
| 263 | -// String[] cleanSqlA = rawSql.split(";"); | ||
| 264 | -// if(cleanSqlA.length>1){ | ||
| 265 | -// cleanSql = cleanSqlA[cleanSqlA.length-1]; | ||
| 266 | -// } | ||
| 267 | - SqlValidateUtil.validateMysqlSql(cleanSql); | ||
| 268 | - // 4. 执行SQL获取结构化结果 | ||
| 269 | -// Map<String,Object> params = new HashMap<>(); | ||
| 270 | List<Map<String, Object>> sqlResult = new ArrayList<>(); | 263 | List<Map<String, Object>> sqlResult = new ArrayList<>(); |
| 264 | + String cleanSql = StrUtil.EMPTY; | ||
| 265 | + String rawSql; | ||
| 266 | + String tableStruct; | ||
| 267 | + String sError_mes = StrUtil.EMPTY; | ||
| 268 | + Boolean doSqlErro = false; | ||
| 269 | + List<ChatMessage> chatMessage = operableChatMemoryProvider.getCurrentChatMessages(session.getUserId()); | ||
| 271 | try{ | 270 | try{ |
| 272 | - sqlResult = dynamicExeDbService.findSql(new HashMap<>(),cleanSql); | ||
| 273 | - }catch (Exception e){ | ||
| 274 | - throw new SqlGenerateException(e.getMessage()+" OLDSQL "+cleanSql); | 271 | + DynamicTableNl2SqlAiAgent aiDynamicTableNl2SqlAiAgent = createDynamicTableNl2SqlAiAgent(userId, input, session); |
| 272 | + String tableNames = session.getCurrentTool().getSInputTabelName(); | ||
| 273 | + // "订单表:viw_salsalesorder,客户信息表:elecustomer,结算方式表:sispayment,产品表(无单价,无金额,无数量):viw_product_sort,销售人员表:viw_sissalesman_depart"; | ||
| 274 | + tableStruct = session.getCurrentTool().getSStructureMemo(); | ||
| 275 | + String sDataNow = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_TIME_FORMAT); | ||
| 276 | + | ||
| 277 | + if(ObjectUtil.isEmpty(errorSql) && ObjectUtil.isEmpty(errorMessage)){ | ||
| 278 | + rawSql = aiDynamicTableNl2SqlAiAgent.generateMysqlSql(userId,tableNames,tableStruct,sDataNow,userInput); | ||
| 279 | + }else{ | ||
| 280 | + rawSql = aiDynamicTableNl2SqlAiAgent.regenerateSqlWithError(userId, tableNames,tableStruct,sDataNow,userInput,errorSql,errorMessage,iErroCount,historySqlList); | ||
| 281 | + } | ||
| 282 | + log.info("rawSql:"+rawSql); | ||
| 283 | + if (rawSql == null || rawSql.trim().isEmpty()) { | ||
| 284 | + throw new SqlValidateException("SQL EMPTY"); | ||
| 285 | + } | ||
| 286 | + // 2. 清理SQL多余符号 + 生产级强校验(核心安全保障,不可省略) | ||
| 287 | + cleanSql = SqlValidateUtil.cleanSqlSymbol(rawSql); | ||
| 288 | + // String[] cleanSqlA = rawSql.split(";"); | ||
| 289 | + // if(cleanSqlA.length>1){ | ||
| 290 | + // cleanSql = cleanSqlA[cleanSqlA.length-1]; | ||
| 291 | + // } | ||
| 292 | + SqlValidateUtil.validateMysqlSql(cleanSql); | ||
| 293 | + // 4. 执行SQL获取结构化结果 | ||
| 294 | + // Map<String,Object> params = new HashMap<>(); | ||
| 295 | + try{ | ||
| 296 | + sqlResult = dynamicExeDbService.findSql(new HashMap<>(),cleanSql); | ||
| 297 | + }catch (Exception e){ | ||
| 298 | + throw new SqlGenerateException(e.getMessage()+" OLDSQL "+cleanSql); | ||
| 299 | + } | ||
| 300 | + }catch (SqlValidateException e){ | ||
| 301 | + sError_mes = e.getMessage(); | ||
| 302 | + doAiSqlErrorHistoryThread(session, StrUtil.EMPTY, cleanSql, sError_mes,input); | ||
| 303 | + throw e; | ||
| 304 | + }catch (SqlGenerateException e){ | ||
| 305 | + sError_mes = e.getMessage(); | ||
| 306 | + doAiSqlErrorHistoryThread(session, StrUtil.EMPTY, cleanSql, sError_mes,input); | ||
| 307 | + throw e; | ||
| 275 | } | 308 | } |
| 309 | + | ||
| 276 | // 5. 调用AI服务生成自然语言解释(传入表结构,让解释更贴合业务) | 310 | // 5. 调用AI服务生成自然语言解释(传入表结构,让解释更贴合业务) |
| 277 | String resultJson = JSON.toJSONString(sqlResult); | 311 | String resultJson = JSON.toJSONString(sqlResult); |
| 312 | + | ||
| 313 | + //执行正确去修改对应正确的SQl | ||
| 314 | + if(Integer.valueOf(iErroCount)>0){ | ||
| 315 | + doAiSqlErrorHistoryThread(session, cleanSql, StrUtil.EMPTY, StrUtil.EMPTY,input); | ||
| 316 | + } | ||
| 317 | + | ||
| 318 | + //执行操作记录表 | ||
| 319 | + doAiUserAgentQuestion(session,input,cleanSql,chatMessage); | ||
| 278 | String sText = aiAgent.explainSqlResult( | 320 | String sText = aiAgent.explainSqlResult( |
| 279 | userId, | 321 | userId, |
| 280 | userInput, | 322 | userInput, |
| @@ -282,10 +324,49 @@ public class XlyErpService { | @@ -282,10 +324,49 @@ public class XlyErpService { | ||
| 282 | tableStruct, | 324 | tableStruct, |
| 283 | resultJson | 325 | resultJson |
| 284 | ); | 326 | ); |
| 285 | - log.info("sText:"+sText); | ||
| 286 | return sText; | 327 | return sText; |
| 287 | } | 328 | } |
| 288 | 329 | ||
| 330 | + | ||
| 331 | + /*** | ||
| 332 | + * @Author 钱豹 | ||
| 333 | + * @Date 16:57 2026/3/14 | ||
| 334 | + * @Param | ||
| 335 | + * @return | ||
| 336 | + * @Description 记录动态SQL日志(多线程) | ||
| 337 | + **/ | ||
| 338 | + public void doAiSqlErrorHistoryThread(UserSceneSession session, | ||
| 339 | + String sSqlContent, | ||
| 340 | + String sError_sql, | ||
| 341 | + String sError_mes, | ||
| 342 | + String sQuestion | ||
| 343 | + | ||
| 344 | + ){ | ||
| 345 | + MultiThreadPoolServer mts = MultiThreadPoolServer.getInstance(); | ||
| 346 | + AiSqlErrorHistoryThread at = new AiSqlErrorHistoryThread(session, sSqlContent, sError_sql, sError_mes,sQuestion); | ||
| 347 | + mts.service(at); | ||
| 348 | + } | ||
| 349 | + | ||
| 350 | + /*** | ||
| 351 | + * @Author 钱豹 | ||
| 352 | + * @Date 16:57 2026/3/14 | ||
| 353 | + * @Param | ||
| 354 | + * @return | ||
| 355 | + * @Description 记录动态SQL日志(多线程) | ||
| 356 | + **/ | ||
| 357 | + public void doAiUserAgentQuestion(UserSceneSession session, | ||
| 358 | + String sQuestion, | ||
| 359 | + String sSqlContent, | ||
| 360 | + List<ChatMessage> chatMessage | ||
| 361 | + | ||
| 362 | + ){ | ||
| 363 | + MultiThreadPoolServer mts = MultiThreadPoolServer.getInstance(); | ||
| 364 | + AiUserAgentQuestionThread at = new AiUserAgentQuestionThread(session,sQuestion,sSqlContent,chatMessage); | ||
| 365 | + mts.service(at); | ||
| 366 | + } | ||
| 367 | + | ||
| 368 | + | ||
| 369 | + | ||
| 289 | /*** | 370 | /*** |
| 290 | * @Author 钱豹 | 371 | * @Author 钱豹 |
| 291 | * @Date 11:22 2026/1/31 | 372 | * @Date 11:22 2026/1/31 |
src/main/java/com/xly/thread/AiSqlErrorHistoryThread.java
0 → 100644
| 1 | +package com.xly.thread; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import cn.hutool.core.util.StrUtil; | ||
| 5 | +import com.xly.config.SpringContextHolder; | ||
| 6 | +import com.xly.entity.UserSceneSession; | ||
| 7 | +import com.xly.service.DynamicExeDbService; | ||
| 8 | + | ||
| 9 | +import java.util.HashMap; | ||
| 10 | +import java.util.List; | ||
| 11 | +import java.util.Map; | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +public class AiSqlErrorHistoryThread implements Runnable { | ||
| 15 | + private UserSceneSession session; | ||
| 16 | + private String sSqlContent; | ||
| 17 | + private String sError_sql; | ||
| 18 | + private String sError_mes; | ||
| 19 | + private String sQuestion; | ||
| 20 | + public final String sProName="Sp_Ai_AiSqlErrorHistoryThread"; | ||
| 21 | + | ||
| 22 | + public AiSqlErrorHistoryThread(UserSceneSession session, String sSqlContent, String sError_sql,String sError_mes,String sQuestion) { | ||
| 23 | + this.session = session; | ||
| 24 | + this.sSqlContent = sSqlContent; | ||
| 25 | + this.sError_sql = sError_sql; | ||
| 26 | + this.sError_mes = sError_mes; | ||
| 27 | + this.sQuestion = sQuestion; | ||
| 28 | + } | ||
| 29 | + @Override | ||
| 30 | + public void run() { | ||
| 31 | + String sSceneId = session.getCurrentScene().getSId(); | ||
| 32 | + String sMethodId = session.getCurrentTool().getSId(); | ||
| 33 | + DynamicExeDbService dynamicExeDbService = SpringContextHolder.getBean(DynamicExeDbService.class); | ||
| 34 | + Map<String, Object> data = getMap(sSceneId, sMethodId); | ||
| 35 | + data.put("sQuestion",getsQuestion(session.getSUserQuestionList())); | ||
| 36 | + Map<String, Object> searMap = dynamicExeDbService.getDoProMap(sProName, data); | ||
| 37 | + dynamicExeDbService.getCallPro(searMap, sProName); | ||
| 38 | + } | ||
| 39 | + private String getsQuestion(List<String> sUserQuestionList){ | ||
| 40 | + return String.join(",", sUserQuestionList); | ||
| 41 | + } | ||
| 42 | + /*** | ||
| 43 | + * @Author 钱豹 | ||
| 44 | + * @Date 4:22 2026/3/15 | ||
| 45 | + * @Param [sSceneId, sMethodId] | ||
| 46 | + * @return java.util.Map<java.lang.String,java.lang.Object> | ||
| 47 | + * @Description 获取执行的动态Map | ||
| 48 | + **/ | ||
| 49 | + private Map<String, Object> getMap(String sSceneId, String sMethodId) { | ||
| 50 | + Map<String,Object> data = new HashMap<>(16); | ||
| 51 | + data.put("sSceneId", sSceneId); | ||
| 52 | + data.put("sMethodId", sMethodId); | ||
| 53 | + data.put("sSqlContent",sSqlContent); | ||
| 54 | + data.put("sError_sql",sError_sql); | ||
| 55 | + data.put("sError_mes",sError_mes); | ||
| 56 | + data.put("sBrId",session.getSBrandsId()); | ||
| 57 | + data.put("sBrandsId",session.getSBrandsId()); | ||
| 58 | + data.put("sSuId",session.getSSubsidiaryId()); | ||
| 59 | + data.put("sSubsidiaryId",session.getSSubsidiaryId()); | ||
| 60 | + data.put("sLoginId",session.getUserName()); | ||
| 61 | + data.put("sUserName",session.getUserName()); | ||
| 62 | + data.put("sUserId",session.getUserId()); | ||
| 63 | + return data; | ||
| 64 | + } | ||
| 65 | +} |
src/main/java/com/xly/thread/AiUserAgentQuestionThread.java
0 → 100644
| 1 | +package com.xly.thread; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import cn.hutool.core.util.ObjectUtil; | ||
| 5 | +import cn.hutool.core.util.StrUtil; | ||
| 6 | +import com.xly.config.OperableChatMemoryProvider; | ||
| 7 | +import com.xly.config.SpringContextHolder; | ||
| 8 | +import com.xly.entity.UserSceneSession; | ||
| 9 | +import com.xly.service.DynamicExeDbService; | ||
| 10 | +import dev.langchain4j.data.message.ChatMessage; | ||
| 11 | +import dev.langchain4j.data.message.ChatMessageType; | ||
| 12 | +import jnr.ffi.annotations.In; | ||
| 13 | + | ||
| 14 | +import java.util.Arrays; | ||
| 15 | +import java.util.HashMap; | ||
| 16 | +import java.util.List; | ||
| 17 | +import java.util.Map; | ||
| 18 | + | ||
| 19 | +public class AiUserAgentQuestionThread implements Runnable { | ||
| 20 | + private UserSceneSession session; | ||
| 21 | + private String sSqlContent; | ||
| 22 | + private String sQuestion; | ||
| 23 | + List<ChatMessage> userMessage; | ||
| 24 | + public final String sProName="Sp_Ai_AiUserAgentQuestionThread"; | ||
| 25 | + | ||
| 26 | + public AiUserAgentQuestionThread(UserSceneSession session,String sQuestion,String sSqlContent, List<ChatMessage> userMessage ) { | ||
| 27 | + this.session = session; | ||
| 28 | + this.sSqlContent = sSqlContent; | ||
| 29 | + this.sQuestion = sQuestion; | ||
| 30 | + this.userMessage = userMessage; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + @Override | ||
| 34 | + public void run() { | ||
| 35 | + sQuestion = sQuestion.replace("用户输入:",StrUtil.EMPTY); | ||
| 36 | + String sSceneId = session.getCurrentScene().getSId(); | ||
| 37 | + String sMethodId = session.getCurrentTool().getSId(); | ||
| 38 | + DynamicExeDbService dynamicExeDbService = SpringContextHolder.getBean(DynamicExeDbService.class); | ||
| 39 | + String sQuestionGroupNo = session.getSUserQuestionList().get(0); | ||
| 40 | + Integer bRedis = (session.getSUserQuestionList().size()==1)?1:0; | ||
| 41 | + Map<String, Object> data = getMap(sSceneId, sMethodId,bRedis,sQuestionGroupNo); | ||
| 42 | + data.put("sQuestion",getsQuestion(session.getSUserQuestionList())); | ||
| 43 | + Map<String, Object> searMap = dynamicExeDbService.getDoProMap(sProName, data); | ||
| 44 | + dynamicExeDbService.getCallPro(searMap, sProName); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + private String getsQuestion(List<String> sUserQuestionList){ | ||
| 48 | + return String.join(",", sUserQuestionList); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + //获取组ID | ||
| 52 | + private String getQuestionGroupNo(){ | ||
| 53 | + String sQuestionGroupNo = userMessage.stream() | ||
| 54 | + .filter(one -> one.type().equals(ChatMessageType.USER) && !"用户输入:initAiService".equals(one.text())) | ||
| 55 | + .findFirst() | ||
| 56 | + .map(one->one.text()) | ||
| 57 | + .orElse(StrUtil.EMPTY); | ||
| 58 | + sQuestionGroupNo = sQuestionGroupNo.replace("用户输入:",StrUtil.EMPTY); | ||
| 59 | + sQuestionGroupNo = sQuestionGroupNo.replace(" ",StrUtil.EMPTY); | ||
| 60 | + sQuestionGroupNo = sQuestionGroupNo.replace("\\t",StrUtil.EMPTY); | ||
| 61 | + sQuestionGroupNo = sQuestionGroupNo.replace("\\n",StrUtil.EMPTY); | ||
| 62 | + sQuestionGroupNo = sQuestionGroupNo.toLowerCase(); | ||
| 63 | + return sQuestionGroupNo; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + | ||
| 67 | + /*** | ||
| 68 | + * @Author 钱豹 | ||
| 69 | + * @Date 4:22 2026/3/15 | ||
| 70 | + * @Param [sSceneId, sMethodId] | ||
| 71 | + * @return java.util.Map<java.lang.String,java.lang.Object> | ||
| 72 | + * @Description 获取执行的动态Map | ||
| 73 | + **/ | ||
| 74 | + private Map<String, Object> getMap(String sSceneId, String sMethodId,Integer bRedis,String sQuestionGroupNo) { | ||
| 75 | + Map<String,Object> data = new HashMap<>(16); | ||
| 76 | + data.put("sSceneId", sSceneId); | ||
| 77 | + data.put("sMethodId", sMethodId); | ||
| 78 | + data.put("sSqlContent",sSqlContent); | ||
| 79 | + data.put("sBrId",session.getSBrandsId()); | ||
| 80 | + data.put("sBrandsId",session.getSBrandsId()); | ||
| 81 | + data.put("sSuId",session.getSSubsidiaryId()); | ||
| 82 | + data.put("sSubsidiaryId",session.getSSubsidiaryId()); | ||
| 83 | + data.put("sLoginId",session.getUserName()); | ||
| 84 | + data.put("sUserName",session.getUserName()); | ||
| 85 | + data.put("sUserId",session.getUserId()); | ||
| 86 | + data.put("bRedis",bRedis); | ||
| 87 | + data.put("sQuestionGroupNo",sQuestionGroupNo); | ||
| 88 | + return data; | ||
| 89 | + } | ||
| 90 | +} |
src/main/java/com/xly/thread/MultiThreadPoolServer.java
0 → 100644
| 1 | +package com.xly.thread; | ||
| 2 | + | ||
| 3 | +import java.util.concurrent.ArrayBlockingQueue; | ||
| 4 | +import java.util.concurrent.Callable; | ||
| 5 | +import java.util.concurrent.ExecutorService; | ||
| 6 | +import java.util.concurrent.Future; | ||
| 7 | +import java.util.concurrent.ThreadFactory; | ||
| 8 | +import java.util.concurrent.ThreadPoolExecutor; | ||
| 9 | +import java.util.concurrent.TimeUnit; | ||
| 10 | + | ||
| 11 | +import org.apache.poi.ss.formula.functions.T; | ||
| 12 | +import org.python.google.common.util.concurrent.ThreadFactoryBuilder; | ||
| 13 | + | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * | ||
| 17 | + * 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式, | ||
| 18 | + * 这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 | ||
| 19 | + * 说明:Executors各个方法的弊端: | ||
| 20 | + * 1)newFixedThreadPool和newSingleThreadExecutor: | ||
| 21 | + * 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。 | ||
| 22 | + * 2)newCachedThreadPool和newScheduledThreadPool: | ||
| 23 | + * 主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。 | ||
| 24 | + * 功能:任务线程池类(2秒更新一次线程单独用) | ||
| 25 | + * 工具类参考https://blog.csdn.net/bunnycoffer/article/details/82908024 | ||
| 26 | + * 作者:qb | ||
| 27 | + * 日期:2018-11-13 | ||
| 28 | + * @author qianbao | ||
| 29 | + */ | ||
| 30 | +public class MultiThreadPoolServer { | ||
| 31 | + | ||
| 32 | + /** ˽������线程池服务*/ | ||
| 33 | + private ExecutorService executorService; | ||
| 34 | + private static MultiThreadPoolServer mts; | ||
| 35 | + private final static int poolSize = 30000; | ||
| 36 | + private final static int queueSize = 30000; | ||
| 37 | + | ||
| 38 | + private static ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("theadpool" + "-%d").setDaemon(true).build(); | ||
| 39 | + /** 单例方法 */ | ||
| 40 | + public static MultiThreadPoolServer getInstance() { | ||
| 41 | + | ||
| 42 | + //生成实例 | ||
| 43 | + if (mts == null) { | ||
| 44 | + //锁类ͬ���� | ||
| 45 | + synchronized(MultiThreadPoolServer.class) { | ||
| 46 | + if (mts == null) { | ||
| 47 | + //实例化 | ||
| 48 | + mts = new MultiThreadPoolServer(); | ||
| 49 | + mts.executorService = new ThreadPoolExecutor(poolSize, | ||
| 50 | + poolSize, | ||
| 51 | + 0L, | ||
| 52 | + TimeUnit.SECONDS, | ||
| 53 | + new ArrayBlockingQueue<Runnable>(queueSize), | ||
| 54 | + threadFactory, | ||
| 55 | + new ThreadPoolExecutor.AbortPolicy() { | ||
| 56 | + // 队列已满,而且当前线程数已经超过最大线程数时的异常处理策略 | ||
| 57 | + @Override | ||
| 58 | + public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { | ||
| 59 | + super.rejectedExecution(r, e); | ||
| 60 | + } | ||
| 61 | + }); | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + //返回值 | ||
| 67 | + return mts; | ||
| 68 | + | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + /** 线程池调用方法 */ | ||
| 72 | + public void service(Runnable handler) { | ||
| 73 | + try { | ||
| 74 | + //调用线程 | ||
| 75 | + this.executorService.execute(handler); | ||
| 76 | + } catch (Exception e) { | ||
| 77 | + e.printStackTrace(); | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * 开启一个有返回结果的线程 | ||
| 83 | + * @param | ||
| 84 | + * @return | ||
| 85 | + */ | ||
| 86 | + public Future<T> submit(Callable<T> handler) { | ||
| 87 | + // 把一个任务丢到了线程池中 | ||
| 88 | + try { | ||
| 89 | + //调用线程 | ||
| 90 | + return this.executorService.submit(handler); | ||
| 91 | + } catch (Exception e) { | ||
| 92 | + e.printStackTrace(); | ||
| 93 | + } | ||
| 94 | + return null; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + | ||
| 98 | + /** 线程池结束 */ | ||
| 99 | + public void shutdown() { | ||
| 100 | + this.executorService.shutdown(); | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | +} |
src/main/resources/application.yml
| @@ -50,23 +50,18 @@ spring: | @@ -50,23 +50,18 @@ spring: | ||
| 50 | idle-timeout: 600000 | 50 | idle-timeout: 600000 |
| 51 | max-lifetime: 1800000 | 51 | max-lifetime: 1800000 |
| 52 | # REDIS (RedisProperties) | 52 | # REDIS (RedisProperties) |
| 53 | -# redis: | ||
| 54 | -# host: 127.0.0.1 | ||
| 55 | -# password: xlyXLY2015 | ||
| 56 | -# port: 6380 | ||
| 57 | -# database: 8 # index | ||
| 58 | -# timeout: 30000ms # 连接超时时长(毫秒) | ||
| 59 | -# block-when-exhausted: true #redis配置结束 | ||
| 60 | -# lettuce: | ||
| 61 | -# pool: | ||
| 62 | -# # 连接池中的最大空闲连接 | ||
| 63 | -# max-idle: 20 | ||
| 64 | -# # 连接池中的最小空闲连接 | ||
| 65 | -# min-idle: 20 | ||
| 66 | -# # 连接池最大连接数(使用负值表示没有限制) | ||
| 67 | -# max-active: 200 | ||
| 68 | -# # 连接池最大阻塞等待时间(使用负值表示没有限制) | ||
| 69 | -# max-wait: -1 | 53 | + data: |
| 54 | + redis: | ||
| 55 | + host: localhost | ||
| 56 | + port: 6379 # Redis 端口 | ||
| 57 | + database: 0 # 使用的数据库索引(默认为0) | ||
| 58 | + password: # 密码(如果没有设置则为空) | ||
| 59 | + timeout: 3000ms # 连接超时时间 | ||
| 60 | + lettuce: | ||
| 61 | + pool: | ||
| 62 | + max-active: 8 # 连接池最大连接数 | ||
| 63 | + max-idle: 8 # 连接池最大空闲连接 | ||
| 64 | + min-idle: 0 # 连接池最小空闲连接 | ||
| 70 | 65 | ||
| 71 | # application.yml 或 application.properties | 66 | # application.yml 或 application.properties |
| 72 | langchain4j: | 67 | langchain4j: |