/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
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.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author /
*/
@Component
@SuppressWarnings({"unchecked", "all"})
public class RedisUtils {
private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
private RedisTemplate<Object, Object> redisTemplate;
@Value("${jwt.online-key}")
private String onlineKey;
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
return true;
}
/**
* 指定缓存失效时间
*
* @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(Object key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 查找匹配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;
}
/**
* 分页查询 key
*
* @param patternKey key
* @param page 页码
* @param size 每页数目
* @return /
*/
public List<String> findKeysForPage(String patternKey, int page, int size) {
ScanOptions options = ScanOptions.scanOptions().match(patternKey).build();
RedisConnectionFactory factory = redisTemplate.getConnectionFactory();
RedisConnection rc = Objects.requireNonNull(factory).getConnection();
Cursor<byte[]> cursor = rc.scan(options);
List<String> result = new ArrayList<>(size);
int tmpIndex = 0;
int fromIndex = page * size;
int toIndex = page * size + size;
while (cursor.hasNext()) {
if (tmpIndex >= fromIndex && tmpIndex < toIndex) {
result.add(new String(cursor.next()));
tmpIndex++;
continue;
}
// 获取到满足条件的数据后,就可以退出了
if (tmpIndex >= toIndex) {
break;
}
tmpIndex++;
cursor.next();
}
try {
RedisConnectionUtils.releaseConnection(rc, factory);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return result;
}
/**
* 判断key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
public void del(String... keys) {
if (keys != null && keys.length > 0) {
if (keys.length == 1) {
boolean result = redisTemplate.delete(keys[0]);
log.debug("--------------------------------------------");
log.debug(new StringBuilder("删除缓存:").append(keys[0]).append(",结果:").append(result).toString());
log.debug("--------------------------------------------");
} else {
Set<Object> keySet = new HashSet<>();
for (String key : keys) {
keySet.addAll(redisTemplate.keys(key));
}
long count = redisTemplate.delete(keySet);
log.debug("--------------------------------------------");
log.debug("成功删除缓存:" + keySet.toString());
log.debug("缓存删除数量:" + count + "个");
log.debug("--------------------------------------------");
}
}
}
// ============================String=============================
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 批量获取
*
* @param keys
* @return
*/
public List<Object> multiGet(List<String> keys) {
List list = redisTemplate.opsForValue().multiGet(Sets.newHashSet(keys));
List resultList = Lists.newArrayList();
Optional.ofNullable(list).ifPresent(e-> list.forEach(ele-> Optional.ofNullable(ele).ifPresent(resultList::add)));
return resultList;
}
/**
* 普通缓存放入
*
* @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) {
log.error(e.getMessage(), e);
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) {
log.error(e.getMessage(), e);
return false;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该项目为基于Java语言的健身器材预约管理系统设计源码,总文件数为334个,包括299个Java源文件、12个FTL模板文件、8个XML配置文件、4个YAML文件、2个Markdown文件、2个属性文件、2个SQL脚本文件、1个Git忽略文件以及1个LICENSE文件。系统专注于健身器材的预约管理,为用户提供便捷的预约服务。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java语言的健身器材预约管理系统设计源码 (334个子文件)
ip2region.db 6.2MB
index.ftl 7KB
ServiceImpl.ftl 6KB
Controller.ftl 3KB
taskAlarm.ftl 3KB
Entity.ftl 2KB
Service.ftl 2KB
QueryCriteria.ftl 2KB
email.ftl 2KB
Dto.ftl 1KB
Repository.ftl 1KB
Mapper.ftl 1KB
api.ftl 437B
.gitignore 56B
RedisUtils.java 19KB
GenUtil.java 17KB
DeployServiceImpl.java 15KB
MenuServiceImpl.java 14KB
FileUtil.java 11KB
DeptServiceImpl.java 10KB
QiNiuServiceImpl.java 10KB
UserServiceImpl.java 10KB
QueryHelp.java 9KB
SecurityConfig.java 9KB
UserController.java 9KB
RoleServiceImpl.java 8KB
GeneratorServiceImpl.java 8KB
StringUtils.java 8KB
RedisConfig.java 8KB
QuartzJobServiceImpl.java 8KB
MonitorServiceImpl.java 7KB
FitnessAppointmentTestServiceImpl.java 7KB
AppointmentTestServiceImpl.java 7KB
RsaUtils.java 7KB
SqlUtils.java 7KB
OnlineUserService.java 6KB
AuthorizationController.java 6KB
QuartzManage.java 6KB
ExecutionJob.java 6KB
AliPayController.java 6KB
LogServiceImpl.java 6KB
DeployController.java 6KB
RoleController.java 6KB
LocalStorageServiceImpl.java 5KB
TokenProvider.java 5KB
MenuController.java 5KB
AliPayServiceImpl.java 5KB
FitnessEquipmentTestServiceImpl.java 5KB
QuartzJobController.java 5KB
JobServiceImpl.java 5KB
SpringContextHolder.java 5KB
AppServiceImpl.java 5KB
ServerDeployServiceImpl.java 5KB
DatabaseController.java 5KB
DeptController.java 5KB
DictServiceImpl.java 5KB
DateUtil.java 4KB
QiniuController.java 4KB
GeneratorController.java 4KB
DatabaseServiceImpl.java 4KB
TokenFilter.java 4KB
ZipUtils.java 4KB
DataTypeEnum.java 4KB
SwaggerConfig.java 4KB
GlobalExceptionHandler.java 4KB
LogController.java 4KB
DictDetailController.java 4KB
BadConfigurationException.java 4KB
DeployHistoryServiceImpl.java 4KB
UserRepository.java 4KB
DictDetailServiceImpl.java 4KB
LocalStorageController.java 4KB
LimitAspect.java 4KB
EmailServiceImpl.java 4KB
ServerDeployController.java 4KB
DictController.java 4KB
User.java 4KB
LoginProperties.java 4KB
AddUserUtil.java 4KB
WebSocketServer.java 4KB
FitnessAppointmentTestController.java 4KB
SecurityUtils.java 3KB
FitnessEquipmentTestController.java 3KB
JobController.java 3KB
AppointmentTestController.java 3KB
EncryptUtils.java 3KB
UserDetailsServiceImpl.java 3KB
LogAspect.java 3KB
DataServiceImpl.java 3KB
RoleService.java 3KB
ScpClientUtil.java 3KB
VerifyServiceImpl.java 3KB
Role.java 3KB
AppController.java 3KB
Menu.java 3KB
QuartzJobService.java 3KB
VerifyController.java 3KB
MenuService.java 3KB
DeptService.java 3KB
ColumnInfo.java 3KB
共 334 条
- 1
- 2
- 3
- 4
资源评论
csbysj2020
- 粉丝: 2118
- 资源: 4726
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功