package com.yu.common.service;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service
@SuppressWarnings({"unchecked", "all"})
public class RedisService {
@Resource
private RedisTemplate redisTemplate;
public RedisTemplate getRedisTemplate(){
return 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);
}
// 获取keys
public Set<String> getKeys(String keyPattern) {
return redisTemplate.keys(keyPattern);
}
/**
* 判断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("--------------------------------------------");
}
}
}
// 数值自增
public Long incr(String key) {
return redisTemplate.opsForValue().increment(key);
}
// 数值自减
public Long decr(String key) {
return redisTemplate.opsForValue().decrement(key);
}
// ============================String=============================
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
// 获取具体类型的数据
public <T> T get(String key, Class<T> clazz) {
Object data = redisTemplate.opsForValue().get(key);
if (clazz.isInstance(data)) {
return (T) data;
} else if (clazz == Long.class && data instanceof Integer) { // 如果值小 redis会吧数值转为Integer型存储
Integer obj = (Integer) data;
return (T) Long.valueOf(obj.longValue());
}
return null;
}
/**
* 批量获取
*
* @param keys
* @return
*/
public List<?> 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;
}
public <T> boolean set(String key, T value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
*/
public <T> boolean set(String key, T 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;
}
}
// ================================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 <T> Map<String, T> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public <T> boolean hmset(String key, Map<String, T> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
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) {
log.error(e.getMessage(), e);
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) {
log.error(e.getMessage(), e);
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @param time 时间(秒) 注意:如果已存在的hash表有时间,
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
简介 这个系统分为两个主要部分:前端的UniApp点餐小程序和后端的SpringBoot服务。UniApp负责用户界面和交互,而SpringBoot处理业务逻辑和数据管理。 功能 用户认证:允许用户通过微信登录,并保持会话状态。 菜单浏览:展示餐厅的菜单,包括菜品图片、名称、描述和价格。 在线下单:用户可以选择菜品加入购物车,并进行下单操作。 订单管理:用户可以查看历史订单和当前订单的状态。 支付集成:集成微信支付API,支持在线支付功能。 餐厅信息:提供餐厅的详细信息,如地址、联系方式等。
资源推荐
资源详情
资源评论
收起资源包目录
UniApp点餐小程序和后端的SpringBoot源码 (618个子文件)
.babelrc 420B
RedisService.class 18KB
OrderController.class 11KB
OrderInfo.class 10KB
OrderServiceImpl.class 10KB
GoodsServiceImpl.class 9KB
HttpUtil.class 7KB
AppConfig.class 7KB
OrderInfoAdminController.class 6KB
SysUserService.class 6KB
UserController.class 6KB
OrderInfoAdminService.class 6KB
RoleController.class 6KB
GoodsPropertyAdminController.class 6KB
GoodsAdminService.class 6KB
ServiceException.class 5KB
CreateOrderForm.class 5KB
SysUserController.class 5KB
AuthController.class 5KB
GoodsAdminController.class 5KB
Goods.class 5KB
MiaoshaGoods.class 5KB
User.class 5KB
TimingTaskRunner.class 5KB
RoleService.class 5KB
RedisConfig.class 5KB
NaichaAppRun.class 5KB
GoodsProperty.class 5KB
Result.class 4KB
SessionUtil.class 4KB
SysUser.class 4KB
JWTUtil.class 4KB
HistoryOrderVO.class 4KB
VerifyCodeController.class 4KB
GoodsCategoryAdminController.class 4KB
SysUserVO.class 4KB
UserAdminController.class 4KB
GoodsMenuVO.class 4KB
UserServiceImpl.class 4KB
GoodsVO.class 3KB
AppApiInterceptor.class 3KB
SysUserLoginForm.class 3KB
UpdateUserForm.class 3KB
SystemApiInterceptor.class 3KB
LockService.class 3KB
SessionUtil.class 3KB
WebMVCConfig.class 3KB
WebMVCConfig.class 3KB
GlobalExceptionHandler.class 3KB
GoodsCategoryAdminService.class 3KB
SameCategoryPropertyVO.class 3KB
GoodsCategory.class 3KB
AppConfigController.class 3KB
SysUserDTO.class 3KB
Role.class 3KB
UserAdminService.class 3KB
UpdateRolePermissionForm.class 2KB
RolePermission.class 2KB
UserAgentUtils.class 2KB
GeneratorUtil.class 2KB
UserRole.class 2KB
Swagger2Config.class 2KB
GoodsDTO.class 2KB
WeixinUtil.class 2KB
TimingTaskController.class 2KB
UpdatePasswordForm.class 2KB
OrderStatus.class 2KB
OrderMessageController.class 2KB
RecentOrderMessage.class 2KB
LoginByWeixinForm.class 2KB
MyFilter.class 2KB
OrderMessageService.class 2KB
Const.class 2KB
IOProperty.class 2KB
PayjsUtil.class 2KB
GoodsPropertyCategory.class 2KB
VerifyCodeController$1.class 2KB
OrderMapper.class 2KB
MD5Util.class 2KB
OrderTakeType.class 1KB
NaichaSystemRun.class 1KB
GoodsController.class 1KB
HttpUtil$TrustAnyTrustManager.class 1KB
OrderInfoAdminMapper.class 1KB
AppConfigController.class 1KB
Const$PayJS.class 1KB
AccessLimiter$Type.class 1KB
SpringContextUtil.class 1KB
IpUtil.class 1KB
GoodsAdminMapper.class 1KB
AppConfigService.class 1KB
RolePermissionMapper.class 981B
HttpUtil$TrustAnyHostnameVerifier.class 975B
GoodsServiceImpl$1.class 937B
GoodsCategoryAdminMapper.class 886B
ServletUtils.class 800B
AccessLimiter.class 784B
GoodsPropertyAdminMapper.class 781B
SysUserMapper.class 764B
MybatisPlusConfig.class 739B
共 618 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
学长代码
- 粉丝: 4758
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功