包含redis操作常用方法介绍
依赖RedisConfig
import com.alibaba.fastjson.JSON;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Redis工具类
*/
@Component
public class RedisUtil {
@Resource
private RedisTemplate redisTemplate;
@Resource(name = "valueOperations")
private ValueOperations<String, String> valueOperations;
@Resource(name = "listOperations")
private ListOperations<String, Object> listOperations;
@Resource(name = "hashOperations")
private HashOperations<String, String, Object> hashOperations;
@Resource(name = "setOperations")
private SetOperations<String, Object> setOperations;
@Resource(name = "zSetOperations")
private ZSetOperations<String, Object> zSetOperations;
/**
* 默认过期时长,单位:秒
*/
public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
// =============================common============================
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
*
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
public boolean delete(String... key) {
boolean result = false;
if (key != null && key.length > 0) {
if (key.length == 1) {
result = redisTemplate.delete(key[0]);
} else {
List list = CollectionUtils.arrayToList(key);
Long deleteSize = redisTemplate.delete(list);
result=deleteSize>0;
}
}
return result;
}
// ============================String=============================
/**
* 普通缓存获取
*
* @param key 键
* @param clazz (可选)类 (默认String)
* @return 值
*/
public <T> T get(String key, Class<T> clazz) {
String value = valueOperations.get(key);
return value == null ? null : fromJson(value, clazz);
}
public String get(String key) {
return key == null ? null : valueOperations.get(key);
}
/**
* @param start 起始位置
* @param end 终了位置
*/
public String get(String key, int start, int end) {
return key == null ? null : valueOperations.get(key, start, end);
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @param time (可选)时间(秒) time要大于0 如果time小于等于0 将设置无限期 (默认无限期)
* @return true成功 false失败
*/
public boolean set(String key, Object value, long time) {
try {
String vs = toJson(value);
if (time > 0) {
valueOperations.set(key, vs, time, TimeUnit.SECONDS);
} else {
set(key, vs);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public boolean set(String key, Object value) {
try {
valueOperations.set(key, toJson(value));
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 增补
*
* @param key 键
* @param value 值
* @return 增补后的长度
*/
public Integer append(String key, Object value) {
Integer length = valueOperations.append(key, toJson(value));
return length;
}
/**
* 递增
*
* @param key 键
* @param delta (可选)递增因子, 为负数时递减 (默认为1)
*/
public long increment(String key, long delta) {
return valueOperations.increment(key, delta);
}
public long increment(String key) {
return valueOperations.increment(key);
}
//===============================list=================================
/**
* 获取list缓存的内容
*
* @param key 键
* @param start 开始
* @param end 结束 0 到 -1代表所有值
* @return
*/
public List<Object> lGet(String key, long start, long end) {
try {
return listOperations.range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public List<Object> lGet(String key) {
try {
return listOperations.range(key, 0, -1);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取list缓存的长度
*
* @param key 键
* @return
*/
public long lGetListSize(String key) {
try {
return listOperations.size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 通过索引 获取list中的值
*
* @param key 键
* @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
* @return
*/
public Object lGetIndex(String key, long index) {
try {
return listOperations.index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将Object放入缓存
*
* @param key 键
* @param value 值
* @param time (可选)时间(秒)
* @return
*/
public boolean lSet(String key, Object value, long time) {
try {
listOperations.rightPush(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public boolean lSet(String key, Object value) {
try {
listOperations.rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time (可选)时间(秒)
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
listOperations.rightPushAll(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public boolean lSet(String key, List<Object> value) {
try {
listOperations.rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据索引修改list中的某条数据
*
* @param key 键
* @param index 索引
* @param value 值
* @return
*/
public boolean lUpdateIndex(String key, long index, Object value) {
try {
listOperations.set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 移除N个值为value
*
* @param key 键
* @param count 移除多少个
* @param value 值
* @return 移除的个数
*/
public long lRemove(String key, long count, Object value) {
try {
Long remove = listOperations.remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
//================================Map=================================
/**
* HashGet
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hGet(String key,String item){
return hashOperations.get(key, item);
}
/**
* 获取hashKey对应的所有键值
* @param key 键
* @return 对应的多个键值
*/
public Map<String,Object> hGet(String key){
return hashOperations.entries(key);
}
/**
* HashSet 并设置时间
* @param key 键
* @param map 对应多个键值
* @param time (可选)时间(秒)
* @return true成功 false失败
*/
public boolean hSet(String key, Map<String,Object> map, long time){
try {
hashOperations.putAll(key, map);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public boolean hSet(String key, Map<String,Object> map){
try {
hashOperations.putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
* @param key 键
* @param item 项
* @param value 值
* @param time (可选)时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hSet(String key,String item,Object value,long time) {
try {
hashOperations.put(key, item, value);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public boolean hSet(String key,String item,Object value) {
try {
hashOperations.put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除hash表中的值
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
* @return rowNum 删除行数
*/
public Long hDelete(String key, Object... item){
return hashOperations.delete(key,item);
}
/**
* 判断hash表中是否有该项的值
* @param key 键 不能为null
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item){
return hashOperations.hasKey(key, item);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
* @param key 键
* @param item 项
* @param by (可选)要增加几(为负时减少)(默认1)
* @return
*/
public Long hIncrement(String key, String item,Long by){
return hashOperations.increment(key, item, by);
}
public Long hIncrement(String key, String item){
return hashOperations.increment(key, item, 1L);
}
//============================set=============================
/**
* 根据key获取Set中的所有值
* @param key 键
* @return
*/
public Set<Object> sGet(String key){
try {
return setOperations.members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据value从一个set中查询,是否存在
* @param key 键
* @param value 值
* @return true 存在 false不存在
*/
public boolean sHasKey(String key,Object value){
try {
return setOperations.isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将数据放入set缓存
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object...values) {
try {
return setOperations.add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 将set数据放入缓存
* @param key 键
* @param time 时间(秒)
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key,long time,Object...values) {
try {
Long count = setOperations.add(key, values);
if(time>0) expire(key, time);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取set缓存的长度
* @param key 键
* @return
*/
public long sGetSetSize(String key){
try {
return setOperations.size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 移除值为value的
* @param key 键
* @param values 值 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object ...values) {
try {
Long count = setOperations.remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
//============================zSet=============================
/**
* 根据key获取zSet中score
* @param key 键
* @return score(key不存在是返回null)
*/
public Double zGet(String key, Object value){
try {
return zSetOperations.score(key,value);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据key获取Set中的排名(score越大,返回值越大)
* @param key 键
* @return
*/
public Long zRank(String key, Object value){
try {
return zSetOperations.rank(key,value);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取排名范围
* @param key 键
* @return
*/
public Set<Object> zRange(String key, Long start, Long end){
try {
return zSetOperations.range(key,start,end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取分数范围
* @param key 键
* @return
*/
public Set<Object> zRangeByScore(String key, Double start, Double end){
try {
return zSetOperations.rangeByScore(key,start,end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将数据放入set缓存
* @param key 键
* @param value 值
* @param score 分数
* @return 成功个数
*/
public boolean zSet(String key, Object value, Double score) {
return zSetOperations.add(key, value,score);
}
//============================util=============================
/**
* Object转成JSON数据
*/
private static String toJson(Object object) {
if (object instanceof Integer || object instanceof Long || object instanceof Float ||
object instanceof Double || object instanceof Boolean || object instanceof String) {
return String.valueOf(object);
}
return JSON.toJSONString(object);
}
/**
* JSON数据,转成Object
*/
private static <T> T fromJson(String json, Class<T> clazz) {
return JSON.parseObject(json, clazz);
}
}