package com.xiaolong.toothmanager.utils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.time.LocalTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @Description: Redis 工具类
* @Author xiaolong
* @Date 2022/1/13 10:48 下午
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class RedisUtil {
private final RedisTemplate redisTemplate;
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @return
*/
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;
}
}
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @param timeUnit 单位
*/
public boolean expire(String key, long time, TimeUnit timeUnit) {
try {
if (time > 0) {
redisTemplate.expire(key, time, timeUnit);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
return true;
}
/**
* 根据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 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
//============================String=============================
/**
* 查找匹配key
*
* @param pattern key
* @return /
*/
public List<String> scan(String pattern) {
ScanOptions options = ScanOptions.scanOptions().match(pattern).build();
RedisConnectionFactory factory = redisTemplate.getConnectionFactory();
RedisConnection rc = Objects.requireNonNull(factory).getConnection();
Cursor<byte[]> cursor = rc.scan(options);
List<String> result = new ArrayList<>();
while (cursor.hasNext()) {
result.add(new String(cursor.next()));
}
try {
RedisConnectionUtils.releaseConnection(rc, factory);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return result;
}
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间
* @param timeUnit 类型
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time, TimeUnit timeUnit) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, timeUnit);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
/**
* 递增
*
* @param key 键
* @param delta 要增加几(大于0)
* @return
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 递减
*
* @param key 键
* @param delta 要减少几(小于0)
* @return
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
//================================Map=================================
/**
* HashGet
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
/**
* 获取hashKey对应的所有键值
*
* @param key 键
* @return 对应的多个键值
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet 并设置时间
*
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不�
没有合适的资源?快使用搜索试试~ 我知道了~
基于java开发的牙齿管理系统后台源码
共123个文件
java:110个
xml:7个
yml:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 5 下载量 39 浏览量
2021-10-15
00:59:22
上传
评论
收藏 4.03MB ZIP 举报
温馨提示
基于java开发的牙齿管理系统后台源码
资源推荐
资源详情
资源评论
收起资源包目录
基于java开发的牙齿管理系统后台源码 (123个子文件)
mvnw.cmd 7KB
ip2region.db 8.33MB
RedisUtil.java 18KB
FileUtil.java 11KB
SecurityConfig.java 9KB
LoginController.java 8KB
StringUtils.java 8KB
MenuServiceImpl.java 8KB
RsaUtils.java 8KB
RoleServiceImpl.java 6KB
OnlineUserService.java 6KB
RoleController.java 5KB
LoginService.java 5KB
SpringContextHolder.java 4KB
UserServiceImpl.java 4KB
TokenProvider.java 4KB
MenuController.java 4KB
DeptServiceImpl.java 4KB
LoginProperties.java 4KB
UserCacheManager.java 3KB
TokenFilter.java 3KB
BadConfigurationException.java 3KB
Role.java 3KB
RoleService.java 3KB
EncryptUtils.java 3KB
SecurityUtils.java 3KB
Menu.java 3KB
DataServiceImpl.java 2KB
CaptureFilter.java 2KB
User.java 2KB
UserController.java 2KB
JwtAuthorizationFilter.java 2KB
GlobalExceptionHandler.java 2KB
JwtUtils.java 2KB
RegisterServiceImpl.java 2KB
LoginSuccessHandler.java 2KB
Swagger2Config.java 2KB
AnonymousDeleteMapping.java 2KB
AnonymousGetMapping.java 2KB
ToothManagerApplication.java 2KB
MybatisPlusConfig.java 2KB
Dept.java 2KB
CorsConfig.java 2KB
JwtUserDto.java 1KB
AnonymousPostMapping.java 1KB
TokenConfigurer.java 1KB
PageUtil.java 1KB
LoginCacheTest.java 1KB
LoginFailureHandler.java 1KB
DeptController.java 1KB
RedisConfig.java 1KB
MenuDto.java 1KB
MenuService.java 1KB
RoleSmallMapper.java 1KB
UserDto.java 1KB
AuthRegisterDto.java 1KB
SecurityProperties.java 1KB
KaptchaConfig.java 1KB
HttpServletRequestUtils.java 1KB
Result.java 1KB
JwtAuthenticationEntryPoint.java 1KB
BaseDTO.java 1KB
RequestMethodEnum.java 1018B
JwtAccessDeniedHandler.java 1015B
TestPassEncoder.java 1001B
RoleDto.java 982B
UserCacheClean.java 970B
DeptDto.java 922B
DataPermission.java 921B
DeptService.java 903B
UserMapper.java 899B
ElPermissionConfig.java 891B
ConfigBeanConfiguration.java 872B
RoleMapper.java 869B
DataScopeEnum.java 850B
OnlineUserDto.java 849B
Const.java 846B
Job.java 844B
UserService.java 823B
LoginCode.java 765B
MenuMapper.java 750B
HospitalServiceImpl.java 740B
CloseUtil.java 660B
RsaProperties.java 649B
ToothManagerApplicationTests.java 646B
UserHospitalDetailDto.java 630B
BadRequestException.java 622B
UserHospitalMapper.java 572B
MenuVo.java 560B
CallBack.java 517B
DeptMapper.java 516B
MenuQueryCriteria.java 511B
QueryHelp.java 510B
DeptQueryCriteria.java 485B
ToothManagerProperties.java 467B
BaseController.java 417B
MenuMetaVo.java 413B
HospitalService.java 397B
AuthUserDto.java 394B
IndexResultEnum.java 374B
共 123 条
- 1
- 2
资源评论
- m0_749923222022-11-14资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。
- lwzlwg2022-09-07超级好的资源,很值得参考学习,对我启发很大,支持!
- howtodo20002022-05-19用户下载后在一定时间内未进行评价,系统默认好评。
- 2301_762563532023-01-21非常有用的资源,可以直接使用,对我很有用,果断支持!
mYlEaVeiSmVp
- 粉丝: 1886
- 资源: 19万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功