redis 工具类
# redis 工具类自写(持续更新....)
```java
/**
* @Description: redis List操作
* @author: zwy
* @date: 2022年03月30日 14:51
*/
@Component
@Log4j2
public class ListRedisUtils {
@Autowired
private RedisTemplate redisTemplate;
// ##########################【操作List类型】#####################################################
/**
* 设置值到List中的头部
*
* @param key
* @param value
* @return
*/
public Boolean listAddInHead(String key, Object value) {
try {
redisTemplate.opsForList().leftPush(String.format(key), value);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 查询list长度
*
* @param key
* @return
*/
public Long listLlen(String key) {
try {
Long size = redisTemplate.opsForList().size(key);
return size;
} catch (Exception e) {
log.error(e.getMessage());
return 0L;
}
}
/**
* 批量设置值到List中的头部
*
* @param key List名字
* @param values
* @return
*/
public Boolean listAddAllInHead(String key, Collection<Object> values) {
try {
redisTemplate.opsForList().leftPushAll(String.format(key), values);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 如果存在List->key, 则设置值到List中的头部
*
* @param key List名字
* @param value
* @return
*/
public Boolean listAddIfPresent(String key, Object value) {
try {
redisTemplate.opsForList().leftPushIfPresent(String.format(key), value);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 设置值到List中的尾部
*
* @param key List名字
* @param value
* @return
*/
public Boolean listAddInEnd(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(String.format(key), value);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 批量设置值到List中的尾部
*
* @param key List名字
* @param values
* @return
*/
public Boolean listAddAllInEnd(String key, Collection<Object> values) {
try {
redisTemplate.opsForList().rightPushAll(String.format(key), values);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 通过索引去设置List->key中的值
*
* @param key
* @param index
* @param value
* @return
*/
public Boolean listAddByIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(String.format(key), index, value);
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 根据索引获取list中的值
*
* @param key list名字
* @param index
* @return
*/
public Object listGetByIndex(String key, long index) {
return redisTemplate.opsForList().index(String.format(key), index);
}
/**
* 根据索引范围获取list中的值
*
* @param key list名字
* @param start
* @param end
* @return
*/
public List<Object> listGetByRange(String key, long start, long end) {
return redisTemplate.opsForList().range(String.format(key), start, end);
}
/**
* 移除并获取列表中第一个元素
* Duration.ZERO(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止)
*
* @param key list名字
* @return
*/
public Object listLeftPop(String key) {
return redisTemplate.opsForList().leftPop(String.format(key), Duration.ZERO);
}
/**
* 移除并获取列表中最后一个元素(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止)
*
* @param key list名字
* @return
*/
public Object listRightPop(String key) {
return redisTemplate.opsForList().rightPop(String.format(key));
}
/**
* 原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素),
* 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。
* Duration.ZERO(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止)
*
* @param sourceKey 源列表
* @param destinationKey 目的列表
* @return
*/
public Object listBRightPopLPush(String sourceKey, String destinationKey) {
return redisTemplate.opsForList().rightPopAndLeftPush(
String.format(sourceKey)
, String.format(destinationKey)
, Duration.ZERO);
}
/**
* 删除集合中值等于value的元素(
* index=0, 删除所有值等于value的元素;
* index>0, 从头部开始删除第一个值等于value的元素;
* index<0, 从尾部开始删除第一个值等于value的元素)
*
* @param key
* @param index
* @param value
* @return
*/
public Long listRemove(String key, long index, Object value) {
Long removeNum = redisTemplate.opsForList().remove(String.format(key), index, value);
return removeNum;
}
}