package com.zyt.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @ProjectName: ssm
* @Package: com.zyt.utils
* @ClassName: RedisUtil
* @Author: zhou_yangtao@yeah.net
* @Description:
* @Date: 21:08 2020/6/16
* @Version: 1.0
*/
@Component//在实现类中用到了@Autowired注解,被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,加上@Component
public class RedisUtil {
private static final Logger logger = LoggerFactory.getLogger(RedisUtil.class);
@Autowired
private RedisTemplate redisTemplate;
private static String CACHE_PREFIX;
private static boolean CACHE_CLOSED;
private RedisUtil() {
}
@SuppressWarnings("rawtypes")
private static boolean isEmpty(Object obj) {
if (obj == null) {
return true;
}
if (obj instanceof String) {
String str = obj.toString();
if ("".equals(str.trim())) {
return true;
}
return false;
}
if (obj instanceof List) {
List<Object> list = (List<Object>) obj;
if (list.isEmpty()) {
return true;
}
return false;
}
if (obj instanceof Map) {
Map map = (Map) obj;
if (map.isEmpty()) {
return true;
}
return false;
}
if (obj instanceof Set) {
Set set = (Set) obj;
if (set.isEmpty()) {
return true;
}
return false;
}
if (obj instanceof Object[]) {
Object[] objs = (Object[]) obj;
if (objs.length <= 0) {
return true;
}
return false;
}
return false;
}
/**
* 构建缓存key值
* @param key 缓存key
* @return
*/
private static String buildKey(String key) {
if (CACHE_PREFIX == null || "".equals(CACHE_PREFIX)) {
return key;
}
return CACHE_PREFIX + ":" + key;
}
/**
* 返回缓存的前缀
* @return CACHE_PREFIX_FLAG
*/
public static String getCachePrefix() {
return CACHE_PREFIX;
}
/**
* 设置缓存的前缀
* @param cachePrefix
*/
public static void setCachePrefix(String cachePrefix) {
if (cachePrefix != null && !"".equals(cachePrefix.trim())) {
CACHE_PREFIX = cachePrefix.trim();
}
}
/**
* 关闭缓存
* @return true:成功
* false:失败
*/
public static boolean close() {
logger.debug(" cache closed ! ");
CACHE_CLOSED = true;
return true;
}
/**
* 打开缓存
* @return true:存在
* false:不存在
*/
public static boolean openCache() {
CACHE_CLOSED = false;
return true;
}
/**
* 检查缓存是否开启
* @return true:已关闭
* false:已开启
*/
public static boolean isClose() {
return CACHE_CLOSED;
}
/**
* 判断key值是否存在
* @param key 缓存的key
* @return true:存在
* false:不存在
*/
public boolean hasKey(String key) {
try {
if (isClose() || isEmpty(key)) {
return false;
}
key = buildKey(key);
return redisTemplate.hasKey(key);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* 匹配符合正则的key
* @param patternKey
* @return key的集合
*/
public Set<String> keys(String patternKey) {
try {
if (isClose() || isEmpty(patternKey)) {
return Collections.emptySet();
}
return redisTemplate.keys(patternKey);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return Collections.emptySet();
}
/**
* 根据key删除缓存
* @param key
* @return true:成功
* false:失败
*/
public boolean del(String key){
try {
if(isClose() || isEmpty(key)){
return false;
}
redisTemplate.delete(key);
return true;
}catch (Exception e){
logger.error(e.getMessage(),e);
}
return false;
}
/**
* 根据key删除缓存 多个key
* @param key
* @return true:成功
* false:失败
*/
public boolean del(String... key) {
try {
if (isClose() || isEmpty(key)) {
return false;
}
Set<String> keySet = new HashSet<>();
for (String str : key) {
keySet.add(buildKey(str));
}
redisTemplate.delete(keySet);
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* 根据key删除缓存
* @param key
* @return true:成功
* false:失败
*/
public boolean delPattern(String key) {
logger.debug(" delete Pattern keys :{}", key);
try {
if (isClose() || isEmpty(key)) {
return false;
}
key = buildKey(key);
redisTemplate.delete(redisTemplate.keys(key));
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* 删除一组key值
* @param keys
* @return true:成功
* false:失败
*/
public boolean del(Set<String> keys) {
try {
if (isClose() || isEmpty(keys)) {
return false;
}
Set<String> keySet = new HashSet<>();
for (String str : keys) {
keySet.add(buildKey(str));
}
redisTemplate.delete(keySet);
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* 设置过期时间
* @param key 缓存key
* @param seconds 过期秒数
* @return true:成功
* false:失败
*/
public boolean setExp(String key, long seconds) {
try {
if (isClose() || isEmpty(key) || seconds > 0) {
return false;
}
key = buildKey(key);
return redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* 普通缓存放入
没有合适的资源?快使用搜索试试~ 我知道了~
基于协同过滤算法的网上饮品商城系统.zip
共314个文件
java:277个
xml:33个
yml:1个
需积分: 5 0 下载量 127 浏览量
2024-05-19
21:56:09
上传
评论
收藏 349KB ZIP 举报
温馨提示
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。
资源推荐
资源详情
资源评论
收起资源包目录
基于协同过滤算法的网上饮品商城系统.zip (314个子文件)
.gitignore 32B
RedisUtil.java 29KB
OrderManagerServiceImpl.java 20KB
StoreProductInfosServiceImpl.java 19KB
OrderInfoTo.java 15KB
Order.java 14KB
SecKillSessionManagerController.java 14KB
BatchSuperviseProductServiceImpl.java 13KB
CollaborativeFilteringRecommendAlgorith.java 13KB
AddMemberInfoFromSocialUserServiceImpl.java 13KB
CartManagerServiceImpl.java 11KB
StoreProductInfosController.java 11KB
SecKillSessionManagerServiceImpl.java 11KB
SystemUserLoginServiceImpl.java 11KB
SecKillProdRelationServiceImpl.java 10KB
CartManagerController.java 10KB
HttpUtils.java 10KB
ProductMapper.java 10KB
NewStoreSettledServiceImpl.java 10KB
BackSystemMenuManagerServiceImpl.java 10KB
SeckillProductScheduleServiceImpl.java 10KB
VipMember.java 8KB
VerifyCodeImageUtil.java 8KB
MasterDataSourceConfig.java 8KB
PayAsyncVo.java 8KB
OrderManagerController.java 8KB
NewStoreSettledConotrller.java 8KB
SendCodeManagerServiceImpl.java 7KB
AppTest.java 7KB
MallSearchServiceImpl.java 7KB
StockManagerServiceImpl.java 7KB
SecurityConfig.java 7KB
ProductDetailsInfoServiceImpl.java 7KB
StroreBrandPushServiceImpl.java 7KB
Couple.java 7KB
ProductSearchCenterController.java 7KB
ProductDetailsVo.java 7KB
SeckillProductServiceImpl.java 6KB
ExcelUploadUtils.java 6KB
StoreMapper.java 6KB
StoreCoupleManagerServiceImpl.java 6KB
AlipayConfig.java 6KB
StroreBrandPushController.java 6KB
EachProductOfTypesController.java 6KB
Product.java 6KB
ChangeJsonTools.java 6KB
VipMemberMapper.java 5KB
RSAUtil.java 5KB
WeiBoLoginManagerServiceImpl.java 5KB
PayOrderListnerController.java 5KB
UserLoginTokenFilter.java 5KB
ProductRecommendServiceImpl.java 5KB
StoreProductInfosService.java 5KB
VerificationCodeImgUtil.java 5KB
ViPMemberShipManagerServiceImpl.java 5KB
SecondKillProdDetailsRedisTo.java 5KB
RabbitMQConfig.java 5KB
BrandMapper.java 5KB
ViPMemberShipManagerController.java 5KB
OrderItems.java 4KB
UserLoginController.java 4KB
UserInfoManagerController.java 4KB
MemberLeaveMapper.java 4KB
SystemMenuVo.java 4KB
CartInterceptor.java 4KB
UserLoginAuthorFilter.java 4KB
AddressManagerController.java 4KB
SecKillSession.java 4KB
StoreHitsInfosServiceImpl.java 4KB
AddressManagerServiceImpl.java 4KB
AESUtils.java 4KB
UserAuthenticationProvider.java 4KB
StoreCoupleManagerController.java 4KB
ResultCode.java 4KB
SelfUserEntity.java 4KB
SecKillSessionMapper.java 4KB
BackSystemUserILoginServiceImpl.java 4KB
RedisConfig.java 4KB
AlipayConstant.java 4KB
CartInterceptorAop.java 4KB
CartItemMapper.java 4KB
SecKillProdRelationService.java 4KB
SecKillProdRelationMapper.java 3KB
CartItem.java 3KB
ProductDetailsInfoController.java 3KB
Store.java 3KB
OrderTask.java 3KB
CartManagerService.java 3KB
SeckillProductAndSessionInfoVo.java 3KB
OrderManagerService.java 3KB
PayOrderServiceImpl.java 3KB
OrderMapper.java 3KB
StockReleaseListnerServiceImpl.java 3KB
MemeberLeave.java 3KB
SystemMenu.java 3KB
PaymentInfo.java 3KB
UserInfoManagerServiceImpl.java 3KB
Author2LoginManagerController.java 3KB
SecKillSessionManagerService.java 3KB
SecKillProdRelation.java 3KB
共 314 条
- 1
- 2
- 3
- 4
资源评论
生瓜蛋子
- 粉丝: 3830
- 资源: 6140
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言编程经典案例900集
- 实现求后缀表达式和对后缀表达式求值.zip
- MyEMS 一款功能强大的开源能源管理系统致力于实现对电水气等能源数据的全面采集分析和报表展示
- 毕设项目:网上图书销售管理系统(ASP+ACCESS+源代码+论文)
- Max30102实战开源资料集:硬件设计、上下位机程序及结构设计一应俱全
- PHP5版本手册chm格式压缩包
- Java微信公众号开发所需JAR包概述: Wx-tools框架JAR包:提供基于微信公众平台API的轻量级开发框架 相关依赖库
- duilib集成的Webkit内核浏览器控件 基于BlaFans的wke内核 提供丰富的浏览功能和稳定性 支持最新的HTML
- linux平台上的一种压力测试工具http-load压缩包
- 系统栏着色管理器:Syst
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功