|
@@ -1,7 +1,11 @@
|
|
|
-/*
|
|
|
+
|
|
|
package com.example.xiaoshiweixinback.business.redis;
|
|
|
|
|
|
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.data.redis.support.atomic.RedisAtomicLong;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
@@ -9,14 +13,6 @@ import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
-*/
|
|
|
-/**
|
|
|
- * @ClassName
|
|
|
- * @Description TODO
|
|
|
- * @Author 陈凯裕
|
|
|
- * @Date 2022/7/15 14:02
|
|
|
- * @Version TODO
|
|
|
- **//*
|
|
|
|
|
|
@Component
|
|
|
public class RedisService {
|
|
@@ -24,524 +20,433 @@ public class RedisService {
|
|
|
@Resource
|
|
|
RedisTemplate redisTemplate;
|
|
|
|
|
|
- */
|
|
|
-/** -------------------key相关操作--------------------- *//*
|
|
|
|
|
|
+/** -------------------key相关操作--------------------- */
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 删除key
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public void delete(String key) {
|
|
|
redisTemplate.delete(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 批量删除key
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public void delete(Collection<String> keys) {
|
|
|
redisTemplate.delete(keys);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 是否存在key
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Boolean hasKey(String key) {
|
|
|
return redisTemplate.hasKey(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 设置过期时间
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 设置过期时间
|
|
|
+ */
|
|
|
public Boolean expire(String key, CacheTTLEnum ttlEnum) {
|
|
|
return redisTemplate.expire(key, ttlEnum.getTime(), ttlEnum.getUnit());
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 移除 key 的过期时间,key 将持久保持
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Boolean persist(String key) {
|
|
|
return redisTemplate.persist(key);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 返回 key 的剩余的过期时间
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long getExpire(String key, TimeUnit unit) {
|
|
|
return redisTemplate.getExpire(key, unit);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 修改 key 的名称
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 修改 key 的名称
|
|
|
+ */
|
|
|
public void rename(String oldKey, String newKey) {
|
|
|
redisTemplate.rename(oldKey, newKey);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/** -------------------string相关操作--------------------- *//*
|
|
|
+
|
|
|
+/** -------------------string相关操作--------------------- */
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 设置指定 key 的值
|
|
|
- *//*
|
|
|
+ */
|
|
|
|
|
|
public void set(String key, Object value) {
|
|
|
redisTemplate.opsForValue().set(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取指定 key 的值
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取指定 key 的值
|
|
|
+ */
|
|
|
public Object get(String key) {
|
|
|
return redisTemplate.opsForValue().get(key);
|
|
|
}
|
|
|
|
|
|
- public <T> T get(String key,Class<T> clazz){
|
|
|
- return (T)get(key);
|
|
|
+ public <T> T get(String key, Class<T> clazz) {
|
|
|
+ return (T) get(key);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Object getAndSet(String key, Object value) {
|
|
|
return redisTemplate.opsForValue().getAndSet(key, value);
|
|
|
}
|
|
|
|
|
|
- public <T> T getAndSet(String key,Object value,Class<T> clazz){
|
|
|
- return (T)getAndSet(key,value);
|
|
|
+ public <T> T getAndSet(String key, Object value, Class<T> clazz) {
|
|
|
+ return (T) getAndSet(key, value);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 批量获取
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public List<Object> multiGet(Collection<String> keys) {
|
|
|
return redisTemplate.opsForValue().multiGet(keys);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 只有在 key 不存在时设置 key 的值
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public boolean setIfAbsent(String key, Object value) {
|
|
|
return redisTemplate.opsForValue().setIfAbsent(key, value);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 设置一个key,值为自增的LONG类型,每调用一次+1并且返回值自增后的值
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long incrBy(String key) {
|
|
|
- RedisAtomicLong redisAtomicLong = new RedisAtomicLong(key,redisTemplate.getConnectionFactory());
|
|
|
+ RedisAtomicLong redisAtomicLong = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
return redisAtomicLong.incrementAndGet();
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/** -------------------hash相关操作------------------------- *//*
|
|
|
+/** -------------------hash相关操作------------------------- */
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 获取存储在hash表中指定字段的值
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Object hGet(String key, String field) {
|
|
|
return redisTemplate.opsForHash().get(key, field);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/*
|
|
|
- * 存储指定键值对至hash表中
|
|
|
- * *//*
|
|
|
|
|
|
+ /*
|
|
|
+ * 存储指定键值对至hash表中
|
|
|
+ **/
|
|
|
public void hPut(String key, String hashKey, Object value) {
|
|
|
redisTemplate.opsForHash().put(key, hashKey, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 获取hash表中所有的键值对
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Map<String, Object> hGetAll(String key) {
|
|
|
return redisTemplate.opsForHash().entries(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取hash表中所有给定字段的值
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取hash表中所有给定字段的值
|
|
|
+ */
|
|
|
public List<Object> hMultiGet(String key, Collection<String> fields) {
|
|
|
return redisTemplate.opsForHash().multiGet(key, fields);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/*
|
|
|
- * 批量插入到hash表中
|
|
|
- * *//*
|
|
|
|
|
|
+ /*
|
|
|
+ * 批量插入到hash表中
|
|
|
+ * */
|
|
|
public void hPutAll(String key, Map<String, Object> maps) {
|
|
|
redisTemplate.opsForHash().putAll(key, maps);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 删除一个或多个hash表字段
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long hDelete(String key, String... fields) {
|
|
|
return redisTemplate.opsForHash().delete(key, fields);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 查看hash表 key 中,指定的字段是否存在
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 查看hash表 key 中,指定的字段是否存在
|
|
|
+ */
|
|
|
public boolean hExists(String key, String field) {
|
|
|
return redisTemplate.opsForHash().hasKey(key, field);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 获取所有hash表中的字段
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Set<String> hKeys(String key) {
|
|
|
return redisTemplate.opsForHash().keys(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取hash表中字段的数量
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取hash表中字段的数量
|
|
|
+ */
|
|
|
public Long hSize(String key) {
|
|
|
return redisTemplate.opsForHash().size(key);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/** ------------------------list相关操作---------------------------- *//*
|
|
|
+/** ------------------------list相关操作---------------------------- */
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 通过索引获取列表中的元素
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Object lIndex(String key, long index) {
|
|
|
return redisTemplate.opsForList().index(key, index);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 通过索引设置列表元素的值
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 通过索引设置列表元素的值
|
|
|
+ */
|
|
|
public void lSet(String key, long index, String value) {
|
|
|
redisTemplate.opsForList().set(key, index, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取列表指定范围内的元素
|
|
|
- *//*
|
|
|
-
|
|
|
- public List<JpCityPO> lRange(String key, long start, long end) {
|
|
|
- return redisTemplate.opsForList().range(key, start, end);
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 列表队列左push
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long lLeftPush(String key, Object value) {
|
|
|
return redisTemplate.opsForList().leftPush(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 列表队列批量左push
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 列表队列批量左push
|
|
|
+ */
|
|
|
public Long lLeftPushAll(String key, Object... value) {
|
|
|
- if(value.length==0)
|
|
|
+ if (value.length == 0)
|
|
|
return 0L;
|
|
|
return redisTemplate.opsForList().leftPushAll(key, value);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 列表队列右push
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long lRightPush(String key, Object value) {
|
|
|
return redisTemplate.opsForList().rightPush(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 列表队列批量右push
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 列表队列批量右push
|
|
|
+ */
|
|
|
public Long lRightPushAll(String key, Object... value) {
|
|
|
- if(value.length==0)
|
|
|
+ if (value.length == 0)
|
|
|
return 0L;
|
|
|
return redisTemplate.opsForList().rightPushAll(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 弹出列表左侧的第一个元素
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 弹出列表左侧的第一个元素
|
|
|
+ */
|
|
|
public Object lLeftPop(String key) {
|
|
|
return redisTemplate.opsForList().leftPop(key);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 弹出列表右侧的第一个元素
|
|
|
*
|
|
|
* @param key
|
|
|
* @return 删除的元素
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Object lRightPop(String key) {
|
|
|
return redisTemplate.opsForList().rightPop(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取列表长度
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取列表长度
|
|
|
+ */
|
|
|
public Long lLen(String key) {
|
|
|
return redisTemplate.opsForList().size(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/** --------------------set相关操作-------------------------- *//*
|
|
|
|
|
|
+/** --------------------set相关操作-------------------------- */
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * set添加元素
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * set添加元素
|
|
|
+ */
|
|
|
public Long sAdd(String key, Object... values) {
|
|
|
return redisTemplate.opsForSet().add(key, values);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* set移除元素
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long sRemove(String key, Object... values) {
|
|
|
return redisTemplate.opsForSet().remove(key, values);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取集合的大小
|
|
|
*
|
|
|
* @param key
|
|
|
* @return
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long sSize(String key) {
|
|
|
return redisTemplate.opsForSet().size(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取集合所有元素
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取集合所有元素
|
|
|
+ */
|
|
|
public Set<String> sGetMembers(String key) {
|
|
|
return redisTemplate.opsForSet().members(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 判断集合是否包含元素
|
|
|
- *//*
|
|
|
|
|
|
- public boolean sContains(String key,Object value){
|
|
|
- return redisTemplate.opsForSet().isMember(key,value);
|
|
|
+ /**
|
|
|
+ * 判断集合是否包含元素
|
|
|
+ */
|
|
|
+ public boolean sContains(String key, Object value) {
|
|
|
+ return redisTemplate.opsForSet().isMember(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**------------------zSet相关操作--------------------------------*//*
|
|
|
|
|
|
+/**------------------zSet相关操作--------------------------------*/
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 添加元素,有序集合是按照元素的score值由小到大排列
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 添加元素,有序集合是按照元素的score值由小到大排列
|
|
|
+ */
|
|
|
public Boolean zAdd(String key, Object value, double score) {
|
|
|
return redisTemplate.opsForZSet().add(key, value, score);
|
|
|
}
|
|
|
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 移除指定value的值
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long zRemove(String key, Object... values) {
|
|
|
return redisTemplate.opsForZSet().remove(key, values);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 增加元素的score值,并返回增加后的值
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Double zIncrementScore(String key, Object value, double delta) {
|
|
|
return redisTemplate.opsForZSet().incrementScore(key, value, delta);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 返回元素在集合的排名,按Score升序排名
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long zRank(String key, Object value) {
|
|
|
return redisTemplate.opsForZSet().rank(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 返回元素在集合的排名,按Score倒序排名
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long zReverseRank(String key, Object value) {
|
|
|
return redisTemplate.opsForZSet().reverseRank(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 获取集合的元素, 升序
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Set<String> zRange(String key, long start, long end) {
|
|
|
return redisTemplate.opsForZSet().range(key, start, end);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 获取集合的元素, 倒序
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Set<String> zReverseRange(String key, long start, long end) {
|
|
|
return redisTemplate.opsForZSet().reverseRange(key, start, end);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+ /**
|
|
|
* 根据Score值查询集合元素,升序
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Set<String> zRangeByScore(String key, double min, double max) {
|
|
|
return redisTemplate.opsForZSet().rangeByScore(key, min, max);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 根据Score值查询集合元素, 倒序
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据Score值查询集合元素, 倒序
|
|
|
+ */
|
|
|
public Set<Object> zReverseRangeByScore(String key, double min,
|
|
|
double max) {
|
|
|
return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 根据score值获取集合元素数量
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据score值获取集合元素数量
|
|
|
+ */
|
|
|
public Long zCount(String key, double min, double max) {
|
|
|
return redisTemplate.opsForZSet().count(key, min, max);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取集合大小
|
|
|
*
|
|
|
* @param key
|
|
|
* @return
|
|
|
- *//*
|
|
|
-
|
|
|
+ */
|
|
|
public Long zSize(String key) {
|
|
|
return redisTemplate.opsForZSet().size(key);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 获取集合中value元素的score值
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取集合中value元素的score值
|
|
|
+ */
|
|
|
public Double zScore(String key, Object value) {
|
|
|
return redisTemplate.opsForZSet().score(key, value);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 移除指定索引位置的成员
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 移除指定索引位置的成员
|
|
|
+ */
|
|
|
public Long zRemoveRange(String key, long start, long end) {
|
|
|
return redisTemplate.opsForZSet().removeRange(key, start, end);
|
|
|
}
|
|
|
|
|
|
- */
|
|
|
-/**
|
|
|
- * 根据指定的score值的范围来移除成员
|
|
|
- *//*
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据指定的score值的范围来移除成员
|
|
|
+ */
|
|
|
public Long zRemoveRangeByScore(String key, double min, double max) {
|
|
|
return redisTemplate.opsForZSet().removeRangeByScore(key, min, max);
|
|
|
}
|
|
@@ -550,4 +455,4 @@ public class RedisService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-*/
|
|
|
+
|