40分布式电商项目 - 网站首页(缓存广告数据)
2023-09-11 14:15:41 时间
代码已上传至Github
地址:https://github.com/ylw-github/pingyougou.git
版本:8e95815be1cdc8c8edb05eed86c32fe650ea0efc
现在我们首页的广告每次都是从数据库读取,这样当网站访问量达到高峰时段,对数据库压力很大,并且影响执行效率。我们需要将这部分广告数据缓存起来。
例如轮播图,每一次都要去访问数据库,会造成数据库的压力增大,所以可以使用Redis缓存,例如下面的片段代码:
public List<TbContent> findContentListByCategoryId(Long categoryId) {
try {
//先查询缓存
List<TbContent> adList = (List<TbContent>) redisTemplate.boundHashOps("index_cache").get(categoryId+"");
//判断缓存数据是否存在
if(adList!=null && adList.size()>0){
return adList;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建广告内容表example对象
TbContentExample example = new TbContentExample();
// 创建criteria对象
Criteria createCriteria = example.createCriteria();
// 设置查询参数
// 外键
createCriteria.andCategoryIdEqualTo(categoryId);
// 查询有效广告
createCriteria.andStatusEqualTo("1");
// 设置排序字段
example.setOrderByClause("sort_order");
//执行查询
List<TbContent> list = contentMapper.selectByExample(example);
//添加缓存数据
redisTemplate.boundHashOps("index_cache").put(categoryId+"",list);
return list;
}
更新缓存:
当广告数据发生变更时,需要将缓存数据清除,这样再次查询才能获取最新的数据
新增广告后清除缓存:
修改 pinyougou-content-service 工程ContentServiceImpl.java 的 add 方法
/**
* 增加
*/
@Override
public void add(TbContent content) {
//清空缓存
redisTemplate.boundHashOps("index_cache").delete(content.getCategoryId()+"");
contentMapper.insert(content);
}
修改广告后清除缓存:
考虑到用户可能会修改广告的分类,这样需要把原分类的缓存和新分类的缓存都清除掉。
/**
* 修改
* 1,分类id也发生了变化
* 2,id没法发生变化
*/
@Override
public void update(TbContent content) {
//根据当前id查询广告对象
TbContent tbContent = contentMapper.selectByPrimaryKey(content.getId());
//清空缓存
redisTemplate.boundHashOps("index_cache").delete(tbContent.getCategoryId()+"");
contentMapper.updateByPrimaryKey(content);
}
删除广告后清除缓存:
/**
* 批量删除
*/
@Override
public void delete(Long[] ids) {
for (Long id : ids) {
//查询广告内容对象
TbContent content = contentMapper.selectByPrimaryKey(id);
redisTemplate.boundHashOps("index_cache").delete(content.getCategoryId()+"");
contentMapper.deleteByPrimaryKey(id);
}
}
相关文章
- h5项目(特别是vue)缓存严重的解决方案,配合nginx
- JavaWeb_(SSH论坛)_一、项目入门
- gulp-rev:项目部署缓存解决方案----gulp系列(六)
- 新闻发布项目——实体类(newsTb)
- 11 个新项目入选 CNCF Sandbox | 云原生生态周报 Vol. 56
- python-django框架-电商项目-购物车模块开发_20191125
- vue+elementui项目打包后样式变化问题
- 项目管理(九)- 组织项目资源
- Eclispe清除项目缓存无需删除.metadata文件
- gitlab项目关联runner
- Maven jeetsite项目 搭建
- 【项目实战】MyBatis的基础源码 —— 缓存Cache接口源码介绍
- 【项目实战】Java中Comparable和Comparator实现对象比较
- 自动生成项目requirements.txt
- 【华为云实战开发】1.传统Java项目怎么能变得高大上?
- Vue项目打包部署Nginx配置及前端缓存问题解决
- 010-shiro与spring web项目整合【四】缓存Ehcache
- 部署论坛项目并使用redis缓存加速网站访问流量
- 项目实现过程的每个阶段
- 在Android Studio上导入github的项目后报错提示:Unknown host ‘repo.maven.apache.org‘