电商项目day09(网站前台之广告功能实现优化策略)

news/2024/5/10 5:38:24/文章来源:https://blog.csdn.net/wangwei_620/article/details/85014444

今日目标:

1、完成门户网站的搭建

2、完成运营商广告后台管理

3、轮播图广告展示

4、spring data redis 集成到项目

5、redis缓存优化广告业务

一、门户网站业务分析

1.首先广告业务:

第一:吸引用户   第二:运营商通过网站的流量赚钱

提高公司的收入,提升网站知名度,提升网站流量

2.设计到的表结构

tb_content

tb_content_category

广告类型表和广告表是一对多的关系

二、运营商后台广告类型和广告管理

1.搭建广告的服务和接口工程

2.完成需求:如图所示

后台代码已经写好了,我们在前台编写一个方法来调用查询所有的的广告分类

前台代码:

//查询广告分类列表$scope.selectContentCategoryList=function () {contentCategoryService.findAll().success(function (response) {$scope.contentCategoryList=response;})}

注意引入

contentCategoryService

页面的改装:

<td>内容类目ID</td><td><select ng-options="item.id as item.name for item in contentCategoryList" class="form-control" ng-model="entity.categoryId" placeholder="内容类目ID" ></select></td><td>状态</td><td><input type="checkbox" ng-model="entity.status" ng-true-value="1" ng-false-value="0"></td>

3、完成如图所示的效果

上面的功能我们在shop_web种就已经写过了,所以我们直接复制即可

uploadController.java    配置文件   aplicationContext.xml    fdfs_client.conf   

uploadService.js    以及复制Controller中的方法到content.html中

注意:一定要引入相关的service

最后修改页面:

<td>图片绝对路径</td><td><input type="file" id="file" /><button ng-click="uploadFile()" class="btn btn-primary" type="button" >上传</button><img  src="{{entity.pic}}" width="150px" height="150px">
</td>

三、网站首页轮播图片广告展示

1.构建protal-web项目

添加jar包  以及配置文件  还有 相关的静态资源

2.完成后端代码

代码:

/*** 通过id查询分类的图片* @param categoryId* @return*/@Overridepublic List<TbContent> findCategoryId(Long categoryId) {TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteria();criteria.andCategoryIdEqualTo(categoryId);criteria.andStatusEqualTo("1");List<TbContent> tbContents = contentMapper.selectByExample(example);for (TbContent tbContent : tbContents) {System.out.println("你好");System.out.println(tbContent);}return tbContents;}

前台代码:

controller层
app.controller("indexController",function ($scope,$controller,contentService) {//控制器继承代码$controller("baseController",{$scope:$scope});//根据广告id查询广告的列表数据$scope.findCategoryId=function (categoryId) {contentService.findCategoryId(categoryId).success(function (response) {//定义广告列表接受数据$scope.contentList = response;})}})
servicer
//服务层
app.service('contentService',function($http){//根据id查询广告的分类this.findCategoryId=function(categoryId){return $http.get('content/findCategoryId.do?categoryId='+categoryId);}
});

四、redis在Linux系统安装

1. 将redis资源包上传到Linux中,redis-3.0.0.tar.gz资源包存在于“\资源\配套软件\Redis”目录中。
2. 执行tar -zxvf redis-3.0.0.tar.gz解压,进入解压的redis-3.0.0,执行make编译命令
3. 在/usr/local下创建redis目录,命令 mkdir redis  备注:将redis安装到/usr/local/redis目录中
4. 进入解压的redis-3.0.0,安装redis服务,执行命令:make install PREFIX=/usr/local/redis
5. 复制配置文件将/redis-3.0.0/redis.conf 复制到redis 下的bin 目录下  执行命令:
   cp redis.conf /usr/local/redis/bin
6. 启动redis ./redis-server redis.conf 

五、springdataredis简介以及demo

六、门户网站缓存广告数据

1、集成redis到项目中

首先添加jar包   

编写配置文件

在servicer层实现redis的添加

后台代码:

/*** 通过id查询分类的图片* @param categoryId* @return*/@Autowiredprivate RedisTemplate redisTemplate;@Overridepublic List<TbContent> findCategoryId(Long categoryId) {//1.首先从从redis中查List<TbContent> contentList = (List<TbContent>) redisTemplate.boundHashOps("content").get(categoryId);//2.判断是否有数据if (contentList==null){//如果没有我们从数据中查询TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteria();criteria.andCategoryIdEqualTo(categoryId);criteria.andStatusEqualTo("1");contentList = contentMapper.selectByExample(example);System.out.println("数据库总查的");}else{System.out.println("从redis中查的");}return contentList;}

2.优化,数据库的数据与redis中数据一致性问题

项目中那些模块会用到缓存?
        门户网站缓存广告数据
        秒杀
        用户注册验证码缓存
        购物车模块

        
    如果广告数据发生变化(增删改),清空redis中缓存的当前广告分类广告数据,下次展示广告数据时,再重新从数据库查询最新广告数据即可。
    
    注意:广告修改时,需要分析是否修改了广告分类值。

代码:

/*** 增加*/@Overridepublic void add(TbContent content) {contentMapper.insert(content);//清除新增广告对应的缓存数据redisTemplate.boundHashOps("content").delete(content.getCategoryId());}/*** 修改*/@Overridepublic void update(TbContent content){//修改后我们都要做跟新TbContent tbContent = contentMapper.selectByPrimaryKey(content.getId());redisTemplate.boundHashOps("content").delete(tbContent.getCategoryId());contentMapper.updateByPrimaryKey(content);//判断id是否发生变化,如果分类发生变化,需要清除修改后的缓存数据if (content.getCategoryId().longValue()!=tbContent.getCategoryId().longValue()){redisTemplate.boundHashOps("content").delete(content.getCategoryId());}}	/*** 根据ID获取实体* @param id* @return*/@Overridepublic TbContent findOne(Long id){return contentMapper.selectByPrimaryKey(id);}/*** 批量删除*/@Overridepublic void delete(Long[] ids) {for(Long id:ids){//清除删除广告对应的缓存数据TbContent tbContent = contentMapper.selectByPrimaryKey(id);contentMapper.deleteByPrimaryKey(id);redisTemplate.boundHashOps("content").delete(tbContent.getCategoryId());}		}@Overridepublic PageResult findPage(TbContent content, int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);TbContentExample example=new TbContentExample();Criteria criteria = example.createCriteria();if(content!=null){			if(content.getTitle()!=null && content.getTitle().length()>0){criteria.andTitleLike("%"+content.getTitle()+"%");}if(content.getUrl()!=null && content.getUrl().length()>0){criteria.andUrlLike("%"+content.getUrl()+"%");}if(content.getPic()!=null && content.getPic().length()>0){criteria.andPicLike("%"+content.getPic()+"%");}if(content.getStatus()!=null && content.getStatus().length()>0){criteria.andStatusLike("%"+content.getStatus()+"%");}}Page<TbContent> page= (Page<TbContent>)contentMapper.selectByExample(example);		return new PageResult(page.getTotal(), page.getResult());}/*** 通过id查询分类的图片* @param categoryId* @return*/@Autowiredprivate RedisTemplate redisTemplate;@Overridepublic List<TbContent> findCategoryId(Long categoryId) {//1.首先从从redis中查List<TbContent> contentList = (List<TbContent>) redisTemplate.boundHashOps("content").get(categoryId);//2.判断是否有数据if (contentList==null){//如果没有我们从数据中查询TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteria();criteria.andCategoryIdEqualTo(categoryId);criteria.andStatusEqualTo("1");contentList = contentMapper.selectByExample(example);System.out.println("数据库总查的");}else{System.out.println("从redis中查的");}return contentList;}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_771521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人网站不输入www.直接domain.com访问不了,输入www.domain.com能访问

网站访问跳转到/cgi-sys/defaultwebpage.cgi页面原因之一ip地址不对解决后&#xff0c;www.domain.com是可以访问了。但是直接domain.com去不能&#xff1f;我记得刚开始开通域名和主机的时候&#xff0c;装的wordpress默认配置是后台我觉得&#xff0c;在中国&#xff0c;有ww…

带着梦想和坚强,她收获了80后创业的广阔舞台,网站实现营利

与过去说分手&#xff0c;并不意味着与梦想说再见&#xff0c;如果因逃避现实而离开的话&#xff0c;恐怕那就不是达贝妮了&#xff0c;也就不会出现一个在百度与谷歌都吃不准的IT新领域的吃螃蟹者。 回看达贝妮走过的创业历程&#xff0c;我们发现上面打着深深的“Benny”式的…

html网站实现站内搜索功能_网站结构优化,网站结构如何设计才能符合SEO优化?

网站SEO结构优化是一项较为复杂的优化工作&#xff0c;网站结构设计必须要符合SEO优化&#xff0c;至少需要考虑网站目录结构URL&#xff0c;那网站结构如何设计才能符合SEO优化?网站结构如何设计才能符合SEO优化?1.站内搜索严格意义上讲&#xff0c;蝙蝠侠IT给出的建议是尽量…

这7个素材网站送你参考,一部手机就可以做影视剪辑,0基础抖音涨粉

一些粉丝看到那些用抖音做混剪的账号&#xff0c;能做到几十万粉丝&#xff0c;可是由于自己找不到好的素材去做&#xff0c;真的是巧妇难为无米之炊啊&#xff01; 今天大周分享几个我自己在用的素材网站。 大家总是说想做影视混剪&#xff0c;如果你还不知道从哪里可以找到…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

微软没强迫?Win 10 版本号追踪网站 Buildfeed 关闭

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> 近日&#xff0c;迫于各方压力&#xff0c;知名 Windows 10 版本号追踪网站 Buildfeed 宣布关闭。对于 Windows Insider 用户来说&#xff0c;即时获取最新 Windows 10 预览版本信…

linux c语言 int 数组初始化,C语言中的数组_Linux编程_Linux公社-Linux系统门户网站...

首先了解一下数组&#xff0c;数组就是一个变量的组这样方便管理变量首先看下变量的声明&#xff1a;int aaa[] {1,2,3,4,5};int 是这个数组元素的类型&#xff0c;此处是int类型的aaa[] 此处的aaa是这个数组的名字&#xff0c;一般说&#xff0c;这个数组aaa&#xff0c;在aa…

网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改

大清早的一上班收到3个网站客户的QQ联系&#xff0c;说是自己公司的网站被跳转到了北京sai车&#xff0c;cai票&#xff0c;du博网站上去了&#xff0c;我们SINE安全公司对3个网站进行了详细的安全检测&#xff0c;发现这3个客户的网站都是同样的症状&#xff0c;网站首页文件i…

html5 视差地图,用HTML5构建高性能视差网站的图文代码详解

本文介绍了一种时尚的网站设计方法&#xff0c;以及如何由浅入深的通过HTML5和浏览器渲染机制来构建高性能的站点。文中多处涉及浏览器重绘和性能优化的原理&#xff0c;也是《Web滚动性能优化实战》的拓展和延续&#xff0c;难度上属于中级进阶&#xff0c;请在阅读前请先看看…

php网站选择什么服务器配置,php选择什么服务器配置

php选择什么服务器配置 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。简要介绍WebSVN是一个基于Web的Subversion Repository浏览器…

Vue+thinkJs博客网站(一)之vue多页面应用的webpack3配置

一.项目简介 本项目使用vue作为前端框架&#xff0c;thinkJs作为后端框架&#xff0c;构建个人博客网站&#xff0c;页面分为博客展示和后台管理&#xff0c;主要目的是学习使用thinkJs。现在只完成了主要的博客增删改功能&#xff0c;发现webpack的配置遇到了一些坑&#xff0…

网站载入测试:Firefox 3.5 Beta 4完胜IE8

上月中旬&#xff0c;微软在一份文档中宣称&#xff0c;根据对全球25大网站(据comScore)载入速度的测 试&#xff0c;IE8比Google Chrome 1.0、Firefox 3.0.5都要快&#xff0c;但根据第三方机构的测试&#xff0c;微软完全没有胜算&#xff0c;而且Firefox随着不断升级领先优势…

华为正式进军互联网 推出白领社交网站AiMi.COM

电信解决方案供应商华为已于近日正式推出白领社交网站AiMi.COM&#xff0c;目前已经开放测试。此举预示着华为正式踏入互联网业务。 首页截图 个人中心截图 AiMi社区定位于满足上班族的网上乐园消遣和娱乐需求。根据测试&#xff0c;AiMi社区界面和目前流行的社交网站没有本质…

分享一些好用的网站

前言 这两年收藏了不少网站&#xff0c;特地整理一下&#xff0c;把一些大家都可能用得上的分享出来&#xff0c;希望能对你有用。 考虑到有一些网站大多数人都知道&#xff0c;所以我就不列出来了。 我把这些网站分为了几大类&#xff1a; 工具类素材类社区类工具类 1、start.…

大型网站架构技术读后感

最近在看趣谈网络协议&#xff0c;顺带看看这本朋友推荐的书&#xff0c;《大型网站技术架构》是由宝架构师李智慧大牛写作的&#xff0c;我把这本书称为“开眼之书”&#xff0c;这本书站在架构的角度讲网站架构&#xff0c;讲的是整体规划和考虑问题的思路&#xff0c;我从事…

web前端开发项目资源网站,私家珍藏!

1.CodePen&#xff1a; http://codepen.io/ 网站里有很多很酷的特效&#xff0c;而且可以看到效果的源代码&#xff0c;也可以看到实现效果&#xff0c;是一个非常不错的前端开发学习资源网站。 这个是CodePen网站里的一个效果的源码截图&#xff0c;是不是很酷呀&#xff01; …

介绍三个新的流量对比网站

做网站的最关心自己的网站和其他网站之间的流量对比&#xff0c;正因为这样&#xff0c;Alexa才会被大家捧到天上&#xff0c;04年&#xff0c;当时在计算机世界的王翌写了一篇《出卖Alexa 》&#xff0c;基本上把Alexa作弊的黑色产业链公诸于世了。Alexa作弊太严重&#xff0c…

宣传网站的利器——DIY个性化iGoogle主题收藏

摘自《Google API大全——编程开发实例 》第10章“iGoogle主题设计”10.2节 10.2 创建主题的步骤 为iGoogle制作主题&#xff0c;除需要有艺术天赋外&#xff0c;还需要有Web设计、编写代码、调试等计算机相关知识。 简单地说&#xff0c;创建一个主题有以下3个步骤&#xff…

独家:.NET开发人员必知的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一&#xff0c;或者想要成为其中之一的话&#xff0c;我下面将要列出的每一个站点都应该是你的最爱&#xff0c;都应该收藏到书签中去。 对于不熟悉.NET技术的朋友&#xff0c;需要说明一下&#xff0c;.NET提供…

好玩的网站“彩蛋”们(程序员视角)...

看电影的时候,制作商会在影片最后,给我们留彩蛋. 浏览网站的时候,网站的运营商也会给我们留彩蛋... 图形类彩蛋 知乎 https://www.zhihu.com/ 知乎想来知乎工作&#xff1f;请发送邮件到 jobszhihu.com 天猫 https://www.tmall.com/ 天猫喵~ 加入我们吧 http://tb.cn/iS8NB…