缓存服务器

squid缓存服务器——传统模式

允我心安 提交于 2020-03-26 10:24:26
一、web代理的工作机制 两台服务器 传统模式中,客户端知道自己是一个代理 透明模式中,不需要对客户端进行设置 二、代理的基本类型 传统代理:适用于internet,需明确指明服务端 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向给代理服务器处理 三、使用代理的好处 提高web’访问速度 隐藏客户机的真实IP地址 四、实操演示传统代理 web端IP:192.168.247.160 squid端IP:192.168.247.206 win10客户端IP:192.168.247.200 1.修改主机名,便于识别 [root@lamp ~]# hostnamectl set-hostname squid [root@lamp ~]# su [root@squid ~]# [root@nginx ~]# hostnamectl set-hostname web [root@nginx ~]# su [root@web ~]# squid为了缓存页面对象,需要设置缓存空间,后面会设置 2.编译安装squid 首先解压squid,安装编译工具 [root@squid ~]# mkdir /abc mkdir: cannot create directory ‘/abc’: File exists [root@squid ~]# mount

当程序执行一条查询语句时,MySQL内部到底发生了什么? (说一下 MySQL 执行一条查询语句的内部执行过程?

非 Y 不嫁゛ 提交于 2020-03-26 09:42:09
先来个最基本的总结阐述,希望各位小伙伴认真的读一下,哈哈: 1)客户端(运行程序)先通过 连接器 连接到MySql服务器。 2)连接器通过数据库权限身份验证后,会先查询数据库缓存是否存在(之前执行过相同条件的SQL查询),如果有会直接返回缓存中的数据。如果没有则会进入分析器。 3)进入 分析器 后会对查询语句进行词法语法的分析,判断该查询语句SQL是否存在语法错误,如果存在查询语法词法错误,会直接返回给客户端错误,如果正确则会进入优化器。 4) 优化器 会对查询语句进行优化处理:例如:如果一条语句用到了多个索引会判断哪个索引性能更好。 5)最终会进入 执行器 ,开始执行查询语句直到查询出满足条件的所有数据,然后进行返回。 下面我们详细的来说一 下: 假如说我们有一张 User 表 ,表里只有一个字段 ID ,当我们执行下边这条SQL语句时: mysql> select * fron T where ID = 10; 在我们眼中能看到的只是输入一条 SQL语句,返回一条查询结果,却不曾知道这条SQL在MySQL的内部经历了什么,下面我们来一步一步的分析一下;如下是MySQL的基本架构图,从图中可以清楚的看到SQL在MySQL中各个功能模块执行的过程: 大体来说,MySQL可以分为 Server层 和 存储引擎 两部分。 Server层:包括连接器、分析器、查询缓存、优化器、执行器等。

Redis 的键命令、HyperLogLog 命令、脚本命令、连接命令、服务器命令

北战南征 提交于 2020-03-26 09:33:19
Redis 的键命令、HyperLogLog 命令、脚本命令、连接命令、服务器命令 Redis 的键命令 Redis 的键命令主要用于管理 Redis 的键,如删除键、查询键、修改键及设置某个键等。 1. EXISTS 命令:判断键是否存在 2. KEYS 命令:查找键 KEYS 命令用于按照指定的模式(pattern)查找所有的 key。参数 pattern 类似于正则表达式。 ● KEYS*:表示匹配查找数据库中的所有 key。 ● KEYS r?dis:表示匹配 radis、redis、rxdis 等。 ● KEYS r*dis:表示匹配 rdis、redis、reeedis 等。 ● KEYS r[ae]dis:表示匹配 radis 和 redis,但是不会匹配 ridis。 遇到特殊符号需要使用「\」隔开(转义)。 3. OBJECT 命令:查看键的对象 OBJECT 命令用于从内部查看给定 key 的 Redis 对象。该命令通常用在除错或者为了节省空间而对 key 使用特殊编码的情况下。如果要用 Redis 来实现与缓存相关的功能,则可以使用 OBJECT 命令来决定是否清除 key。 OBJECT 命令有如下子命令: ● OBJECT REFCOUNT key 用于返回给定 key 引用所存储的值的次数,多用于除错。 ● OBJECT ENCODING key

Redis常用问题

旧巷老猫 提交于 2020-03-26 07:49:08
总结经常遇到的问题:   1、redis如何保证数据不丢失     a、主从实时同步(除非主服务器挂了),数据实时同步     b、写log文件(短暂丢失)   2、雪崩+穿透(用乐观锁)     http://www.cnblogs.com/zhangweizhong/p/6258797.html 高并发(要用到缓存) 缓存雪崩   缓存雪崩是由于原有缓存失效(过期),新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。   1. 碰到这种情况,一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。( 只有一个请求去同步数据,其他的请求去排队不读数据库 ) public object GetProductListNew() { const int cacheTime = 30; const string cacheKey = "product_list"; const string lockKey = cacheKey; var cacheValue = CacheHelper.Get(cacheKey); if (cacheValue != null) { return cacheValue; } else { lock (lockKey) { cacheValue =

缓存2.1——缓存与数据库双写一致性

偶尔善良 提交于 2020-03-25 20:25:55
  你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?   一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统 不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即: 读请求和写请求串行化 ,串到一个 内存队列 里去。   串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 一、Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候 , 先删除缓存,然后更新数据库 。 为什么是删除缓存,而不是更新缓存?   原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。   另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于 比较复杂的缓存数据计算的场景 ,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新

HTTP 3 代理、网关、隧道

本秂侑毒 提交于 2020-03-25 17:28:56
5. 与HTTP协作的Web服务器 一台Web服务器可搭建多个·独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率。 用单台虚拟主机实现多个域名: HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。比如,提供Web托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不同的网站。这是因为虚拟主机(virtual host)的功能。 即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。 客户端使用HTTP协议访问服务器时,会经常采用类似www.hackr.jp这样的主机名和域名。 在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站,当请求发送到服务器时,已经是以IP地址形式访问了。 所以,如果一台服务器内托管了多个域名时,当收到请求时就需要搞清楚究竟要访问哪个域名。 在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。 通信数据转发程序:代理、网关、隧道: 代理: 代理是一种有转发功能的应用程序,作用于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。 网关:

浏览器缓存

这一生的挚爱 提交于 2020-03-25 11:19:46
3 月,跳不动了?>>> 缓存的分类有很多种,CDN缓存、数据库缓存、代理服务器缓存和浏览器缓存。造成强制缓存的字段有两个Expires和Cache-Control。 Expires Expires: Thu, 10 Nov 2017 08:45:11 GMT 是一个绝对时间,在响应消息头中,设置这个字段之后,就可以告诉浏览器,在未过期之前不需要再次请求。 Cache-Control 该字段表示资源缓存的最大有效时间,在该时间内,客户端不需要向服务器发送请求,相对时间, max-age:即最大有效时间,在上面的例子中我们可以看到 no-cache:表示没有缓存,即告诉浏览器该资源并没有设置缓存 s-maxage:同max-age,但是仅用于共享缓存,如CDN缓存 public:多用户共享缓存,默认设置 private:不能够多用户共享,HTTP认证之后,字段会自动转换成private。 ` Cache-Control: max-age=2592000` 对比缓存 先从缓存中获取对应的数据标识,然后向服务器发送请求,确认数据是否更新,如果更新,则返回新数据和新缓存;反之,则返回304状态码,告知客户端缓存未更新,可继续使用。 缺点: 1. 如果资源更新的速度是秒以下单位,那么该缓存是不能被使用的,因为它的时间单位最低是秒。 2.如果文件是通过服务器动态生成的

微信小程序新闻网站详情页

十年热恋 提交于 2020-03-24 16:52:25
扩展运算符的巧妙应用 这个template模板,绑定的数据带item前缀 那么使用模板的时候,也必须保证是item data帮绑定数据用双花括号包住item 还有wx:for-item默认也是item,因此可省略 这样带有item不利于代码复用,解决方法: 将template模板中的item前缀都去掉 然后使用模板时,在数据绑定前加...(ES6语法) 这样的好处是: 可以改变wx:for-item的属性值和data属性值(这两个必须保持一致),但不需要再去修改模板中的数据前缀 依然能够正常显示 组件的自定义属性及获取属性 创建新闻详情页 给新闻绑定点击事件,注意template和block是不能绑定事件的,所以我在template外面包裹了一个view,然后在view上绑定事件 在函数里定义好跳转到新闻详情页 查看数据可以看到,每篇新闻都有对应的postId 给每篇新闻自定义属性,传递postId 小程序中,自定义属性必须以data-开头,否则是无效的 可以看到已经传递成功 在js中使用小程序的事件对象获取到元素的属性 posts.js 在currentTarget--dataset中,存放了自定义属性 补充一个知识点 如果你设置的自定义属性名是用连字符拼接 可以看到实际结构是全部会转小写的,用连字符拼接 而在js中通过事件对象获取到属性,则会转换为驼峰形式 先静后动

以淘宝为例,解析大型电商服务端架构!

廉价感情. 提交于 2020-03-24 11:28:38
3 月,跳不动了?>>> 作者:若汐缘 https://www.jianshu.com/p/796f488fd134 前言 以淘宝网为例,简单了解一下大型电商的服务端架构是怎样的。如图所示 最上面的就是安全体系系统,中间的就是业务运营系统,包含各个不同的业务服务,下面是一些共享服务,然后还有一些中间件,其中 ECS 就是云服务器,MQS 是队列服务,OCS 是缓存等等,右侧是一些支撑体系服务。 除图中所示之外还包含一些我们看不到的,比如高可用的体现。淘宝目前已经实现多机房容灾和异地机房单元化部署,为淘宝的业务也提供了稳定、高效和易于维护的基础架构支撑。 这是一个含金量非常高的架构,也是一个非常复杂而庞大的架构,当然这个架构不是一天两天演进成这样的,也不是一开始就设计并开发成这样的,对于初创公司而言,很难在初期就预估到未来流量千倍、万倍的网站架构会是怎样的状况,同时如果初期就设计成千万级并发的流量架构,也很难去支撑这个成本。 因此一个大型服务系统,都是从小一步一步走过来的,在每个阶段找到对应该阶段网站架构所面临的问题,然后不断解决这些问题,在这个过程中,整个架构会一直演进,同时内含的代码也就会演进,大到架构、小到代码都是在不断演进和优化的。所以说高大上的项目技术架构和开发设计实现不是一蹴而就的,这是所谓的万丈高楼平地起。 单机架构 从一个小网站说起,一般来说初始一台服务器就够了

以淘宝为例,解析大型电商服务端架构!

早过忘川 提交于 2020-03-24 11:26:39
作者:若汐缘 https://www.jianshu.com/p/796f488fd134 前言 以淘宝网为例,简单了解一下大型电商的服务端架构是怎样的。如图所示 最上面的就是安全体系系统,中间的就是业务运营系统,包含各个不同的业务服务,下面是一些共享服务,然后还有一些中间件,其中 ECS 就是云服务器,MQS 是队列服务,OCS 是缓存等等,右侧是一些支撑体系服务。 除图中所示之外还包含一些我们看不到的,比如高可用的体现。淘宝目前已经实现多机房容灾和异地机房单元化部署,为淘宝的业务也提供了稳定、高效和易于维护的基础架构支撑。 这是一个含金量非常高的架构,也是一个非常复杂而庞大的架构,当然这个架构不是一天两天演进成这样的,也不是一开始就设计并开发成这样的,对于初创公司而言,很难在初期就预估到未来流量千倍、万倍的网站架构会是怎样的状况,同时如果初期就设计成千万级并发的流量架构,也很难去支撑这个成本。 因此一个大型服务系统,都是从小一步一步走过来的,在每个阶段找到对应该阶段网站架构所面临的问题,然后不断解决这些问题,在这个过程中,整个架构会一直演进,同时内含的代码也就会演进,大到架构、小到代码都是在不断演进和优化的。所以说高大上的项目技术架构和开发设计实现不是一蹴而就的,这是所谓的万丈高楼平地起。 单机架构 从一个小网站说起,一般来说初始一台服务器就够了,文件服务器