基于Redis+fastdfs+dubbo+Solr搜索引擎的完整互联网项目开发完整教案day06大广告位添加缓存.docx
- 文档编号:29230516
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:42
- 大小:1.13MB
基于Redis+fastdfs+dubbo+Solr搜索引擎的完整互联网项目开发完整教案day06大广告位添加缓存.docx
《基于Redis+fastdfs+dubbo+Solr搜索引擎的完整互联网项目开发完整教案day06大广告位添加缓存.docx》由会员分享,可在线阅读,更多相关《基于Redis+fastdfs+dubbo+Solr搜索引擎的完整互联网项目开发完整教案day06大广告位添加缓存.docx(42页珍藏版)》请在冰豆网上搜索。
基于Redis+fastdfs+dubbo+Solr搜索引擎的完整互联网项目开发完整教案day06大广告位添加缓存
淘淘商城
第六天
1.课程计划
1.实现首页大广告
2.添加缓存分析
3.Redis安装
1.Redis单机版
2.Redis集群版
3.回顾jedis
4.项目集成Redis
5.添加缓存
2.实现首页大广告
前端团队:
前端页面效果实现
后端团队:
根据前端编写的页面,从后台获取数据进行动态展示
2.1.开发分析
1.对页面进行分析,查看首页大广告所需要的数据在什么地方
2.对前端展示所需要的数据结构进行分析
3.从后台服务获取数据,封装并返回给前台
2.2.查找数据位置
taotao-portal是门户系统。
里面的index.jsp页面就是首页的jsp
我们需要实现的大广告位就在其中,可以在该页面中进行查找
查找方式(使用谷歌浏览器):
1.在大广告位图片点击右键
2.点击检查
3.在弹出的窗口复制网址,这是点击图片超链接的url的地址
4.在taotao-portal的index.jsp页面,搜索该网址
在页面的41行找到数据
2.3.分析数据结构
查看数据,发现是json格式的数据
可以使用JsonView对数据进行格式化,方便分析
2.3.1.jsonView工具
解压效果:
使用:
复制json数据进去,点击Format即可
2.3.2.分析数据
页面的json数据有6组数据,对应大广告位的6张图片,有且仅有6条图片数据,否则前端广告轮播功能不能展示,前端js代码的问题
srcB和src是图片地址,href是图片的超链接,height,width,widthB,heightB是图片的尺寸属性。
我们暂时用不到,就保持和原始数据一致
2.4.实现大广告展示
2.4.1.数据准备
在后台管理系统中,使用内容管理功能,增加大广告数据
首页的大广告展示模块对应内容管理系统的大广告分类
大广告的6条信息对应内容管理系统的大广告的内容数据
注意:
只能保存6条数据,不能多也不能少
效果
查看数据库内容分类表,可以根据大广告的id查询内容表,就是我们需要的结果
2.4.2.实现功能
2.4.2.1.添加依赖
taotao-portal需要调用ContentService服务获取大广告数据,所以需要加入taotao-manager-interface依赖
2.4.2.2.声明服务调用
在taotao-portal中,声明服务调用
2.4.2.3.编写Controller
在taotao-portal修改
@Controller
@RequestMapping("index")
publicclassIndexController{
@Autowired
privateContentServicecontentService;
@Value("${TAOTAO_AD_ID}")
privateLongTAOTAO_AD_ID;
/**
*门户首页展示
*
*@return
*/
@RequestMapping(method=RequestMethod.GET)
publicStringtoIndex(Modelmodel){
//调用内容服务,查询大广告数据,大广告分类id为31
StringAD=this.contentService.queryAD(this.TAOTAO_AD_ID);
//把大广告轮播数据放到Model中,传递给前台页面
model.addAttribute("AD",AD);
return"index";
}
}
配置文件添加
2.4.2.4.编写service接口
/**
*根据内容分类查询内容
*
*@paramcategoryId
*@return
*/
StringqueryAD(LongcategoryId);
2.4.2.5.实现service接口方法
@Override
publicStringqueryAD(LongcategoryId){
//根据分类id查询内容
Contentparam=newContent();
param.setCategoryId(categoryId);
List
//遍历内容,把内容封装到List
//声明容器存放内容
List
for(Contentcontent:
list){
Map
map.put("srcB",content.getPic());
map.put("height",240);
map.put("alt","");
map.put("width",670);
map.put("src",content.getPic());
map.put("widthB",550);
map.put("href",content.getUrl());
map.put("heightB",240);
//把封装好的map放到list容器中
results.add(map);
}
Stringjson="";
try{
//需要把List
json=MAPPER.writeValueAsString(results);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnjson;
}
2.4.2.6.修改页面展示数据
修改taotao-portal的index.jsp页面,数据是从后台获取
2.4.3.效果
3.添加缓存分析
3.1.首页大广告添加缓存
为什么要添加缓存?
随着访问用户越来越多,并发越来越大,直接从MySQL数据库查询性能较低。
可以使用把数据进行缓存,从缓存读取速度更快
什么样的数据需要添加缓存?
1.访问频率高
2.更新频率低
首页访问量很大,大广告的更新频率较低,所以可以添加缓存
可以使用redis增加缓存
因为redis的读写速度快
我们的架构是把缓存放在服务层
服务层把需要缓存的数据放在redis中,
先从redis查询数据,如果redis没有数据,再去MySQL查询。
4.redis安装
4.1.redis回顾
redis是非关系型数据库,即NoSql数据库
存储的数据模型是key-value
特点是访问速度快,可以作为缓存使用
Redis把数据存放到内存中,内存的读写速度比硬盘的读写速度快
持久化方案(了解)
RDB快照把内存中的数据来一份一模一样的放在硬盘中
AOF保存命令日志把每一条对redis的写操作命令,保存到类似日志文件中
支持多种数据类型:
1、String类型。
Value只能是String类型。
2、Hash类型。
可以对key进行分类。
3、List类型。
所有元素是有序的
4、Set类型。
元素是无序的,元素是不能重复。
集合操作,并集,交集,差集
5、SortedSet(zset)有序的set,元素不能重复且有序。
redis是单线程,但是Redis的读写速度太快了,
官方的一个简单测试:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
结果:
读的速度是110000次/s,写的速度是81000次/s
4.2.redis单机版安装
4.2.1.环境准备
redis安装在Linux上,redis是c语言开发的,需要gcc-c++环境
查看是否安装gcc-c++
[root@itcast-01~]#rpm-qa|grepgcc-c++
gcc-c++-4.4.7-17.el6.i686
如果没有安装,可以使用yum命令进行网络安装
[root@itcast-01~]#yuminstallgcc-c++
4.2.2.上传安装包
在Linux的CRT客户端,按alt+p进行上传,可以直接把安装包拖动上去
进入root目录,查看上传包
4.2.3.解压安装包
[root@itcast-01~]#tar-zxvfredis-3.0.2.tar.gz
4.2.4.执行安装
进入解压的文件夹,进行编译
[root@itcast-01~]#cdredis-3.0.2
[root@itcast-01redis-3.0.2]#make
成功效果:
执行安装,指定安装路径.PREFIX需要大写
[root@itcast-01redis-3.0.2]#makeinstallPREFIX=/usr/local/redis
成功效果:
4.2.5.查看安装目录
进入目录
[root@itcast-01redis-3.0.2]#cd/usr/local/redis/bin/
常用的是客户端和服务端
redis-cli是客户端
redis-server是服务端
4.2.6.启动redis
4.2.6.1.前端启动
启动命令
[root@itcast-01bin]#./redis-server
确认redis安装正常,效果:
4.2.6.2.修改为后端启动
从安装包中复制redis.conf文件到/usr/local/redis/bin中
[root@itcast-01bin]#cp/root/redis-3.0.2/redis.conf./
修改redis.conf配置文件,修改为yes
[root@itcast-01bin]#vimredis.conf
启动命令
[root@itcast-01bin]#./redis-serverredis.conf
查看启动效果:
[root@itcast-01bin]#ps-ef|grepredis
使用图形化界面测试访问成功
4.3.Jedis回顾
4.3.1.创建itcast-jedis工程
4.3.2.测试jedis
publicclassJedisTest{
publicstaticvoidmain(String[]args){
//1.创建jedis对象,需要ip和port
Jedisjedis=newJedis("192.168.37.161",6379);
//2.使用jedis操作redis,jedis的方法和命令是一样的
Stringpong=jedis.ping();
System.out.println(pong);
Stringkey="jedis";
StringsetResult=jedis.set(key,"helloredis!
");
System.out.println(setResult);
StringgetResult=jedis.get(key);
System.out.println(getResult);
//3.释放资源,关闭jedis
jedis.close();
}
}
4.3.3.测试jedisPool
使用jedisPool连接池操作,项目使用连接池
publicclassJedisPoolTest{
publicstaticvoidmain(String[]args){
//1.创建连接池JedisPool
JedisPooljedisPool=newJedisPool("192.168.37.161",6379);
//2.从连接池获取连接jedis
Jedisjedis=jedisPool.getResource();
//3.使用连接jedis操作redis
Stringpong=jedis.ping();
System.out.println(pong);
Stringkey="jedisPoll";
StringsetResult=jedis.set(key,"helloredis!
");
System.out.println(setResult);
StringgetResult=jedis.get(key);
System.out.println(getResult);
//4.释放资源,每次用完jedis连接,必须close(),指的就是还回连接池
jedis.close();
//程序结束,销毁连接池
jedisPool.close();
}
}
4.4.Redis集群版原理
4.4.1.Redis-cluster架构图
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效。
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value
Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点
4.4.2.redis-cluster投票:
容错
(1)投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.
(2):
什么时候整个集群不可用(cluster_state:
fail)?
a:
如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.ps:
redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:
如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.
4.5.Redis集群搭建
为了保证可以进行投票,需要至少3个主节点。
每个主节点都需要至少一个从节点,所以需要至少3个从节点
一共需要6台redis服务器
可以使用6个redis实例
6个redis实例的端口号,7001~7006
不要求学员搭建集群,只需要打开Redis集群的节点,启动命令:
[root@itcast-01~]#cd/usr/local/redis/redis-cluster
[root@itcast-01~]#./start-all.sh
4.5.1.准备6个redis实例
1.把bin目录里面的rdb,和aof文件删除,准备干净的redis
[root@localhostbin]#rm-rfappendonly.aof
[root@localhostbin]#rm-fdump.rdb
效果:
2.把bin复制6份
[root@localhostbin]#cd..
[root@localhostredis]#cp-rbinredis-cluster/redis1
[root@localhostredis]#cp-rbinredis-cluster/redis2
[root@localhostredis]#cp-rbinredis-cluster/redis3
[root@localhostredis]#cp-rbinredis-cluster/redis4
[root@localhostredis]#cp-rbinredis-cluster/redis5
[root@localhostredis]#cp-rbinredis-cluster/redis6
3.修改端口号
依次修改端口号为7001~7006
4.启动6个redis实例
编写脚本实现
1.编写脚本
[root@localhostredis-cluster]#vimstart-all.sh
cdredis1
./redis-serverredis.conf
cd..
cdredis2
./redis-serverredis.conf
cd..
cdredis3
./redis-serverredis.conf
cd..
cdredis4
./redis-serverredis.conf
cd..
cdredis5
./redis-serverredis.conf
cd..
cdredis6
./redis-serverredis.conf
cd..
2.设置脚本启动权限
[root@localhostredis-cluster]#chmodu+xstart-all.sh
3.执行脚本
[root@localhostredis-cluster]#./start-all.sh
[root@localhostredis-cluster]#psaux|grepredis
效果
4.5.2.准备redis集群的安装环境
redis集群的管理工具使用的是ruby脚本语言,安装集群需要ruby环境。
安装ruby环境(老师提供的虚拟机,环境已经装好)
[root@itcast-01redis-cluster]#yuminstallruby
安装Ruby的打包系统
[root@itcast-01redis-cluster]#yuminstallrubygems
安装redis的ruby接口库
先上传,再执行命令安装
[root@itcast-01~]#geminstallredis-3.0.0.gem
4.5.3.安装redis集群
需要修改每个实例的redis.conf配置文件,开启redis-cluster
[root@localhostredis-cluster]#vimredis1/redis.conf
需要修改6个节点
重启redis实例
[root@localhostredis-cluster]#./start-all.sh
集群管理工具在redis解压文件夹的src的文件夹中
使用redis-cluster的集群管理工具启动集群
先进入集群管理工具所在的路径
[root@localhostredis-cluster]#cd/root/redis-3.0.0/src/
再启动命令(注意修改为自己的ip最好不用127.0.0.1和port)
[root@localhostsrc]#./redis-trib.rbcreate--replicas1192.168.37.161:
7001192.168.37.161:
7002192.168.37.161:
7003192.168.37.161:
7004192.168.37.161:
7005192.168.37.161:
7006
启动信息
>>>Creatingcluster
Connectingtonode192.168.37.131:
7001:
OK
Connectingtonode192.168.37.131:
7002:
OK
Connectingtonode192.168.37.131:
7003:
OK
Connectingtonode192.168.37.131:
7004:
OK
Connectingtonode192.168.37.131:
7005:
OK
Connectingtonode192.168.37.131:
7006:
OK
>>>Performinghashslotsallocationon6nodes...
Using3masters:
192.168.37.131:
7001
192.168.37.131:
7002
192.168.37.131:
7003
Addingreplica192.168.37.131:
7004to192.168.37.131:
7001
Addingreplica192.168.37.131:
7005to192.168.37.131:
7002
Addingreplica192.168.37.131:
7006to192.168.37.131:
7003
M:
955567f988830cdf4328854f815719ea28082ca8192.168.37.131:
7001
slots:
0-5460(5461slots)master
M:
4f3eeced04b930aa48193699301745a05a70697a192.168.37.131:
7002
slots:
5461-10922(5462slots)master
M:
871a684dbbc0f43dcc16107710d7bd2f4e6de76a192.168.37.131:
7003
slots:
10923-16383(5461slots)master
S:
baca3ce2223dfcd9c636a7193b12998b1dbb2431192.168.37.131:
7004
replicates955567f988830cdf4328854f815719ea28082ca8
S:
0b599863ddf2e03b0326c75b874a1af8ae430d2e192.168.37.131:
7005
replicates4f3eeced04b930aa481936
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Redis fastdfs dubbo Solr 搜索引擎 完整 互联网 项目 开发 教案 day06 广告位 添加 缓存
链接地址:https://www.bdocx.com/doc/29230516.html