redis一般缓存什么样数据_门户数据展示_Redis缓存数据

学习主题:门户数据展示_Redis缓存数据

一、Redis_3主3从集群环境搭建

谈单你对读写分离和主从同步的理解

读写分离:Master负责写数据的操作,salve负责读数据的操作
主从同步:salve是对master的备份,将数据写入到master中,会被同步到salve中

谈谈redis集群进行数据和slot映射的思想

整个redis集群将集群存储空间分为16384(0—16383)个slot(槽),
将16384个slot分散到集群中的每个服务器节点。
在集群存储数据的时候,首先进行CRC16算法,根据运算结果将key对应的执行保存到对应的slot。

二、创建门户ego-portal-web项目

描述ego-portal-web项目中需要的依赖

<dependencies>
  	<dependency>
  		<groupId>com.bjsxt.ego</groupId>
  		<artifactId>ego-common</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	<dependency>
  		<groupId>com.bjsxt.ego</groupId>
  		<artifactId>ego-rpc-service</artifactId>
  		<version>0.0.1-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>
  </dependencies>
 
  <build>
		<plugins>          
			<!-- 配置Tomcat插件 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<path>/</path>
					<port>8081</port>
				</configuration>
			</plugin>
		</plugins>
	</build>

描述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>

三、加载门户首页商品类目

描述加载首页商品类目的实现思路

把鼠标放到商品的类目分类时,后台会发送一个ajax请求,
查询数据库,将数据库中的数据响应回来为json字符串,
将字符串解析为json对象并将其响应到前端页面,
前端页面接收到数据后将商品类目加载出来

描述需要响应到前端的商品类的数据结构和规范

后台得到的是list集合,需要遍历list集合,
将其转换为符合前端规范的数据格式(json格式的字符串),
前台接收到json格式的字符串后,将其转换为json格式对象响应到浏览器端。
@Service
public class PortalItemCatServiceImpl implements PortalItemCatService {

	@Autowired
	private ItemCatService itemCatServiceProxy;
 
	//加载前台首页的商品类目
	@Override
	public String loadItemCatService() {

		List<TbItemCat> list = itemCatServiceProxy.loadItemCatListService();
 
		//创建CatResult对象
		CatResult result = new CatResult();
		//将list集合转换为符合前端规范数据格式,递归遍历list
		List<?> data = getChildren(0L, list);
 
		result.setData(data);
		//将result对象转换为json字符串
		String str = JsonUtils.objectToJson(result);
 
		return str;
	}
 
	private List<?> getChildren(Long parentId, List<TbItemCat> itemCats) {
		// 盛放指定分类下的所有子分类信息
		List resultList = new ArrayList();

		for (TbItemCat itemCat : itemCats) {

			if (itemCat.getParentId().equals(parentId)) {
				if (itemCat.getIsParent()) {
					// 如果itemCat代表一级分类或者二级分类

					CatNode catNode = new CatNode();

					if (itemCat.getParentId().longValue() == 0) {
						// 如果是一级分类 "<a href='/products/1.html'>图书、音像、电子书刊</a>",
						catNode.setName(
								"<a href='/products/" + itemCat.getId() + ".html'>" + itemCat.getName() + "</a>");
					} else {
						// 如果是二级分类 "电子书刊",
						catNode.setName(itemCat.getName());
					}
					// "/products/2.html",
					catNode.setUrl("/products/" + itemCat.getId() + ".html");
					catNode.setList(getChildren(itemCat.getId(), itemCats));
					// 将节点添加到list集合中
					resultList.add(catNode);
				} else {
					// 如果itemCat表示三级分类 "/products/3.html|电子书",
					resultList.add("/products/" + itemCat.getId() + ".html|" + itemCat.getName());
				}
			}
		}
		return resultList;
	}
}

前端的数据格式规范

71a0ca2e3e69759488ee19e6aa2b0894.png

四、加载门户首页大广告

描述实现加载首页大广告的实现思路

根据内容类目的id到数据库中查询内容数据,
在提供端将查询到的数据封装到list集合中,在消费端调用远程服务,
将list集合中的数据转换成json格式的字符串发送到前台,
前台接收到字符串之后,将字符串转换成json格式的对象,
然后将json格式对象推送到浏览器端。

描述后端响应到前端的大广告数据格式

后端将list集合中的数据转换成json格式的字符串响应到前端,
前端将字符串转换成json格式的对象推送到浏览器。

a9181a50f6f63c42232ea7061f3456ca.png

五、实现商品类目_大广告缓存_缓存同步

描述实现缓存同步的思路

(1)如果redis缓存中没有数据,通过调用ego-rpc服务,查询数据库获得商品类目数据,
将ego-rpc返回的数据进行处理,保存到redis缓存,在返回到ego-portal-web进行展示
(1)如果redis缓存中有数据,直接将缓存中的数据返回给ego-rpc-web,不用调用ego-rpc服务查询数据库。

描述实现数据缓存的实现思路和缓存,数据库查询顺序

1.可以设置 key 的生命周期,定期的和数据库同步  
2.当 ego-rpc 对数据库数据完成增删改的时候,清空 redis 中缓存的数据,
ego-portal-web,重新调用远程服务查询数据库获得数据,再次放入缓存中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值