Java电商项目-6.实现门户首页数据展示_Redis数据缓存
目录
项目的Github地址
需求介绍
- 为了缩短用户看到首页信息的时间, 我们把首页显示的类目信息, 广告等数据放到Redis缓存中, 这样就不用通过耗时的数据库操作获取数据, 而是直接从Redis缓存中获取.
- 在开始之前先记录一个坑: 重启虚拟机后nginx服务器关闭了, 导致nginx上的图片无法访问, 当再次启动nginx的时候遇到

- 进入nginx.conf文件把HTTPS SERVER里面的root注释掉后问题就没有了, 能正常启动.

搭建Redis集群环境
- 实现Redis 3主3从集群搭建

- Redis3.0 开始支持集群,在每个 Master 上存放着各不相同的数据,即分布式存储的思想。
集群中的每个节点都需要知道集群中自己之外的其它节点。 - Redis 集群主(Master(M1,M2,M3))从(Slave(S1,S2,S3))复制、读写分离 。Master 只负责写和
同步数据给 Slave,Slave 负责被读的任务,可以通过 Slave 的扩容提高读的速度。
下面先描述单机版redis的安装
- 首先要把redis的安装包上传到虚拟机上.

- 安装gcc-c++编译器, 输入命令:
yum install gcc-c++(我的机器已经安装过了, 第一次安装中途需要输入确定信息)

- 解压redis安装包:
tar zxvf 压缩包名...

- 进入解压后的文件夹, 输入指令
make进行编译, 结果如下

- 接下来执行安装操作:
make PREFIX=/usr/local/redis/ install(PREFIX指定了安装位置)

- 进入bin目录后就可以登陆redis了. 但是redis有两种启动方式, 默认是前台启动:
./redis-server

- 使用前台启动的话, 命令行就不能用来输入命令了, 可以按Ctrl + C 强行退出.
- 然后进入到解压目录, 把解压文件中的
redis.conf文件拷贝到安装目录下:cp redis.conf /usr/local/redis/bin

- 编辑redis.conf:
vi redis.conf

- 重新启动redis:
./redis-server redis.conf(指定配置文件) - 查看是否启动:
ps -ef | grep -i redis

- 在防火墙中配置6379端口为打开.

- 重启防火墙:
service iptables restart - 测试是否能够连接上redis服务:
./redis-cli

- 单机安装到这里便告一段落.
下面将进行Redis3主3从集群环境搭建
- 安装集群需要ruby脚本, 先解压ruby脚本
tar zxvf 压缩包名

- 进入解压目录, 执行install.sh

- 然后创建redis集群相关目录
- 首先在/opt目录下创建redis目录

- 然后进入redis目录, 在这创建3个集群相关目录:
mkdir conf,mkdir logs,mkdir data

- 其中conf目录用于存放6个redis共用的配置文件
- 需要将原始的redis.conf配置文件, 拷贝到/opt/redis/conf中, 更名为redis-common
- 建议如果不熟悉的话在windows下进行配置, 然后在上传到linux中. (该配置文件已经给出, 可以到素材文件夹中获取)

- 然后进入
/usr/local/redis/bin目录中, 加入各个redis的配置文件.

关闭防火墙:
service iptables stop- 然后启动redis的6个服务. (先把之前启动的单机redis进程kill掉)
然后逐个启动6个服务

- 接下来要创建集群:(按照自己的ip地址进行修改), 执行目录为redis解压目录下的src目录
./redis-trib.rb create --replicas 1 192.168.117.130:6380 192.168.117.130:6381 192.168.117.130:6382 192.168.117.130:6383 192.168.117.130:6384 192.168.117.130:6385- 找到执行这行命令的目录, redis压缩包的解压目录/src: 复制执行上面的命令

- 下面连接上集群进行测试, 进入
/usr/local/redis/bin - 输入指令:
./redis-cli -c -p 6380, -c表示集群

- 这里记录一下redis集群的重启.
- 重启的参考连接
- 大致步骤是要把/opt/redis/data 目录下的文件清空, 然后重新启动每个redis服务, 最后创建redis集群.
基于SOA架构, 创建门户ashop-portal-web门户项目
- 在ashop项目下创建war类型子模块
ashop-portal-web

- 接着配置好pom.xml, src/main/resource下的配置文件和web.xml. 这些文件的配置可在源码中获得.
- 然后把静态资源复制到项目中
- 接着创建PageController

- 打包部署项目, 显示出网站首页本阶段完成.

实现门户首页商品类目显示
- 创建远程服务方法:


- 然后封装回显数据的实体类对象
- 在ashop-common模块下的beans包中创建
CatResult类

- 创建CatNode实体类.

- 编写web模块的service接口和实现类, 里面涉及到json字符串的封装

- 编写controller, 这次响应回去的类型是text/html

- 最后实现这样的效果

实现门户首页大广告轮播
- 远程服务提供者实现

- 编写封装响应信息的实体类.

编写web模块的service接口及实现类

编写controller

- 最后打包部署, 能在商品的大广告位看到图片

实现商品类目缓存
- 考虑到商城首页的并发量很大, 如果每个用户的请求都从数据库中查询商品类目效率将会很低. 我们将会用redis把商品类目缓存到内存中, 加快响应速度.
- 整个逻辑是很好理解的:
- 如果redis缓存中没有商品类目数据, 就通过调用ashop-rpc远程服务获得数据, 通过处理后保存到redis中, 再返回给用户进行展示.
- 如果redis缓存中已经缓存了商品类目数据, 就直接返回给客户, 不需要调用ashop-rpc.
- 首先在pom文件中添加依赖

创建applicationContext-redis.xml


在src下创建文件cache.properties, 记录redis中保存商品类目的键, 注意要在上面的spring配置文件中添加context头

- 接下来修改service实现类中的逻辑

实现大广告缓存, 缓存同步
- 缓存的逻辑和上面商品类目的缓存一样.

缓存同步
- 使用缓存就肯定要考虑缓存更新的问题. 如果后台更新了数据, 而redis缓存中的数据没有更新, 用户就会获取到非最新数据, 出现脏读.
- 关于实现缓存与数据库之间的同步, 以下提供两种思路:
- 设置key的生命周期, 定期同步数据库.
- 当调用远程服务操作数据库后, 同时清空缓存中的内容, 这样当客户访问时服务器将重新到数据库读取数据.
Java电商项目-6.实现门户首页数据展示_Redis数据缓存的更多相关文章
- Java电商项目-1.构建数据库,搭建项目环境
目录 到Github获取源码请点击此处 一. 数据库还原 二. Mybatis逆向生成工具的使用 三. 搭建项目环境 四. 在linux虚拟机上部署zookeeper, 搭建Dubbo服务. linu ...
- Java电商项目-3.使用VSFTPD_Nginx完成商品新增
目录 到Github获取源码请点击此处 一. 商品类目查询 二. FTP图片服务器的搭建 图片上传思路介绍 Linux中安装vsftpd 接着配置ftp服务, 让外网可以访问 Http服务器搭建 Ng ...
- Java电商项目-8.实现SSO单点登陆
目录 创建ashop-sso-web单点登陆系统 用户名唯一性验证 用户注册 用户登陆 获得用户登陆状态 实现安全退出 项目的Github地址 创建ashop-sso-web单点登陆系统 先创建好模块 ...
- java电商项目常见异常
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...
- Java电商项目-5.内容管理cms系统
目录 实现加载内容分类树功能 实现内容分类动态添加 删除内容分类节点 实现内容分类节点的分页显示 实现广告内容的添加 实现广告内容删除 实现广告内容编辑 到Github获取源码请点击此处 实现加载内容 ...
- Java电商项目,秒杀,抢购等高并发场景的具体场景和一些概念以及处理思路
这里我借鉴了网上其他大佬的观点: 一:高并发带来的挑战 原因:秒杀抢购会经常会带来每秒几万的高并发场景,为了更快的返回结果给用户. 吞吐量指标QPS(每秒处理请求数),假设一个业务请求响应耗时为100 ...
- 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...
- Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- Java从零到企业级电商项目实战
欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回复关键字免费领取)回复关键字:"电商项 ...
随机推荐
- 学习笔记 第七章 使用CSS美化超链接
第7章 使用CSS美化超链接 学习重点 认识超链接 熟悉伪类 定义超链接样式 能够灵活设计符合页面风格的链接样式 7.1 定义超链接 在HTML5中建立超链接需要两个要素:设置为超链接的网页元素和 ...
- reveal.js让程序员做ppt也享受快乐
前言 程序员除了会写的一手漂亮的代码,也要求做出风格优雅的PPT,诸如向领导汇报工作.向小组成员反馈项目进展自己的工作等等.就本人而言,做ppt还要去找模板,还需要设计风格,内心是焦灼的.于是乎,我搜 ...
- Python tldextract模块
最新发布的 PyPI: pip install tldextract 或者最新的开发版本: pip install -e 'git://github.com/john-kurkowski/tldext ...
- sklearn.metrics.roc_curve
官方网址:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics 首先认识单词:metrics: ['mɛ ...
- 修改mysql数据默认存储路径
1:停止mysql服务 2:找到配置文件路径 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 3:修改属性datadir 1.将C:/ProgramData/ ...
- docker centos7 配置和宿主机同网段IP
docker centos7 配置和宿主机同网段IP 1.安装brctl 命令 # yum -y install bridge-utils 2.编辑网卡配置文件 # vi ifcfg-eno16777 ...
- React Components之间的通信方式了解下
先来几个术语: 官方 我的说法 对应代码 React element React元素 let element=<span>A爆了</span> Component 组件 cla ...
- 关于C/C++的一些思考(1)
C++的前世今生: C的结构化思想: Ada的模版思想: Fortran的运算符重载思想: Simula的OO思想:封装,继承,多态: C++类型描述了变量的三个特征: 该类型在内存中占用物理空间的大 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- selenium切换frame(iframe)
例如网页代码为: <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...