首页新闻动态正文

品优购之首页广告展示【黑马java培训】

更新时间:2019年07月26日 11时11分37秒 来源:黑马程序员论坛

        -----------------------------------------------------------                                                                                       
        "模块"【网站首页广告管理】:广告的展示,广告数据的管理,---
        -----------------------------------------------------------
                               分为两张表  广告分类表 和广告表    1对多的关系
                                分类表主要有  id 和name  有 轮播图  今日推荐  猜你你喜欢  楼层广告
                                                        广告表主要是具体广告:  有分类id  广告标题  连接  是否启用  展示顺序等
                                                        后台查询出对应分类的广告,前端采用angularjs展示到相应的首页的位置

        技术点:  实现了广告后台管理和广告前台展示,但是对于首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪。
                          那如何解决呢?我们通常的做法有两种:一种是数据缓存、一种是网页静态化。我们今天讨论第一种解决方案。
            缓存解决方案: Spring Data Redis  
                   Spring-data-redis 是 spring 大家族的一部分,提供了在 srping 应用中通过简单的配置访问 redis 服务,
                                   对 reids 底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate 提供了 redis 各种操作、
                                   异常处理及序列化,支持发布订阅,并对 spring 3.1 cache 进行了实现。       
                                   spring-data-redis 针对 jedis 提供了如下功能:
                                        1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
                                        2.针对 jedis 客户端中大量 api 进行了归类封装,将同一类型操作封装为 operation 接口
                                        ValueOperations:简单 K-V 操作
                                        SetOperations:set 类型数据操作
                                        ZSetOperations:zset 类型数据操作
                                        HashOperations:针对 map 类型的数据操作
                                        ListOperations:针对 list 类型的数据操作
                           首页的广告每次都是从数据库读取,这样当网站访问量达到高峰时段,对数据库压力很大,并且影响执行效率。
                           我们需要将这部分广告数据缓存起来。 当根据广告分类查询所有广告的时候首先先去缓存中去查询有没有该分类的缓存数据
                           如果查询出来的结果有就直接返回,如果是等于空的话说明缓存中没有数据 这样就去走数据库查询,查询出相应分类的所有广告
                           放到缓存中去,
                          
                           当广告数据发生变更时,需要将缓存数据清除,这样再次查询才能获取最新的数据
                           add:清除所添加广告分类的所有广告缓存
                           delete:先查询出广告分类id  根据该id清除该分类下的所有广告缓存
                           update: 考虑到用户可能会修改广告的分类,这样需要把原分类的缓存和新分类的缓存都清除掉。
                      先查询出修改前的分类id 清除缓存  判断分类id是否发生修改   如果变化就清除修改后分类id的缓存
                ---------------------------------------------------------------------------------------------------------
                技术点:redis缓存来缓存页面上的广告(轮播图,广告模块),-- 使用的redis集群
                        什么时候用缓存:数据访问频繁,实时性要求比较低
                        ① redis常用数据类型
                                *String:value可容纳的长度是512M,使用":"可优化存储,在可视化的cli端中":"会分文件夹分层;
                                *List  : 是按照插入顺序排序的"链表",value可以在头部"left"插入,也可以在尾部"right"插入;
                                                 在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库                                              中删除,可用于队列,进行简单的任务调度;
                               *Hash  : 主键是字符串,值是map集合,可以用于存储对象信息;
                               *Set   : 无序集合,value不能重复,可用作跟踪唯一性的数据;
                               *ZSet  : 和set一样,是不重复的集合,每个元素对应一个分数,可根据分数进行排序,在实际应用当中可以用作排行榜
                        ② redis的持久化方案:
                                RDB:把内存中的数据按照一定的策略存储在硬盘上的持久化方式,可在redis.conf中利用save属性进行配置,保存的方案;
                                        缺点:在没有达到存储策略所配置的频次,但是也进行了存储,那么那段时间内存储的内容会丢失;
                                AOF:把对redis进行操作的命令存储在日志文件中,默认不开启,默认配置是每秒执行一次,可以配置为每次修改后写入aof,数据完整性高,但是消耗性                                 能,利用redis做数据库就可以开启;
                        ③ redis集群:
                           选择一台redis服务器作为主机master结点,另外一台或者多台redis服务器作为slave结点,降低了单结点redis服务器的读写负载,将读写分离到不同的服务                            器,提高数据的可用性;
                           在redis.conf中配置cluster-enable yes; 在所有slave结点中redis.conf配置 slaveof  <masterip>  <masterport>;和 slave-read-only  yes
                        ④ redis缓存同步问题:数据库中的数据进行增删改的时候,缓存库也要同步;
                           * 采用硬编码的方式进行同步,操作数据库,缺点就是系统的耦合度过高,维护很麻烦
                           * 采用消息队列:数据库更改---消息队列---缓存更新
                        ⑤ 和mysql的区别:
                           * mysql的存储介质是硬盘,redis是内存;
                           * mysql数据是基于二维表格的,redis是基于key/value的;
                           * mysql对事务的支持性好,redis事务支持弱;
                        ⑥ 如何保证redis中缓存的是热点数据
                           * redis中可以在配置文件中设置lru策略,设置成MAXMEMORY POLICY:allkeys-lru,不常使用的数据就会被淘汰
                           * 在数据添加到redis的时候设置数据的过期时间,在过期时间内访问               
                -------------------------------------------------------------------------------------------------------------------

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!