package com.yjx.util;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisClusterNode;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisServerCommands;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* Redis Repository
* redis 基本操作 可扩展,基本够用了
*
* @author yang123
* @date 2021/11/2 18:24
**/
@Slf4j
@Component
public class RedisRepository {
/**
* 默认编码
*/
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
/**
* key序列化
*/
private static final StringRedisSerializer STRING_SERIALIZER = new StringRedisSerializer();
/**
* value 序列化
*/
private static final JdkSerializationRedisSerializer OBJECT_SERIALIZER = new JdkSerializationRedisSerializer();
/**
* Spring Redis Template
*/
@Autowired
private final RedisTemplate<String, Object> redisTemplate;
public RedisRepository(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
this.redisTemplate.setKeySerializer(STRING_SERIALIZER);
this.redisTemplate.setValueSerializer(OBJECT_SERIALIZER);
}
/**
* 获取链接工厂
*/
public RedisConnectionFactory getConnectionFactory() {
return this.redisTemplate.getConnectionFactory();
}
/**
* 获取 RedisTemplate对象
*/
public RedisTemplate<String, Object> getRedisTemplate() {
return redisTemplate;
}
/**
* 清空DB
*
* @param node redis 节点
*/
public void flushDB(RedisClusterNode node) {
this.redisTemplate.opsForCluster().flushDb(node);
}
/**
* 添加到带有 过期时间的 缓存
*
* @param key redis主键
* @param value 值
* @param time 过期时间(单位秒)
*/
public void setExpire(final byte[] key, final byte[] value, final long time) {
redisTemplate.execute((RedisCallback<Long>) connection -> {
connection.setEx(key, time, value);
log.debug("[redisTemplate redis]放入 缓存 url:{} ========缓存时间为{}秒", key, time);
return 1L;
});
}
/**
* 添加到带有 过期时间的 缓存
*
* @param key redis主键
* @param value 值
* @param time 过期时间(单位秒)
*/
public void setExpire(final String key, final Object value, final long time) {
redisTemplate.execute((RedisCallback<Long>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
byte[] keys = serializer.serialize(key);
byte[] values = OBJECT_SERIALIZER.serialize(value);
connection.setEx(keys, time, values);
return 1L;
});
}
/**
* 一次性添加数组到 过期时间的 缓存,不用多次连接,节省开销
*
* @param keys redis主键数组
* @param values 值数组
* @param time 过期时间(单位秒)
*/
public void setExpire(final String[] keys, final Object[] values, final long time) {
redisTemplate.execute((RedisCallback<Long>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
for (int i = 0; i < keys.length; i++) {
byte[] bKeys = serializer.serialize(keys[i]);
byte[] bValues = OBJECT_SERIALIZER.serialize(values[i]);
connection.setEx(bKeys, time, bValues);
}
return 1L;
});
}
/**
* 一次性添加数组到 过期时间的 缓存,不用多次连接,节省开销
*
* @param keys the keys
* @param values the values
*/
public void set(final String[] keys, final Object[] values) {
redisTemplate.execute((RedisCallback<Long>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
for (int i = 0; i < keys.length; i++) {
byte[] bKeys = serializer.serialize(keys[i]);
byte[] bValues = OBJECT_SERIALIZER.serialize(values[i]);
connection.set(bKeys, bValues);
}
return 1L;
});
}
/**
* 添加到缓存
*
* @param key the key
* @param value the value
*/
public void set(final String key, final Object value) {
redisTemplate.execute((RedisCallback<Long>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
byte[] keys = serializer.serialize(key);
byte[] values = OBJECT_SERIALIZER.serialize(value);
connection.set(keys, values);
log.debug("[redisTemplate redis]放入 缓存 url:{}", key);
return 1L;
});
}
/**
* 查询在这个时间段内即将过期的key
*
* @param key the key
* @param time the time
* @return the list
*/
public List<String> willExpire(final String key, final long time) {
final List<String> keysList = new ArrayList<>();
redisTemplate.execute((RedisCallback<List<String>>) connection -> {
Set<String> keys = redisTemplate.keys(key + "*");
for (String key1 : keys) {
Long ttl = connection.ttl(key1.getBytes(DEFAULT_CHARSET));
if (0 <= ttl && ttl <= 2 * time) {
keysList.add(key1);
}
}
return keysList;
});
return keysList;
}
/**
* 查询在以keyPatten的所有 key
*
* @param keyPatten the key patten
* @return the set
*/
public Set<String> keys(final String keyPatten) {
return redisTemplate.execute((RedisCallback<Set<String>>) connection -> redisTemplate.keys(keyPatten + "*"));
}
/**
* 根据key获取对象
*
* @param key the key
* @return the byte [ ]
*/
public byte[] get(final byte[] key) {
byte[] result = redisTemplate.execute((RedisCallback<byte[]>) connection -> connection.get(key));
log.debug("[redisTemplate redis]取出 缓存 url:{} ", key);
return result;
}
/**
* 根据key获取对象
*
* @param key the key
* @return the string
*/
public Object get(final String key) {
Object resultStr = redisTemplate.execute((RedisCallback<Object>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
byte[] keys = serializer.serialize(key);
byte[] values = connection.get(keys);
return OBJECT_SERIALIZER.deserialize(values);
});
log.debug("[redisTemplate redis]取出 缓存 url:{} ", key);
return resultStr;
}
/**
* 根据key获取对象
*
* @param keyPatten the key patten
* @return the keys values
*/
public Map<String, Object> getKeysValues(final String keyPatten) {
log.debug("[redisTemplate redis] getValues() patten={} ", keyPatten);
return redisTemplate.execute((RedisCallback<Map<String, Object>>) connection -> {
RedisSerializer<String> serializer = getRedisSerializer();
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计基于Javaweb的药店管理系统(源码+数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 毕业设计基于Javaweb的药店管理系统(源码+数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 毕业设计基于Javaweb的药店管理系统(源码+数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 毕业设计基于Javaweb的药店管理系统(源码+数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 毕业设计基于Javaweb的药店管理系统(源码+数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计基于Javaweb的药店管理系统(源码+数据库).zip (943个子文件)
RedisRepository.class 19KB
MedicineSynopsis.class 16KB
OrdersController.class 13KB
MedicineController.class 13KB
Medicine.class 12KB
AccountController.class 11KB
Orders.class 11KB
UserInfoController.class 11KB
AdminInfoDto.class 10KB
Admin.class 10KB
MedicineSortController.class 10KB
OrdersDto.class 10KB
HealthTipsController.class 9KB
AdminController.class 9KB
FavoritesController.class 9KB
ShoppingAddressController.class 8KB
HealthTips.class 8KB
NormalUserInfoDto.class 8KB
UserInfoDto.class 8KB
CarouselController.class 7KB
UserInfo.class 7KB
ShoppingAddress.class 7KB
OrdersItems.class 7KB
ShoppingCartController.class 7KB
CodeGenerator.class 7KB
Favorites.class 6KB
Comments.class 6KB
User.class 6KB
MenuSecond.class 6KB
MenuFirst.class 6KB
MedicineSortSecond.class 6KB
ShoppingCartDto.class 5KB
MedicineSortSecondController.class 5KB
ShoppingCart.class 5KB
MedicineSort.class 5KB
Carousel.class 5KB
AlipayController.class 5KB
MyPictureUploadUtils.class 5KB
JwtFilter.class 5KB
AuthDiscount.class 5KB
Result.class 5KB
CommentsDto.class 5KB
JwtUtils.class 4KB
ShoppingAddressDto.class 4KB
LogOperation.class 4KB
SortRecommend.class 4KB
UserServiceImpl.class 4KB
YjxTest.class 4KB
LoginDto.class 4KB
ShiroConfig.class 4KB
CommentsServiceImpl.class 3KB
RedisTemplateConfig.class 3KB
RegisterDto.class 3KB
OrdersItemsController.class 3KB
GlobalExceptionHandle.class 3KB
OrdersServiceImpl.class 3KB
AccountRealm.class 3KB
VerificationUtils.class 3KB
SendMailService.class 3KB
AccountProfile.class 3KB
UserInfoServiceImpl.class 3KB
FrontCategoryDto.class 3KB
MenuListDto.class 3KB
CategoryDto.class 3KB
CommentsController.class 3KB
CorsConfig.class 3KB
LogOperationController.class 3KB
ResultInfo.class 2KB
Auth.class 2KB
MenuController.class 2KB
MedicineServiceImpl.class 2KB
PharmacyApplicationTests.class 2KB
MedicineSortServiceImpl.class 2KB
UserController.class 2KB
BuyDrugDto.class 2KB
AdminServiceImpl.class 2KB
FavoritesServiceImpl.class 2KB
CategorySecondDto.class 2KB
MedicineSortSecondServiceImpl.class 2KB
ShoppingAddressServiceImpl.class 2KB
SendMailController.class 2KB
WebConfig.class 2KB
MedicineSynopsisController.class 2KB
MyMetaObjectHandler.class 1KB
RecursionStr.class 1KB
SortRecommendController.class 1KB
MybatisPlusConfig.class 1KB
ShoppingCartServiceImpl.class 1KB
MenuSecondServiceImpl.class 1KB
MyRuntimeException.class 1KB
MenuFirstServiceImpl.class 1KB
UserInfoMapper.class 1KB
MedicineSortMapper.class 981B
UserInfoService.class 980B
MedicineMapper.class 959B
MedicineSortService.class 882B
FavoritesMapper.class 866B
MedicineService.class 860B
AdminMapper.class 844B
CommentsMapper.class 790B
共 943 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
盈梓的博客
- 粉丝: 9155
- 资源: 2200
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功