缓存

Facebook 如何管理150亿张照片

非 Y 不嫁゛ 提交于 2020-03-17 15:20:07
某厂面试归来,发现自己落伍了!>>> Facebook 的照片分享很受欢迎,迄今,Facebook 用户已经上传了150亿张照片,加上缩略图,总容量超过1.5PB,而每周新增的照片为2亿2000万张,约25TB,高峰期,Facebook 每秒处理55万张照片,这些数字让如何管理这些数据成为一个巨大的挑战。本文由 Facebook 工程师撰写,讲述了他们是如何管理这些照片的。 旧的 NFS 照片架构 老的照片系统架构分以下几个层: # 上传层接收用户上传的照片并保存在 NFS 存储层。 # 照片服务层接收 HTTP 请求并从 NFS 存储层输出照片。 # NFS存储层建立在商业存储系统之上。 因为每张照片都以文件形式单独存储,这样庞大的照片量导致非常庞大的元数据规模,超过了 NFS 存储层的缓存上限,导致每次招聘请求会上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook 主要依赖 CDN 的原因。为了解决这些问题,他们做了两项优化: # Cachr: 一个缓存服务器,缓存 Facebook 的小尺寸用户资料照片。 # NFS文件句柄缓存:部署在照片输出层,以降低 NFS 存储层的元数据开销。 新的 Haystack 照片架构 新的照片架构将输出层和存储层合并为一个物理层,建立在一个基于 HTTP 的照片服务器上,照片存储在一个叫做

spring--springCache

时光总嘲笑我的痴心妄想 提交于 2020-03-17 14:43:43
某厂面试归来,发现自己落伍了!>>> ###一、spring提供如下注解来支持spring cache ####1.@Cacheable 使用@Cacheable标记的方法,在执行该方法时,spring先去缓存中查询一次,如果查询到结果,直接返回结果(即该方法实际不会被执行);否则,执行该方法,将结果缓存。 @Cacheable可以标记在一个方法(表示该方法支持缓存)或标记在一个类上(该类的所有方法均支持缓存) 需要注意的是:支持缓存的方法在对象内部被调用时是不会触发缓存功能的 @Cacheable指定属性有: value 缓存空间名称 key 缓存的key,根据这个key去上述缓存空间中查询对象值 condition 缓存的条件,可以为空。可以使用spel编写返回true或false,只有true时才进行缓存 ####2.@CachePut 使用@CachePut标记的方法,在执行该方法时,每次都执行实际方法,将结果缓存。 ####3.@CacheEvict 使用@CacheEvict标记的方法,会在方法执行之前或之后移除springCache中某些元素 @CacheEvict指定的属性有: value:缓存空间名称 key:缓存的key condition:缓存条件 allEntries:是否清空所有缓存内容,缺省值为false,如果指定true,则方法调用后立即清除所有的缓存

我的面试之旅

▼魔方 西西 提交于 2020-03-17 13:30:45
腾讯一面 1.自我介绍!!!   下次一定要好好准备准备!!!   您好,我叫刘晶霞,来自华南理工大学广州学院软件专业,今天面试的岗位为前端实习生。 我认为我是一个比较善于沟通、性格开朗并且有较强的自我管理能力和学习能力的人。 在学习上能保持学习热情,成绩排名连续班级第一,全级前三。在工作中,能与同学进行有效沟通 并一起进步。我从18年开始接触前端知识,做过几次与前端有关的项目,对前端职业有比较浓厚的热 爱,也想经过此次面试将我在校所学的知识都有用武之地。 2.在这么多的项目中你最熟悉的是什么?   追问:能详细说一下吗?   我最熟悉的项目为:外聘教师月报表系统。   这个项目是给教务员和教务处所使用的一个系统。每个学院的教务员每个月登录此系统对该学院 的所有外聘教师进行一个教学时间的汇总,填好之后通过此系统提交到教务处,最终教务处可以对各个学院所提交的信息进行汇总。 3.能详细说明一下你是怎么通过设置请求头和ajax添加随机数解决了缓存问题吗?   追问:使用了标准http请求头之后还是会偶现数据没更新对吗?有没有考虑过可能是说因为你之前没有加过头,后面加了以后浏览器又把之前的头给缓存下来了呢?   让html不缓存?设置no-cache让html每次都去请求服务器,所以浏览器每次都能拿到最新的html资源。   首先一开始我们的项目没有进行任何有关缓存的操作

mysql 调整缓存 query_cache_type

柔情痞子 提交于 2020-03-17 06:42:38
https://www.linuxidc.com/Linux/2019-04/157969.htm https://www.cnblogs.com/JiangLe/p/5337383.html https://www.cnblogs.com/JiangLe/p/5337383.html Query Cache存储SELECT语句及其产生的数据结果,特别适用于表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生 变化的信息。如果此表上有任何写表操作发生,那么和这个表相关的所有缓存都将失效。 由于Query Cache需要缓存最新数据结果,因此表数据 发生任何变化(INSERT、UPDATE、DELETE或其他有可能产生数据变化的操作),都会导致Query Cache被刷新。对于更新压力大的数据库来说,查询缓存的命中率也会非常低。 但我们可以将参数 query_cache_type 设置成 DEMAND(按需及用)方式,这样对于默认的SQL语句不使用查询缓存,而对于确定要使用query cache的SQL语句, 可以用sql_cache的方法指定,例如: select sql_cache * from table_name; 或 select sql_cache count(*) from table_name; 以下是query_cache_type三个参数的含义

Memcached 汇总 不断更新

我的梦境 提交于 2020-03-17 06:10:45
1 . FQA http://home.cnblogs.com/group/topic/37133.html 2. Memcached安装指南(linux) http://www.cnblogs.com/caipuke/archive/2010/05/07/1729667.html 3. 参数说明 pid Process id of this server process (memcache服务器的进程ID) uptime Number of seconds this server has been running (服务器已经运行的秒数) time Current UNIX time according to the server (服务器当前的UNIX时间) version Version string of this server (memcache版本) pointer_size Current system pointer 当前操作系统的指针大小(32位系统一般是32bit) rusage_user Accumulated user time for this process (该进程累计的用户时间(秒:微妙)) rusage_system Accumulated system time for this process (该进程累计的系统时间(秒:微妙)) curr

js---post与get请求的区别

萝らか妹 提交于 2020-03-17 03:00:51
request获取请求参数 最为常见的客户端传递参数方式有两种: 浏览器地址栏直接输入:一定是GET请求; 超链接:一定是GET请求; 表单:可以是GET,也可以是POST,这取决与<form>的method属性值; GET请求和POST请求的区别: 1.效率 GET的意思是『得』,从服务器获取数据(也可以上传数据,参数就是),效率较高 POST的意思是『给』,但可以向服务器发送数据和下载数据,效率不如GET 2.缓存 GET 请求能够被缓存,默认的请求方式也是有缓存的 POST请求默认不会缓存 缓存是针对URL来进行缓存的,GET请求由于其参数是直接加在URL上-的,一种参数组合就有一种URL的缓存,可以根据参数来进行一一对应,重复请求是幂等的(不论请求多少次,结果都一样); 而POST请求的URL没有参数,每次请求的URL都相同,数据体(HTTPBody)可能不同,无法一一对应,所以缓存没有意义 3.安全性 GET的所有参数全部包装在URL中,明文显示,且服务器的访问日志会记录,非常不安全 POST的URL中只有资源路径,不包含参数,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全。所有涉及用户隐私的数据都要用POST传输 POST的安全是相对的,对于普通用户来说他们看不到明文,数据封装对他们来说就是屏障。但是对于专业人士,它们会抓包会分析

python基础学习day6

不问归期 提交于 2020-03-17 01:21:12
代码块、缓存机制、深浅拷贝、集合 id、is、== id: 可类比为身份号,具有唯一性,若id 相同则为同一个数据。 #获取数据的内存地址(随机的地址:内存临时加载,存储数据,当程序运行结束后,内存地址即被丢弃): i = 'a' print(id(i)) >>>2047746570672 print(id(i)) >>>2020558633392 print(id(i)) print(id(i)) >>>1908036008368 1908036008368 l1 = [1,2,3] l2 = [1,2,3] print(l1 == l2) >>>True #比较的是两边的值是否相等。 is 判断 id是否相同 (‘’==’‘判断 值是否相同 ) l1 = [1,2,3] l2 = [1,2,3] print(l1 is l2) >>>False #判断的是内存地址是否相同。 print(id(l1)) print(id(l2)) >>>2648963830216 2648963830728 l1 = [1,2,3] l2 = l1 print(l1 is l2) print(id(l1)) print(id(l2)) >>>True 2053863395784 2053863395784 s1 = 'iam' s2 = 'iam' print(s1 is s2) >>>True

浏览器缓存

风流意气都作罢 提交于 2020-03-16 20:17:48
1、基本介绍 浏览器缓存是指浏览器会存储用户最近请求过的资源,当用户再次请求同一资源时,浏览器可以直接从本地读取 这样,不仅可以提高浏览器的加载速度,也能减轻服务器的负载压力,可以说是一举两得 具体而言,浏览器的缓存策略分为两种,一种是强缓存(又称本地缓存),一种是弱缓存(又称协商缓存) 它们的行为会根据响应头和请求头的特定字段决定 强缓存与 expires 和 cache-control 字段有关 弱缓存与 etag / if-none-match 和 last-modified / if-modified-since 字段有关 2、本地缓存 本地缓存:当一个请求发生时,浏览器自己决定是否从缓存中读取数据 在浏览器第一次请求资源时,服务器会返回资源,并在响应中设置 expires 或 cache-control 字段 然后浏览器会把这些信息都缓存下来,当再次请求资源时,浏览器先不向服务器发送请求 而是根据该资源的 expires 或 cache-control 字段判断缓存的资源是否已经失效 如果缓存没有失效,那么直接读取缓存拿到资源 exprise :表示这个资源的失效时间,它的值是一个绝对时间的 GMT 格式字符串 cache-control :表示这个资源的失效时间,主要通过该字段的 max-age 进行设置,它的值是一个相对时间 此外,这个字段还能设置其它的值

jQuery2.x源码解析(缓存篇)

痞子三分冷 提交于 2020-03-16 20:11:17
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery自身的很多东西都依赖于缓存,比如事件、一些中间变量、动画等。同时他还为用户提供接口了使用缓存的接口,方便用户在元素节点上保存自己的数据,并且帮助用户解决直接把数据保存到DOM元素是可能引起的内存泄漏、命名冲突等问题。 同时,html5提出了一种通过属性缓存元素数据的功能,就是 data-*属性 ,他可以以字符串的形式保存数据,并且不会和元素固有属性冲突。jQuery的缓存提供了访问data-*的接口,与html5标准结合更加紧密,更加规范。 提问:jQuery不同版本的缓存实现原理是什么? 答:jQuery1.x与jQuery2.x、jQuery3.x是不同的。 jQuery1.x系列中,需要兼容ie6、ie7等早期的浏览器,在ie6、ie7这样的浏览器中,根据艾伦的博客,我们可以知道DOM元素与js对象相互引用,是会引起浏览器的内存泄漏问题。所以 jQuery1.x中,最大的问题是要防止在ie6、ie7浏览器上出现内存泄漏。为了避免DOM元素与js对象相互引用而造成的内存泄漏,jQuery必须从设计解决对象循环引用的问题。所以jQuery1.x将需要缓存到元素上的数据