学习主题:门户数据展示_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 {@Autowiredprivate ItemCatService itemCatServiceProxy;//加载前台首页的商品类目@Overridepublic String loadItemCatService() {List<TbItemCat> list = itemCatServiceProxy.loadItemCatListService();//创建CatResult对象CatResult result = new CatResult();//将list集合转换为符合前端规范数据格式,递归遍历listList<?> 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;}
}

前端的数据格式规范

四、加载门户首页大广告

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

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

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

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

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

描述实现缓存同步的思路

(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,重新调用远程服务查询数据库获得数据,再次放入缓存中。

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

  1. Java_Hive自定义函数_UDF函数清洗数据_清洗出全国的省份数据

    Java_Hive_UDF函数清洗数据_清洗出全国的省份数据 最近用Hadoop搞数据清洗,需要根据原始的地区数据清洗出对应的省份数据,当然我这里主要清洗的是内陆地区的数据,原始数据中不包含港澳台地区 ...

  2. 机器学习 处理不平衡数据_在机器学习中处理不平衡数据

    机器学习 处理不平衡数据 As an ML engineer or data scientist, sometimes you inevitably find yourself in a situat ...

  3. 有效沟通的技能有哪些_如何有效地展示您的数据科学或软件工程技能

    有效沟通的技能有哪些 What is the most important thing to do after you got your skills to be a data scientist? ...

  4. 云中数据_免费备份和共享云中数据的最佳网站

    云中数据 We've been told many times how important backups are, although we may not realize it until it's ...

  5. cesium 3dtiles 加载本地数据_记一次Cesium地形数据生成过程

    问题描述 有一小块带高程值的点状数据,需要根据该数据生成Cesium支持的3dtiles数据,在Cesium中显示.经过一周多时间的摸索,终于能够在Cesium中加载成功.现将数据处理流程做个记录,以 ...

  6. python使用elasticsearch维护数据_使用Python对ElasticSearch获取数据及操作

    #!/usr/bin/env python#-*- coding: utf-8 -*- """@Time : 2018/7/4 @Author : LiuXueWen @ ...

  7. mysql如何防止插入重复数据_如何防止MySQL重复插入数据,这篇文章会告诉你

    在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入.代码反复效率低下. 新建表格 CREATETABLE`per ...

  8. oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...

    是新朋友吗?记得先点蓝字关注我哦- 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 数据分析  人工智能+Python | 人工智能+物联网 进入数据时代,大数据技术成为互联网发 ...

  9. kettle分批处理大表数据_采用Kettle分页处理大数据量抽取任务

    需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面. 源表(Oracle):table1 目标表(MySQL):table2 数据量:20,000,000 思路: 由于服务器内存资 ...

最新文章

  1. 详解使用DockerHub官方的mysql镜像生成容器
  2. 面试官:你知道哪几种事务失效的场景?
  3. 《Web前端开发修炼之道》-读书笔记CSS部分
  4. 可信知识实证在UGC时代情报应用中的思考与探索
  5. Flink的累加器(Accumulator)应用
  6. Visual Basic之父回忆往事
  7. mssql 动态行转列。
  8. erlang安装报错
  9. 常用的C语言函数介绍
  10. 导出DMP文件实现数据库备份、数据迁移流程
  11. 自助装机配置专家点评2
  12. 网易微专业大数据工程师
  13. 影视后期行业概述、制作流程、岗位划分、薪资待遇、课程介绍详解
  14. C语言程序结构的特点
  15. 分布式tensorflow测试代码
  16. 还想贪小便宜?建议你先了解一下物联卡收费标准!
  17. 根据GEOHASH,查找附近的人,判断距离远
  18. Java8 stream流式表达式用法
  19. Node.js 中 __dirname 和 ./ 的区别
  20. intellij idea 合并分支到主分支,主分支代码同步到某一分支

热门文章

  1. 揭秘百度微服务监控:百度游戏服务监控的演进
  2. 缓存穿透与击穿问题解决方案
  3. 双十一秒杀架构模型设计实践!
  4. 你可能不知道的 IDEA 高级调试技巧
  5. 人人都会Vue,你的优势在哪里?
  6. Spring是怎样诞生的?
  7. 分享15个堪称神器的资源网站,让你万事无忧!
  8. 在计算机网络中光缆的工作原理是什么,计算机网络原理期中考试试卷(A)
  9. 死锁产生条件-环路等待条件
  10. java 最小化 api_Java的API设计实践