package cn.exrick.xboot.core.common.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
* @author exrick
*/
@Component
public class RedisTemplateHelper {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* scan实现
* @param pattern 表达式
* @param consumer 对迭代到的key进行操作
*/
private void scan(String pattern, Consumer<byte[]> consumer) {
redisTemplate.execute((RedisConnection connection) -> {
try (Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) {
cursor.forEachRemaining(consumer);
return null;
} catch (IOException e) {
throw new RuntimeException(e);
}
});
}
/**
* scan获取符合条件的key
* @param pattern 表达式
* @return
*/
public Set<String> scan(String pattern) {
Set<String> keys = new HashSet<>();
this.scan(pattern, item -> {
// 符合条件的key
String key = new String(item, StandardCharsets.UTF_8);
keys.add(key);
});
return keys;
}
/**
* 通过通配符表达式删除所有
* @param pattern
*/
public void deleteByPattern(String pattern) {
Set<String> keys = this.scan(pattern);
redisTemplate.delete(keys);
}
/** -------------------key相关操作--------------------- */
/**
* 删除key
* @param key
*/
public void delete(String key) {
redisTemplate.delete(key);
}
/**
* 批量删除key
* @param keys
*/
public void delete(Collection<String> keys) {
redisTemplate.delete(keys);
}
/**
* 序列化key
* @param key
* @return
*/
public byte[] dump(String key) {
return redisTemplate.dump(key);
}
/**
* 是否存在key
* @param key
* @return
*/
public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
/**
* 设置过期时间
* @param key
* @param timeout
* @param unit 天:TimeUnit.DAYS 小时:TimeUnit.HOURS 分钟:TimeUnit.MINUTES 秒:TimeUnit.SECONDS 毫秒:TimeUnit.MILLISECONDS
* @return
*/
public Boolean expire(String key, long timeout, TimeUnit unit) {
return redisTemplate.expire(key, timeout, unit);
}
/**
* 设置过期时间
* @param key
* @param date
* @return
*/
public Boolean expireAt(String key, Date date) {
return redisTemplate.expireAt(key, date);
}
/**
* 查找匹配的key
* @param pattern
* @return
*/
public Set<String> keys(String pattern) {
return redisTemplate.keys(pattern);
}
/**
* 将当前数据库的 key 移动到给定的数据库 db 当中
* @param key
* @param dbIndex
* @return
*/
public Boolean move(String key, int dbIndex) {
return redisTemplate.move(key, dbIndex);
}
/**
* 移除 key 的过期时间,key 将持久保持
* @param key
* @return
*/
public Boolean persist(String key) {
return redisTemplate.persist(key);
}
/**
* 返回 key 的剩余的过期时间
* @param key
* @param unit
* @return
*/
public Long getExpire(String key, TimeUnit unit) {
return redisTemplate.getExpire(key, unit);
}
/**
* 返回 key 的剩余的过期时间
* @param key
* @return
*/
public Long getExpire(String key) {
return redisTemplate.getExpire(key);
}
/**
* 从当前数据库中随机返回一个 key
* @return
*/
public String randomKey() {
return redisTemplate.randomKey();
}
/**
* 修改 key 的名称
* @param oldKey
* @param newKey
*/
public void rename(String oldKey, String newKey) {
redisTemplate.rename(oldKey, newKey);
}
/**
* 仅当 newkey 不存在时,将 oldKey 改名为 newkey
* @param oldKey
* @param newKey
* @return
*/
public Boolean renameIfAbsent(String oldKey, String newKey) {
return redisTemplate.renameIfAbsent(oldKey, newKey);
}
/**
* 返回 key 所储存的值的类型
* @param key
* @return
*/
public DataType type(String key) {
return redisTemplate.type(key);
}
/** -------------------string相关操作--------------------- */
/**
* 设置指定 key 的值
* @param key
* @param value
*/
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 将值 value 关联到 key ,并将 key 的过期时间设为 timeout
* @param key
* @param value
* @param timeout 过期时间
* @param unit 时间单位
*/
public void set(String key, String value, long timeout, TimeUnit unit) {
redisTemplate.opsForValue().set(key, value, timeout, unit);
}
/**
* 获取指定 key 的值
* @param key
* @return
*/
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 返回 key 中字符串值的子字符
* @param key
* @param start
* @param end
* @return
*/
public String getRange(String key, long start, long end) {
return redisTemplate.opsForValue().get(key, start, end);
}
/**
* 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
* @param key
* @param value
* @return
*/
public String getAndSet(String key, String value) {
return redisTemplate.opsForValue().getAndSet(key, value);
}
/**
* 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
* @param key
* @param offset
* @return
*/
public Boolean getBit(String key, long offset) {
return redisTemplate.opsForValue().getBit(key, offset);
}
/**
* 批量获取
* @param keys
* @return
*/
public List<String> multiGet(Collection<String> keys) {
return redisTemplate.opsForValue().multiGet(keys);
}
/**
* 设置ASCII码, 字符串'a'的ASCII码是97, 转为二进制是'01100001', 此方法是将二进制第offset位值变为value
* @param key
* @param offset 位置
* @param value 值,true为1, false为0
* @return
*/
public boolean setBit(String key, long offset, boolean value) {
return redisTemplate.opsForValue().setBit(key, offset, value);
}
/**
* 只有在 key 不存在时设置 key 的值
* @param key
* @param value
* @return 之前已经存在返回false, 不存在返回true
*/
public boolean setIfAbsent(String key, String value) {
return redisTemplate.opsForValue().setIfAbsent(key, value);
}
/**
* 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
* @param key
* @param value
* @param offset 从指定位置开始覆写
*/
public void setRange(String key, String value, long offset) {
redisTemplate.opsForValue().set(key, value, offset);
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Spring Boot 2.x的一站式前后端分离快速开发平台,XBoot 微信小程序+Uniapp 前端:Vue+iView Admin 后端:Spring Boot 2.x/Spring Security/JWT/JPA+Mybatis-Plus/Redis/Elasticsearch/Activiti 分布式限流/同步锁/验证码/SnowFlake雪花算法ID生成 动态权限管理 数据权限 工作流 代码生成 定时任务 第三方社交账号、短信登录 单点登录 OAuth2开放平台
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring Boot 2.x的一站式前后端分离快速开发平台 (388个子文件)
treeMpController.btl 7KB
treeMpController.btl 7KB
treeController.btl 7KB
treeController.btl 6KB
mpController.btl 3KB
mpController.btl 3KB
serviceImpl.btl 3KB
serviceImpl.btl 3KB
plus.btl 2KB
plus.btl 2KB
controller.btl 2KB
controller.btl 2KB
entity.btl 2KB
entity.btl 2KB
service.btl 1KB
service.btl 1KB
mplus.btl 1KB
mplus.btl 1KB
mpServiceImpl.btl 886B
mpServiceImpl.btl 886B
dao.btl 720B
dao.btl 715B
mapper.btl 327B
mapper.btl 327B
mpService.btl 326B
mpService.btl 326B
mapperXml.btl 225B
mapperXml.btl 225B
.gitattributes 85B
.gitignore 61B
favicon.ico 12KB
favicon.ico 12KB
RedisTemplateHelper.java 33KB
RedisTemplateHelper.java 33KB
UserController.java 15KB
UserController.java 15KB
XbootGenerator.java 14KB
XbootGenerator.java 14KB
XbootMPGenerator.java 14KB
XbootMPGenerator.java 14KB
Oauth2Controller.java 13KB
Oauth2Controller.java 13KB
PermissionController.java 12KB
PermissionController.java 12KB
DepartmentController.java 10KB
DepartmentController.java 10KB
SecurityUtil.java 9KB
SecurityUtil.java 9KB
SystemLogAspect.java 9KB
SystemLogAspect.java 9KB
CreateVerifyCode.java 9KB
CreateVerifyCode.java 9KB
RoleController.java 7KB
RoleController.java 7KB
UserServiceImpl.java 7KB
UserServiceImpl.java 7KB
QuartzJobController.java 6KB
QuartzJobController.java 6KB
JWTAuthenticationFilter.java 6KB
JWTAuthenticationFilter.java 6KB
RedisController.java 6KB
RedisController.java 6KB
RedisInfo.java 5KB
RedisInfo.java 5KB
WebSecurityConfig.java 5KB
WebSecurityConfig.java 5KB
PageUtil.java 5KB
AuthenticationSuccessHandler.java 5KB
PageUtil.java 5KB
AuthenticationSuccessHandler.java 5KB
RestCtrlExceptionHandler.java 5KB
RestCtrlExceptionHandler.java 5KB
LimitRaterInterceptor.java 4KB
LimitRaterInterceptor.java 4KB
AuthenticationFailHandler.java 4KB
AuthenticationFailHandler.java 4KB
DictDataController.java 4KB
DictDataController.java 4KB
IpInfoUtil.java 4KB
IpInfoUtil.java 4KB
RedisCacheConfig.java 4KB
RedisCacheConfig.java 4KB
User.java 4KB
User.java 4KB
ClientServiceImpl.java 4KB
LogServiceImpl.java 4KB
ClientServiceImpl.java 4KB
LogServiceImpl.java 4KB
Swagger2Config.java 3KB
Swagger2Config.java 3KB
QiniuUtil.java 3KB
QiniuUtil.java 3KB
DictController.java 3KB
DictController.java 3KB
MySecurityMetadataSource.java 3KB
EsLogServiceImpl.java 3KB
MySecurityMetadataSource.java 3KB
Permission.java 3KB
Permission.java 3KB
EsLogServiceImpl.java 3KB
共 388 条
- 1
- 2
- 3
- 4
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6650
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现多车辆车辆路径问题,用遗传算法编程,保证可用.rar
- 基于matlab实现多层极限学习机实现手写体识别,准确率超过99%.rar
- 基于matlab实现电力系统最优潮流程序,可以应用于电力市场下的最优潮流计算 适合电力系统专业的同仁使用.rar
- 串行通信的通信协议串口协议串行通信的通信协议串口协议
- Vue构建交互式的单页面应用程序Vue构建交互式的单页面应用程序
- Spring Boot快速搭建和部署应用程序
- Redis开源的高性键值存储系统广泛应用于缓存、实时消息传递
- Qt跨平台的应用程序开发框架Qt跨平台的应用程序开发框架
- 单片机是集成处理器、存储器和输入输出设备
- 深度学习机器习方法模仿人脑神经网络深度学习机器习方法模仿人脑神经网络
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功