关于哈希值
通俗来讲,哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作者,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。
简单的做法是对缓存的key进行哈希计算,得到的值进行取模计算,所得到的余数,便是缓存的服务器编号
hash % 机器数 = 余数
当机器数为3时无论值为多少,其余数永远只有0,1,2三种情况
那么根据余数,我们给服务器进行编号s0,s1,s2,余数为0的放置于s0服务器上,1,2同理。
这样我们就将三万张的缓存均分成三份存放与三台缓存服务器中
因为对同一张进行哈希计算时,所得到的哈希值是不变的,所以当需要访问时,只要再次进行哈希计算和取模计算,就能获取到存放于哪台服务器,便可以去该服务器中查找满足了我们的需求。而这种算法也称之为哈希算法
这其中有一个问题,那便是如果我增加一台服务器呢
可以预见的是,当增加一台服务器服务器数变成了4而余数也出现了4种情况
这时向s2的服务器查询时,无法读取到,这导致了程序无法从缓存服务器中读取数据,这时程序就会向后端服务器请求,而大量的缓存同时失效,会导致所有请求都指向后端服务器,这会引起后端服务器的崩溃。
这是就要引入一致性哈希算法
还是同样的三个缓存服务器,这次我们将哈希值对2 32取模,所得到的数一定是1到2 32之间的一个整数
然后我们想像一个圆环,其上的每一个点都代表1到2^32之间的一个整数,而这个圆环也被称为hash环
之后我们对服务器A进行取模计算,这样算出来的整数肯定在1到2^32之间,将这个整数代表为服务器A,并且我们可以将这个整数映射到哈希环上,同样的道理我们处理另外两个服务器,这时三个服务器都被映射到了哈希环上,对于我们也将他映射到哈希环上
那么我们只要从的哈希值开始,沿顺时针在哈希环上查找,遇到的第一个服务器便是缓存所在的服务器
这时哪怕新添加一个服务器在哈希环上,我门所丢失的缓存数据也只是新添加的服务器到逆时针方向遇到的第一个服务器这部分数据,而这样仍然有大部分缓存在缓存服务器中可以被查找到,这样可以帮助后端服务器分担大部分压力,不会使服务器崩溃,而这部分丢失的缓存数据,之后重新在后端加载便可以了
这又引入了另一个问题,哈希偏斜
我们无法确保三个服务器在哈希环上为均分的状态,很有可能其中一台服务器分到了很大部分而另两台分到了很少的部分,这样同样会有后端服务器崩溃的隐患
我们可以添加很多虚拟结点同一个服务器我们分出许多虚拟节点,映射在哈希环上,哈希环上的节点越多,缓存被均分的概率便越大,这样可以尽可能的保证缓存在服务器上是接近理想均分的状态,避免了哈希偏斜的问题
1、在浏览器打开需要保存的网页;
2、在当前页面点鼠标右键->另存为,选择保存的目录确认保存,系统会自动会把网页和都保存下来,如下图:
部分浏览器清除缓存方法:
火狐浏览器Firefox
要清空 Mozilla Firefox 的缓存,请按以下步骤操作:
1、单击浏览器顶部的"Tools"(工具)菜单,并选 择"Options"(选项);
2、单击"Privacy"(隐私);
3、单击"Cache"(高速缓存)旁边的"Clear"(清空缓存);
4、单击"OK"(确定)。
谷歌浏览器chrome
要清空chrome的缓存,请按以下步骤操作:
1、 点击小扳手图标;
2、选择“选项”;
3、选择“个人资料”;
4、在浏览数据中,点击“清除浏览数据”;
5、弹出小窗 口点击“清除浏览数据”。
360浏览器
要清空360的缓存,请按以下步骤操作:
1、单击浏览器顶部的"工具"菜单,并选择"IE选项";
2、在常规下选择删除浏览的历史记录;
3、选中 Internet 临时文件复选框;
4、点击删除按钮;
5、将文件删除后,点击确定。重启浏览器。
钉钉聊天过程中发送的和聊天记录一样是保存在云端服务器的,有效期为360天,不占用企业钉盘或聊天的2G存储空间,可以一直向上翻缓存下来,也可以下载保存到本地。
若聊天窗口点击找不到历史,可能是之前没有缓存下来或缓存文件被清理了,可以在聊天窗口一直往上翻重新缓存下来查看。
http缓存分为强缓存和协商缓存。
强缓存并不会请求服务器,同时响应码会返回200。比如使用的配置cache-control:max-age=1200
在项目中缓存等静态资源常用的是协商缓存。
在第一次请求静态资源的时候,服务器会根据资源内容生成etag, 在响应头里返回给浏览器,在下次请求的时候浏览器会在头部配置If-None-Match,携带etag来向服务器询问资源是否发生改变。若是没有发生改变会返回304,这样浏览器就不会从服务器重新获取资源而是直接使用本地缓存。采用etag可以解决文件名没有发生变化但是文件内容被修改的问题。
通常会跟cache-control: no-cache 在一起配合使用。no-cache是指浏览器可以缓存响应,但是必须要向原始服务器提交验证请求。
参考:
https://wwwimpervacom/learn/performance/cache-control/
https://blogcsdnnet/aimeimeiTS/article/details/105731709
https://wwwzooteam/article/http-cache
https://imwebio/topic/5795dcb6fb312541492eda8c
https://aotuio/notes/2016/09/22/http-caching/indexhtml
0条评论