java redisTemplate

@Autowired
private RedisTemplate<String, Object> redisTemplate;

enum Position {
BEFORE, AFTER
}

/**************************************************** key 相关操作 *************************************************/

/**
* 实现命令 : KEYS pattern
* 查找所有符合 pattern 模式的 key
* ? 匹配单个字符
* * 匹配0到多个字符
* [a-c] 匹配a和c
* [ac] 匹配a到c
* [^a] 匹配除了a以外的字符
*
* @param pattern redis pattern 表达式
* @return
*/
public Set keys(String pattern) {
return redisTemplate.keys(pattern);
}

/**
* 实现命令 : DEL key1 [key2 ...]
* 删除一个或多个key
*
* @param keys
* @return
*/
public Long del(String... keys) {
Set keySet = Stream.of(keys).collect(Collectors.toSet());
return redisTemplate.delete(keySet);
}

/**
* 实现命令 : UNLINK key1 [key2 ...]
* 删除一个或多个key
*
* @param keys
* @return
*/
public Long unlink(String... keys) {
Set keySet = Stream.of(keys).collect(Collectors.toSet());
return redisTemplate.unlink(keySet);
}

/**
* 实现命令 : EXISTS key1 [key2 ...]
* 查看 key 是否存在,返回存在 key 的个数
*
* @param keys
* @return
*/
public Long exists(String... keys) {
Set keySet = Stream.of(keys).collect(Collectors.toSet());
return redisTemplate.countExistingKeys(keySet);
}

/**
* 实现命令 : TYPE key
* 查看 key 的 value 的类型
*
* @param key
* @return
*/
public String type(String key) {
DataType dataType = redisTemplate.type(key);
if (dataType == null) {
return "";
}
return dataType.code();
}

/**
* 实现命令 : PERSIST key
* 取消 key 的超时时间,持久化 key
*
* @param key
* @return
*/
public boolean persist(String key) {
Boolean result = redisTemplate.persist(key);
if (null == result) {
return false;
}
return result;
}

/**
* 实现命令 : TTL key
* 返回给定 key 的剩余生存时间,key不存在返回 null
* 单位: 秒
*
* @param key
* @return
*/
public Long ttl(String key) {
return redisTemplate.getExpire(key);
}

/**
* 实现命令 : PTTL key
* 返回给定 key 的剩余生存时间,key不存在返回 null
* 单位: 毫秒
*
* @param key
* @return
*/
public Long pTtl(String key) {
return redisTemplate.getExpire(key, TimeUnit.MILLISECONDS);
}

/**
* 实现命令 : EXPIRE key 秒
* 设置key 的生存时间
* 单位 : 秒
*
* @param key
* @return
*/
public boolean expire(String key, int ttl) {
Boolean result = redisTemplate.expire(key, ttl, TimeUnit.SECONDS);
if (null == result) {
return false;
}
return result;
}

/**
* 实现命令 : PEXPIRE key 毫秒
* 设置key 的生存时间
* 单位 : 毫秒
*
* @param key
* @return
*/
public boolean pExpire(String key, Long ttl) {
Boolean result = redisTemplate.expire(key, ttl, TimeUnit.MILLISECONDS);
if (null == result) {
return false;
}
return result;
}

/**
* 实现命令 : EXPIREAT key Unix时间戳(自1970年1月1日以来的秒数)
* 设置key 的过期时间
*
* @param key
* @param date
* @return
*/
public boolean expireAt(String key, Date date) {
Boolean result = redisTemplate.expireAt(key, date);
if (null == result) {
return false;
}
return result;
}

/**
* 实现命令 : RENAME key newkey
* 重命名key,如果newKey已经存在,则newKey的原值被覆盖
*
* @param oldKey
* @param newKey
*/
public void rename(String oldKey, String newKey) {
redisTemplate.rename(oldKey, newKey);
}

/**
* 实现命令 : RENAMENX key newkey
* 安全重命名key,newKey不存在时才重命名
*
* @param oldKey
* @param newKey
* @return
*/
public boolean renameNx(String oldKey, String newKey) {
Boolean result = redisTemplate.renameIfAbsent(oldKey, newKey);
if (null == result) {
return false;
}
return result;
}

/**************************************************** key 相关操作 *************************************************/

/************************************************* String 相关操作 *************************************************/

/**
* 实现命令 : SET key value
* 添加一个持久化的 String 类型的键值对
*
* @param key
* @param value
*/
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}

/**
* 实现命令 : SET key value EX 秒、 setex key value 秒
* 添加一个 String 类型的键值对,并设置生存时间
*
* @param key
* @param value
* @param ttl key 的生存时间,单位:秒
*/
public void set(String key, Object value, int ttl) {
redisTemplate.opsForValue().set(key, value, ttl, TimeUnit.SECONDS);
}

/**
* 实现命令 : SET key value PX 毫秒 、 psetex key value 毫秒
* 添加一个 String 类型的键值对,并设置生存时间
*
* @param key
* @param value
* @param ttl key 的生存时间,单位:毫秒
*/
public void set(String key, Object value, long ttl) {
redisTemplate.opsForValue().set(key, value, ttl, TimeUnit.MILLISECONDS);
}

/**
* 实现命令 : SET key value [EX 秒|PX 毫秒] [NX|XX]
* 添加一个 String 类型的键值对,
* ttl、timeUnit 不为 null 时设置生存时间
* keyIfExist 不为 null 时,设置 NX 或 XX 模式
*
* @param key
* @param value
* @param ttl 生存时间
* @param timeUnit 生存时间的单位
* @param keyIfExist true 表示 xx,key 存在时才添加. false 表示 nx,key 不存在时才添加
*/
public boolean set(String key, Object value, Long ttl, TimeUnit timeUnit, Boolean keyIfExist) {
Boolean result = false;

if ((ttl == null || timeUnit == null) && (keyIfExist == null)) {
// SET key value
redisTemplate.opsForValue().set(key, value);
result = true;
}

if (ttl != null && timeUnit != null && keyIfExist == null) {
// SET key value [EX 秒|PX 毫秒]
redisTemplate.opsForValue().set(key, value, ttl, timeUnit);
result = true;
}

if ((ttl == null || timeUnit == null) && (keyIfExist != null) && keyIfExist) {
// SET key value XX
result = redisTemplate.opsForValue().setIfPresent(key, value);
}

if (ttl != null && timeUnit != null && keyIfExist != null && keyIfExist) {
// SET key value [EX 秒|PX 毫秒] XX
result = redisTemplate.opsForValue().setIfPresent(key, value, ttl, timeUnit);
}

if ((ttl == null || timeUnit == null) && (keyIfExist != null) && (!keyIfExist)) {
// SET key value NX
result = redisTemplate.opsForValue().setIfAbsent(key, value);
}

if (ttl != null && timeUnit != null && keyIfExist != null && (!keyIfExist)) {
// SET key value [EX 秒|PX 毫秒] NX
result = redisTemplate.opsForValue().setIfAbsent(key, value, ttl, timeUnit);

}

if (result == null) {
return false;
}
return result;
}

/**
* 实现命令 : MSET key1 value1 [key2 value2...]
* 安全批量添加键值对,只要有一个 key 已存在,所有的键值对都不会插入
*
* @param keyValueMap
*/
public void mSet(Map<String, Object> keyValueMap) {
redisTemplate.opsForValue().multiSetIfAbsent(keyValueMap);
}

/**
* 实现命令 : MSETNX key1 value1 [key2 value2...]
* 批量添加键值对
*
* @param keyValueMap
*/
public void mSetNx(Map<String, Object> keyValueMap) {
redisTemplate.opsForValue().multiSet(keyValueMap);
}

/**
* 实现命令 : SETRANGE key 下标 str
* 覆盖 原始 value 的一部分,从指定的下标开始覆盖, 覆盖的长度为指定的字符串的长度。
*
* @param key
* @param str 字符串
* @param offset 开始覆盖的位置,包括开始位置,下标从0开始
*/
public void setRange(String key, Object str, int offset) {
redisTemplate.opsForValue().set(key, str, offset);
}

/**
* 实现命令 : APPEND key value
* 在原始 value 末尾追加字符串
*
* @param key
* @param str 要追加的字符串
*/
public void append(String key, String str) {
redisTemplate.opsForValue().append(key, str);
}

/**
* 实现命令 : GETSET key value
* 设置 key 的 value 并返回旧 value
*
* @param key
* @param value
*/
public Object getSet(String key, Object value) {
return redisTemplate.opsForValue().getAndSet(key, value);
}

/**
* 实现命令 : GET key
* 获取一个key的value
*
* @param key
* @return value
*/
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}

/**
* 实现命令 : MGET key1 [key2...]
* 获取多个key的value
*
* @param keys
* @return value
*/
public List

posted @ 2021-08-18 13:21  于是长大了  阅读(912)  评论(0)    收藏  举报