40分布式电商项目 - 网站首页(缓存广告数据)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 40分布式电商项目 - 网站首页(缓存广告数据)

代码已上传至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);
    }
  }


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
29天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
187 0
|
3月前
|
缓存 运维 前端开发
【分布式】衡量网站的性能指标
【1月更文挑战第25天】【分布式】衡量网站的性能指标
|
3月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
52 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
2月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
83 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
156 0
|
3月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
43 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
13天前
|
存储 缓存 NoSQL
缓存、分布式缓存和持久化
这篇内容介绍了缓存的概念和Redis的作用,以口袋与公文包的比喻解释了缓存如何提高数据访问速度。Redis是一个内存中的高级缓存系统,能提升系统响应速度。接着讨论了为何需要分布式缓存,通过多个“篮子”(Redis节点)解决单点故障和性能瓶颈,保证高可用性和数据安全性。最后提到了Redis的两种持久化机制——RDB(定期数据快照)和AOF(记录写操作日志),分别用照片备份和实时同步来比喻,说明它们在数据丢失风险和恢复速度上的权衡。
|
19天前
|
缓存 NoSQL 数据库
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
30 0
|
29天前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
34 1
|
1月前
|
存储 缓存
本地缓存和分布式缓存区别
【2月更文挑战第16天】
39 2
本地缓存和分布式缓存区别