缓存服务器

Redis

筅森魡賤 提交于 2019-12-04 20:39:07
1. 为啥在项目里要用缓存呢 用缓存,主要是俩用途,高性能和高并发 高性能 image.png 高并发 image.png 2.介绍 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库(关系型数据库)遵循 ACID 规则。而 Nosql(非关系型数据库)(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式,而分布式一般遵循 CAP 定理。 CAP理论 C:consistency(一致性) A:avalibility(可用性) P:Partition(分区)-tolerence to partition(分区容忍度) 分区:一个分布式系统,网络不通讯,导致连接不通,系统被分割成几个数据区域 原因:数据不连通了,产生数据分区 影响: 查还好一点 数据修改时,必须要求数据一致--加锁,实现数据一致性【需求要求数据一致性】 数据修改时,可以数据不一致--不用加锁【需求不要求数据一致性】 分区容忍度 数据的一致性要求高,容忍度高,加锁 数据的一致性要求低,容忍度低,可以不加锁 预期结果,保持数据的一致 可用性 请求在一定时间段内都应该有响应 为了解决锁一直加着 CP理论:【一致性+分区

大型网站的演化之路——读《大型网站技术架构》

百般思念 提交于 2019-12-04 20:35:32
大型网站的演化之路——读《大型网站技术架构》 ____ author:姚毛毛的博客 & 妖生 01 大型网站or软件有什么特点? 高并发、大流量,微信都日活10亿了 7×24的高可用,俗称的4个9(99.99%) 海量数据的存储与管理 全国甚至全球的用户分布,复杂网络 安全环境很差 需求变更频繁,需要快速迭代 最后,是渐进式的发展。 所有大型网站都是从一个小网站发展起来的。 好的网站与复杂的架构都是演化来的,而不是一开始就设计好的。 当年才出发的时候,谁也想不到微信可以日活十亿,最初的时候肯定也没有成千上万的服务器集群对不对。 02 最初与第一次的演化之路:应用与数据的分离 我们最初的小型网站是什么样的? 从逻辑上看,一个应用服务、一个数据库;从物理上看,一台服务器就搞定了。 在用户量增多后,我们开始需要将应用跟数据库分离。 那应用跟数据库所需要的服务器配置是一样的吗? 当然是NO。 应用需要处理更多的业务逻辑,所以需要好一点多一点的CPU。 数据库则要快速检索磁盘跟放置数据缓存,因此需要快一点的磁盘和大一点的内存。 当然,所有演进的目的都是想更高、更快、更强。只是有时候没法做到面面俱到,需要取舍。 03 第二次演进:缓存优化 恭喜你,网站优化了一次,体验变好了,用户也开始增多了,可是烦恼的又来了。 用户的增多,带来的数据库压力也大了,怎么办?

ASP.NET Core中使用Cache缓存

喜夏-厌秋 提交于 2019-12-04 20:22:13
原文: ASP.NET Core中使用Cache缓存 ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性。 缓存对不经常更改的数据效果最佳。 缓存生成的数据副本的返回速度可以比从原始源返回更快。 应用程序应进行编写和测试到永远不会依赖于缓存的数据。 ASP.NET Core 支持多种不同的缓存。 最简单的缓存基于IMemoryCache,它表示存储在 Web 服务器内存中的缓存。 在服务器场的多个服务器运行的应用程序应确保使用内存中缓存时,都粘滞会话。 粘性会话可确保来自客户端的后续请求都转到同一台服务器。 例如,Azure Web 应用使用应用程序请求路由(ARR) 将所有的后续请求路由到同一台服务器。 Web 场中的非粘性会话需要分布式缓存以避免缓存一致性问题。 对于某些应用,分布式的缓存可以支持更高版本向外缩放比内存中缓存。 使用分布式缓存可将缓存内存卸载到外部进程。 内存中缓存可以存储任何对象;分布式缓存接口仅限于 byte[] 。 内存中和分布式缓存将缓存项存储为键 / 值对。 使用IMemoryCache: 1、在使用 IMemoryCache 之前需要添加引用,在程序包管理控制台中执行命令安装依赖包: 1 PM> Install-Package Microsoft.Extensions

《JAVA核心知识》学习笔记(6. Spring 原理)-5

元气小坏坏 提交于 2019-12-04 18:52:15
它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1.3. 面向切面 6.1.1.4. 容器 6.1.1.5. 框架集合 6.1.7. Spring IOC 原理 6.1.7.1. 概念 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供 了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务 6.1.7.2. Spring 容器高层视图 Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的 Bean 配 置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准 备就绪的运行环境。 其中 Bean 缓存池为 HashMap 实现 6.1.7.3. IOC 容器实现 BeanFactory-框架基础设施 BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身; ApplicationContext

前端知识集锦1

雨燕双飞 提交于 2019-12-04 18:00:50
原文链接: 征服前端面试 ,仅供学习使用 前端知识集锦2 1. JavaScript 1.1 原型 我们创建的每一个函数,都可以有一个prototype属性,该属性指向一个对象。这个对象,就是原型。 当我们在创建对象时,可以根据自己的需求,选择性的将一些属性和方法通过prototype属性,挂载在原型对象上。而每一个new出来的实例,都有一个proto属性,该属性指向构造函数的原型对象,通过这个属性,让实例对象也能够访问原型对象上的方法。因此,当所有的实例都能够通过proto访问到原型对象时,原型对象的方法与属性就变成了共有方法与属性。 // 声明构造函数 function Person(name, age) { this.name = name; this.age = age; } // 通过prototye属性,将方法挂载到原型对象上 Person.prototype.getName = function() { return this.name; } var p1 = new Person('tim', 10); var p2 = new Person('jak', 22); console.log(p1.getName === p2.getName); // true 通过图示我们可以看出,构造函数的prototype与所有实例对象的proto都指向原型对象

报表性能优化方案之数据集缓存与共享

♀尐吖头ヾ 提交于 2019-12-04 17:07:25
1. 问题描述 对于大数据量报表,若每次直接从数据库中查询数据,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低了报表的执行速度,为此FineReport提供了数据集缓存与共享功能。 FineReport可先将其数据集查询的结果缓存下来,对于缓存下来的数据,再次使用到相同数据集时,无需再次连接数据库重新查询数据,直接使用缓存下来的结果,即使用FineReport的数据集共享机制,达到资源复用,减少取数时间从而提高了报表的展现速度。 2. 数据集缓存 缓存分为缓存至内存和缓存至磁盘。 2.1 缓存至内存 设置方法:默认的就是使用内存缓存即所有数据都保存在内存中,在数据库查询窗口可以看到,如下图: 设置后的效果:当执行数据集时就会在将此记过缓存至内存中,下次在执行此数据集时,会直接从内存缓存中取数。 优缺点:空间资源有限,但效率很高,取数速度快。 什么情况使用:一般使用率高,且数据量不算太大的报表,可直接使用内存缓存。 2.2 缓存至磁盘 设置方法:点击下拉框选择缓存至磁盘当记录大于,并设置行数,如下: 缓存至磁盘,即将数据缓存到服务器的磁盘中,默认是在C:\Documents and Settings\Administrator\.FineReport8.0\cache(windows操作系统)下。 注:如启用了磁盘缓存,发现系统目录下没有cache文件夹,不要感到惊讶

FR优化

自古美人都是妖i 提交于 2019-12-04 17:06:38
数据集缓存: 对于大数据量报表,若每次直接从数据库取数,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低报表的执行速度,为此 FineReport 提供了数据集缓存功能。 FineReport 可先将其数据集查询的结果缓存下来,对于缓存下来的数据,再次使用到相同数据集时,无需再次连接数据库重新查询数据,直接使用缓存下来的结果,即使用 FineReport 的数据集共享机制,达到资源复用,减少取数时间从而提高了报表的展现速度。 2. 缓存数据有效范围 如果不同模板的某个同名数据集 SQL 查询语句和传入参数相同,则所有模板使用同一个数据集缓存。 如果不同模板的某个同名数据集 SQL 查询语句和传入参数都不同,则会生成多个不同的数据集缓存。 注:cpt 模板和 frm 表单都支持数据集缓存。 3. 数据集缓存方式 数据集缓存分为缓存至内存和缓存至磁盘这两种方式。不同点在于数据集缓存数据的存放位置不同。 3.1 缓存至内存 1)设置方法: 数据集缓存默认缓存至内存,在数据库查询窗口下拉框选择所有记录都保存在内存中,如下图所示: 2)设置后的效果: 当执行数据查询时就会将查询所得数据缓存至内存中,下次执行此数据集数据查询时,会直接从内存缓存中取数。 3)优缺点: 空间资源有限,但效率很高,取数速度快。 4)使用场景: 一般 来源: CSDN 作者: Share-Get 链接:

HTTP和HTTPS概念

爷,独闯天下 提交于 2019-12-04 15:05:06
HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。 SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。 HTTP 的端口号为 80 , HTTPS 的端口号为 443 HTTP工作原理 网络爬虫抓取过程可以理解为 模拟浏览器操作的过程 。 浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示您选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。 HTTP的请求与响应 HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息 浏览器发送HTTP请求的过程: 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。 当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件

缓存

一笑奈何 提交于 2019-12-04 14:58:44
缓存的工作原理 客户端可以自动保存已访问过得文档的副本,这些副本就是所谓的缓存。 当客户端再向同一URL发送请求时,那么就直接从缓存中将文件取出来,而不用再重新发送请求。 优点 1.减少了冗余的数据传输,节省流量 2.缓解服务器带宽瓶颈的问题,服务器可以节省更多的带宽 3.降低了对服务器的资源消耗和运行要求 4.降低了由于远距离造成的加载延迟 与缓存相关的消息头 1.Cache-Control 作用:从服务器将文档传来之时起,认为 新鲜 的秒数 取值:秒数 60/360/3600 如果取值为0或no-cache,表示每次都要重新刷新网页 2.Expires 作用:明确指定缓存的过期时间 取值:格林尼治标准时间(GMT) Fri,25 Aug 2017,08:00:00 GMT 0表示不需要缓存 如何在网页中设置消息头 在meta标记中完成消息头的设定 1.http-equiv:指定消息头的名称 2.content:指定消息头对应的内容 <head>   <meta charset="utf-8">   <meta http-equiv="Content-type" content="text/html"> </head> DOM操作 DOM:Document Object Model 文档对象模型 作用:让JS有能力操作页面的元素 1. 使用JS获取页面上的某个元素 <div id

一个经典面试题:如何保证缓存与数据库的双写一致性?【华为云技术分享】

假如想象 提交于 2019-12-04 13:37:10
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/devcloud/article/details/90440921 欢迎添加华为云小助手微信(微信号: HWCloud002 或 HWCloud003 ),输入关键字“ 加群 ”,加入华为云线上技术讨论群;输入关键字“ 最新活动 ”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩! 只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。 串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上请求。 Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存?