/*
|
* Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
|
*
|
* https://www.mall4j.com/
|
*
|
* 未经允许,不可做商业用途!
|
*
|
* 版权所有,侵权必究!
|
*/
|
|
package com.yami.trading.common.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import java.util.Arrays;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* @author lh
|
*/
|
@Slf4j
|
public class RedisUtil {
|
private static RedisTemplate<String, Object> redisTemplate = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class);
|
|
public static final StringRedisTemplate STRING_REDIS_TEMPLATE = SpringContextUtils.getBean("stringRedisTemplate",StringRedisTemplate.class);
|
|
//=============================common============================
|
|
/**
|
* 指定缓存失效时间
|
*
|
* @param key 键
|
* @param time 时间(秒)
|
* @return
|
*/
|
public static boolean expire(String key, long time) {
|
try {
|
if (time > 0) {
|
redisTemplate.expire(key, time, TimeUnit.SECONDS);
|
}
|
return true;
|
} catch (Exception e) {
|
log.error("设置redis指定key失效时间错误:", e);
|
return false;
|
}
|
}
|
|
/**
|
* 根据key 获取过期时间
|
*
|
* @param key 键 不能为null
|
* @return 时间(秒) 返回0代表为永久有效 失效时间为负数,说明该主键未设置失效时间(失效时间默认为-1)
|
*/
|
public static Long getExpire(String key) {
|
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
|
}
|
|
/**
|
* 判断key是否存在
|
*
|
* @param key 键
|
* @return true 存在 false 不存在
|
*/
|
public static Boolean hasKey(String key) {
|
try {
|
return redisTemplate.hasKey(key);
|
} catch (Exception e) {
|
log.error("redis判断key是否存在错误:", e);
|
return false;
|
}
|
}
|
|
/**
|
* 删除缓存
|
*
|
* @param key 可以传一个值 或多个
|
*/
|
@SuppressWarnings("unchecked")
|
public static void del(String... key) {
|
if (key != null && key.length > 0) {
|
if (key.length == 1) {
|
redisTemplate.delete(key[0]);
|
} else {
|
redisTemplate.delete(Arrays.asList(key));
|
}
|
}
|
}
|
|
//============================String=============================
|
|
/**
|
* 普通缓存获取
|
*
|
* @param key 键
|
* @return 值
|
*/
|
@SuppressWarnings("unchecked")
|
public static <T> T get(String key) {
|
return key == null ? null : (T) redisTemplate.opsForValue().get(key);
|
}
|
|
/**
|
* 普通缓存放入
|
*
|
* @param key 键
|
* @param value 值
|
* @return true成功 false失败
|
*/
|
public static boolean set(String key, Object value) {
|
try {
|
redisTemplate.opsForValue().set(key, value);
|
return true;
|
} catch (Exception e) {
|
log.error("设置redis缓存错误:", e);
|
return false;
|
}
|
|
}
|
|
/**
|
* 普通缓存放入并设置时间
|
*
|
* @param key 键
|
* @param value 值
|
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
|
* @return true成功 false 失败
|
*/
|
public static boolean set(String key, Object value, long time) {
|
try {
|
if (time > 0) {
|
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
|
} else {
|
set(key, value);
|
}
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
return false;
|
}
|
}
|
|
/**
|
* 递增 此时value值必须为int类型 否则报错
|
*
|
* @param key 键
|
* @param delta 要增加几(大于0)
|
* @return
|
*/
|
public static Long incr(String key, long delta) {
|
if (delta < 0) {
|
throw new RuntimeException("递增因子必须大于0");
|
}
|
return STRING_REDIS_TEMPLATE.opsForValue().increment(key, delta);
|
}
|
|
/**
|
* 递减
|
*
|
* @param key 键
|
* @param delta 要减少几(小于0)
|
* @return
|
*/
|
public static Long decr(String key, long delta) {
|
if (delta < 0) {
|
throw new RuntimeException("递减因子必须大于0");
|
}
|
return STRING_REDIS_TEMPLATE.opsForValue().increment(key, -delta);
|
}
|
|
/**
|
* push 同步
|
*
|
*/
|
public static void pushSync(String key, Object object) {
|
STRING_REDIS_TEMPLATE.opsForList().leftPush(key, JSON.toJSONString(object, SerializerFeature.WriteClassName));
|
}
|
|
/**
|
* 从队列尾取一个Object
|
*
|
*/
|
public static Object poll(String key) {
|
String value = STRING_REDIS_TEMPLATE.opsForList().rightPop(key);
|
if (value == null || value.equals("nil")) {
|
return null;
|
}
|
return JSON.parse(value);
|
}
|
|
public static void hSet(String hash, String key, String value){
|
STRING_REDIS_TEMPLATE.opsForHash().put(hash, key, value);
|
}
|
public static String hGet(String hash, String key){
|
Object o = STRING_REDIS_TEMPLATE.opsForHash().get(hash, key);
|
if (o == null) {
|
return null;
|
}
|
return o.toString();
|
}
|
}
|