/*
* 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.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
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;
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setStringSerializer(new StringRedisSerializer());
}
/**
* 指定缓存失效时间
*
* @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) {
if (redisTemplate.hasKey(key))
keySet.add(key);
}
long count = redisTemplate.delete(keySet);
log.debug("--------------------------------------------");
log.debug("成功删除缓存:" + keySet.toString());
log.debug("缓存删除数量:" + count + "个");
log.debug("--------------------------------------------");
}
}
}
/**
* 批量模糊删除key
* @param pattern
*/
public void scanDel(String pattern){
ScanOptions options = ScanOptions.scanOptions().match(pattern).build();
try (Cursor<byte[]> cursor = redisTemplate.executeWithStickyConnection(
(RedisCallback<Cursor<byte[]>>) connection -> (Cursor<byte[]>) new ConvertingCursor<>(
connection.scan(options), redisTemplate.getKeySerializer()::deserialize))) {
while (cursor.hasNext()) {
redisTemplate.delete(cursor.next());
}
}
}
// ============================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) {
没有合适的资源?快使用搜索试试~ 我知道了~
基于Spring Boot 2.6.4与Vue的前后端分离eladmin mybatis-plus后台管理系统设计源码
共574个文件
java:238个
vue:106个
svg:80个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 145 浏览量
2024-09-28
03:05:09
上传
评论
收藏 2.15MB ZIP 举报
温馨提示
本项目为基于Spring Boot 2.6.4框架与Vue.js的前后端分离架构的eladmin mybatis-plus后台管理系统设计源码。该系统整合了Mybatis-Plus、Spring Security和Redis等先进技术,共包含574个文件,其中Java源文件238个,Vue组件106个,SVG图形80个,JavaScript脚本67个,XML配置31个,FTL模板11个,SCSS样式9个,YAML配置5个,PNG图片4个,Markdown文件3个。项目支持通过GitHub提交Issues或加入群组进行反馈和交流。
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring Boot 2.6.4与Vue的前后端分离eladmin mybatis-plus后台管理系统设计源码 (574个子文件)
.env.development 213B
.editorconfig 244B
.eslintignore 34B
index.ftl 7KB
ServiceImpl.ftl 4KB
Controller.ftl 3KB
taskAlarm.ftl 3KB
Mapper-xml.ftl 3KB
Service.ftl 2KB
Entity.ftl 2KB
email.ftl 2KB
Mapper.ftl 1KB
QueryCriteria.ftl 1KB
api.ftl 437B
401.gif 160KB
.gitignore 262B
.gitignore 76B
index.html 488B
favicon.ico 66KB
RedisUtils.java 20KB
GenUtil.java 17KB
DeployServiceImpl.java 15KB
MenuServiceImpl.java 14KB
FileUtil.java 13KB
UserServiceImpl.java 11KB
DeptServiceImpl.java 10KB
SpringSecurityConfig.java 9KB
UserController.java 9KB
QiniuContentServiceImpl.java 9KB
RoleServiceImpl.java 8KB
RedisConfig.java 8KB
MonitorServiceImpl.java 8KB
StringUtils.java 8KB
RsaUtils.java 8KB
QuartzJobServiceImpl.java 7KB
AuthorizationController.java 7KB
SysLogServiceImpl.java 6KB
GeneratorServiceImpl.java 6KB
MenuController.java 6KB
QuartzManage.java 6KB
AliPayController.java 6KB
ExecutionJob.java 6KB
DeployController.java 6KB
QuartzJobController.java 6KB
SqlUtils.java 6KB
RoleController.java 6KB
SpringContextHolder.java 5KB
AliPayServiceImpl.java 5KB
DeptController.java 5KB
OnlineUserService.java 5KB
QiniuController.java 5KB
DateUtil.java 5KB
DatabaseController.java 5KB
TokenProvider.java 5KB
LocalStorageServiceImpl.java 5KB
DictServiceImpl.java 4KB
AppServiceImpl.java 4KB
TokenFilter.java 4KB
DataTypeEnum.java 4KB
SysLogController.java 4KB
GlobalExceptionHandler.java 4KB
GeneratorController.java 4KB
LoginProperties.java 4KB
JobServiceImpl.java 4KB
EmailServiceImpl.java 4KB
SwaggerConfig.java 4KB
BadConfigurationException.java 4KB
LocalStorageController.java 4KB
ServerServiceImpl.java 4KB
ConfigurerAdapter.java 4KB
LimitAspect.java 4KB
DictController.java 4KB
DictDetailController.java 4KB
ServerController.java 4KB
WebSocketServer.java 3KB
DatabaseServiceImpl.java 3KB
JobController.java 3KB
SecurityUtils.java 3KB
EncryptUtils.java 3KB
User.java 3KB
LogAspect.java 3KB
Menu.java 3KB
UserService.java 3KB
DeployHistoryServiceImpl.java 3KB
DictDetailServiceImpl.java 3KB
ScpClientUtil.java 3KB
AppController.java 3KB
VerifyServiceImpl.java 3KB
DataServiceImpl.java 3KB
QuartzJobService.java 3KB
RoleService.java 3KB
VerifyController.java 3KB
DeptService.java 3KB
MenuService.java 3KB
UserDetailsServiceImpl.java 3KB
AlipayUtils.java 3KB
Dept.java 3KB
DeployHistoryController.java 3KB
DeployService.java 3KB
Role.java 3KB
共 574 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
xyq2024
- 粉丝: 2903
- 资源: 5549
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- aaaaaaaaa.zip
- andriod平台下, 发包工具,
- 高分Python毕业设计基于Opencv的车牌识别系统源码+数据集,使用thinkter实现图形界面
- 基于jQuery的图片浏览插件(1)
- 矩阵分解算法之Python交替最小二乘法优化基向量与权重组
- PhPenc授权加密系统+追踪盗版+在线更新+sg15+代码加密(非流通版)
- andriod平台 , ip发包工具, packet sender, 1.0
- html+css+js网页设计 美食 美食网3个页面
- ZuMaFight经典祖玛游戏
- IMMD架构混联混动仿真模型,P1+P3架构,混联混动汽车动力性经济性仿真 immd-cruise仿真模型+simulink策略源文件64 具体内容包括: cruise 模型, simulink策略
- andriod平台 , ip发包工具, udp 2.0.1 apk pure
- Visual Studio Code软件包(未汉化).rar
- 计算机网络学习资料.docx
- 2024-2025-1 20242816 《Linux内核原理与分析》第三周作业
- 运动员伤病和表现数据集(200记录,17特征)CSV
- (1980-2024)丰田汽车股票数据集(11K+记录,7特征)CSV
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功