学习主题:门户数据展示_Redis缓存数据
学习目标:
1.Redis_3主3从集群环境搭建
(1)谈单你对读写分离和主从同步的理解
在每个 Master 上存放着各不相同的数据,即分布式存储的思想。 集群中的每个节点都需要知道集群中自己之外的其它节点。
Redis 集群主(Master(M1,M2,M3))从(Slave(S1,S2,S3))复制、读写分离 。Master 只负责写和 同步数据给 Slave,Slave 负责被读的任务,通过 Slave 的扩容提高读的速度。
所有的 redis 节点彼此互联(PING-PONG 机制), 节点的 fail 是通过集群中超过半数的节 点检测失效时才生效
(2)谈谈redis集群进行数据和solt映射的思想
Redis引入slot来解决如何实现集群模式下部分需求问题。事实上,节点并不是存储在slot里面slot只是用于管理数据与节点相联的手段而已,在处理相关逻辑问题时,redis使用slot作为索引来管理数据
2.创建门户ego-portal-web项目
(1)描述ego-portal-web项目中需要的依赖
<dependencies>
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>ego-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>ego-rpc-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- dubbo依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!-- zookeeper客户端依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- json到java对象的序列化和反序列化 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
(2)描述ego-portal-web项目中web.xml配置内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>ego-portal-web</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/favicon.ico</url-pattern>
</servlet-mapping> -->
<!-- 以监听器的方式启动spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<!-- POST请求的乱码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定编码方式 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- 映射filter -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- springmvc的servlet -->
<servlet>
<servlet-name>ego-portal-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<!-- 让springmvc随系统启动而启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ego-portal-web</servlet-name>
<!-- 伪静态化,接收.html结尾的请求 -->
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
3.加载门户首页商品类目
(1)描述加载首页商品类目的实现思路
点鼠标悬停在该字段上时会发送一个Ajax请求到后台查询所有商品类目的信息,生产者调用mapper层查询到所有的商品类目信息,消费者调用服务时将获取到的集合封装为json数据类型格式的json字符串,由controller层渲染到页面上
(2)描述需要响应到前端的商品类的数据结构和规范
4.加载门户首页大广告
(1)描述实现加载首页大广告的实现思路
在页面加载时会发送一个Ajax请求到后台查询category_id对应的所有广告的信息,生产者调用mapper层查询到所有的广告信息,消费者调用服务时将获取到的集合封装为json数据类型格式的json字符串,由controller层渲染到页面上
(2)描述后端响应到前端的大广告数据格式
5.实现商品类目_大广告缓存_缓存同步
(1)描述实现缓存同步的思路
先去redis中查询缓存,如果有则直接返回查询到的数据,如果没有则会调用服务去数据库中查询数据,将查询到的数据封装为json数据类型的json字符串,存储进redis缓存中,返回该json字符串
(2)描述实现数据缓存的实现思路和缓存,数据库查询顺序
如果redis缓存中没有数据,通过调用ego-rpc服务,查询数据库获得商品类目数据,将ego-rpc 返回的数据进行处理,保存到 redis 缓存,在返回到 ego-portal-web 进行展示
如果 redis 缓存中有数据,直接将缓存中的数据,返回给 ego-portal-web,不用调用 ego-rpc 服 务查询数据库