A. 系统中IE缓存文件是怎样产生
浏览网站的时候自动创建的,因为有的网站是多次访问的,所以将网站的内容保存到机器内,会加快多次打开的网站的打开速度,如果你担心泄露你的个人呢信息,可以设置关闭IE以后自动删除IE缓存文件,方法如下
打开IE--“工具”菜单--Internet选项--“高级”选项卡
在下面的窗口里找到“安全”标签--“关闭浏览器时清空Internet临时文件夹”打上对勾!
重启IE一下就OK了
B. 在C#中如何创建一个缓存呢高手求解哈!
在2个主程序窗体中调用这个缓存中的用户名和密码。这个技术不是缓存,是保存。
用 Session 或者Cookie即可实现。
登录窗体:session("户名和密码") = "输入的用户名和密码";
2个主程序窗体中调用这个用户名和密码: a=session("户名和密码") ;
C. 浏览器缓存的方式和类型(笔记)
浏览器缓存只是计算机缓存的一种
1.内存缓存
将数据存到内存
2.代理服务器缓存
就是个自己找的中介。你拿东西先找中介,中介找房东,房东给中介,中介又给你。比如你需要房子钥匙,房东把钥匙放在中介那,你直接从中介那里拿钥匙。
3.CDN缓存
将数据存到CDN服务器。CDN也是个中介,不过这个中介是根据中介的忙碌程度(CDN服务器忙碌程度)、跟你的距离(CDN服务器和你的距离)自动给你分配的。
4.浏览器缓存( 我是个前端,只关注浏览器缓存。 )
根据HTTP协议决定要不要缓存,以什么方式缓存,缓存到哪(内存还是硬盘等)。
浏览器缓存是将浏览器请求过的数据(资源文件)保存到电脑上。需要再次使用的时候,直接从电脑上获取保存的数据(资源文件),这就是浏览器缓存
1.减少网络请求,节省流量
2.减轻服务器压力
3.资源加载速度快了,前端性能就更好了
1.Server Worker
还没搞懂,搞懂了再来写。
2.Memory Cache
内存中的缓存,关闭页面进程就释放内存
3.Disk Memory
硬盘中的缓存,不主动清理就一直在
4、Push Cache
推送缓存,是HTTP/2的内容,并没有严格执行HTTP头部的缓存指令。在Server Worker、Memory Cache、Disk Cache都没有命中的时候,它会被使用。在Session中存在,Session结束就会被释放,缓存时间短暂。
1.先去内存查找,找到直接加载
2.内存找不到,硬盘中找,找到直接加载
3.硬盘找不到进行网络请求
4.把请求获取的资源再缓存到硬盘和内存
1.强缓存
控制强制缓存的字段分别是Expires和Cache-Control,Cache-Control优先级比Expires高
-Expires设置一个绝对时间的GMT格式的时间字符串,这个是资源失效时间( 客户端的时间小于Expires的值,缺陷就是客户端的时间被改变就有问题 ),在这个时间之前都直接读取缓存。
-Cache-Control替代Expires,它利用的是相对时间,利用header信息字段的max-age值判断。
2.协商缓存
-Last-Modified/If-Modified-Since
Last-Modified:浏览器向服务器发送资源最后的修改时间
If-Modified-Since:当资源过期时,发现响应头具有Last-Modified声明,则再次向服务器请求时带上头if-modified-since,表示请求时间。服务器收到请求后,发现有if-modified-since则与被请求资源的最后修改时间进行对比(Last-Modified),若最后修改时间较新,说明资源又被改过,则返回最新资源,返回200;若最后修改时间较小,说明资源无新修改,返回304 ,使用缓存文件。
缺点:单位是秒,一秒内多次改变会认为没过期
-ETag/If-None-Match
ETag:由服务器生成返回给前端,帮助服务器控制web端的缓存验证,服务器会生成并且返回当前资源文件的一个唯一标识
If-None-Match:当资源过期时,发现响应头具有Etag声明,则再次向服务器请求时带上头if-none-match(唯一标识Etag值)。服务器收到该请求后,发现有If-None-Match则根据If-None-Match的字段值与该资源在服务器的Etag值做对比,一致则返回304,代表资源无更新,继续使用缓存文件;不一致则重新返回资源文件,状态码为200。
1.强缓存不发请求,协商缓存会发请求给服务器确认有没有过期
2.强缓存文件更新浏览器不知道,协商缓存更新浏览器能实时知道
1.点击浏览器的刷新按钮时,全部走缓存
2.F5或者鼠标右键刷新强制缓存失效,不影响协商缓存
3.CTRL+F5影响强制缓存和协商缓存都失效
D. yii怎么生成一个XXX.html的缓存文件
可以用memcache实现缓存组件
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'system.caching.CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
);
三、页面缓存
页面缓存指的是缓存整个页面的内容。页面缓存可以发生在不同的地方。例如,通过选择适当的页面头,客户端的浏
览器可能会缓存网页浏览有限时间。 Web 应用程序本身也可以在缓存中存储网页内容。 在本节中,我们侧重于后一
种办法。
页面缓存可以被看作是 片段缓存 (/doc/guide/caching.fragment) 一个特殊情况 。 由于网页内容是往往通过应用布局来生
成,如果我们只是简单的在布局中调用 beginCache() 和 endCache() ,将无法正常工作。这是因为布局 在
CController::render() 方法里的加载是在页面内容产生之后。
缓存整个页面,我们应该跳过产生网页内容的动作执行。我们可以使用 COutputCache 作为动作 过滤器
( /doc/guide/basics.controller#filter )来完成这一任务。下面的代码演示如何配置缓存过滤器:
[php] view plainprint?
public function filters()
{
return array(
array(
'system.web.widgets.COutputCache',
'ration'=>100,
'varyByParam'=>array('id'),
),
);
}
上述过滤器配置会使过滤器适用于控制器中的所有行动。我们可能会限制它在一个或几个行动通过使用插件操作器。
更多的细节中可以看过滤器( /doc/guide/basics.controller#filter ) 。
提示 : 我们可以使用 COutputCache 作为一个过滤器 , 因为它从 CFilterWidget 继承过来 , 这意味着它是一个工具 (widget)
和一个过滤器。事实上, widge 的工作方式和过滤器非常相似:工具 widget ( 过滤器 filter) 是在 action 动作里的内容执
行前执行,在执行后结束。
E. 微信缓存是怎么产生的
微信在正常使用过程中会产生缓存,腾讯手机管家支持删除QQ和微信的缓存垃圾,文字和语音聊天记录暂不支持直接删除。微信过程中的图片记录,可以登录手机管家--清理加速--右上角手机瘦身--微信文件进行选择性的删除。
F. 缓存-redis 三种模式搭建和运行原理
标签: redis 缓存 主从 哨兵 集群
本文简单的介绍redis三种模式在linux的安装部署和数据存储的总结,希望可以相互交流相互提升。
对于Centos7在安装redis之前需要进行一些常用工具的安装:
关闭防火墙
正式安装redis
在redis进行maketest时候会出现一系列的异常,有如下解决方案:
用redis-server启动一下redis,做一些实验没什么意义。
要把redis作为一个系统的daemon进程去运行的,每次系统启动,redis进程一起启动,操作不走如下:
RDB和AOF是redis的一种数据持久化的机制。 持久化 是为了避免系统在发生灾难性的系统故障时导致的系统数据丢失。我们一般会将数据存放在本地磁盘,还会定期的将数据上传到云服务器。
RDB 是redis的snapshotting,通过redis.conf中的save配置进行设置,如 save 60 1000:
AOF 是以appendonly方式进行数据的储存的,开启AOF模式后,所有存进redis内存的数据都会进入os cache中,然后默认1秒执行一次fsync写入追加到appendonly.aof文件中。一般我们配置redis.conf中的一下指令:
AOF和RDB模式我们一般在生产环境都会打开,一般而言,redis服务挂掉后进行重启会优先家在aof中的文件。
当启动一个slave node的时候,它会发送一个PSYNC命令给master node,如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据;否则如果是slave node第一次连接master node,那么会触发一次full resynchronization;
开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成完毕之后,master会将这个RDB发送给slave,slave会先写入本地磁盘,然后再从本地磁盘加载到内存中。然后master会将内存中缓存的写命令发送给slave,slave也会同步这些数据。
slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。
从redis 2.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份。
master node会在内存中常见一个backlog,master和slave都会保存一个replica offset还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制,但是如果没有找到对应的offset,那么就会执行一次resynchronization。
master在内存中直接创建rdb,然后发送给slave,不会在自己本地落地磁盘了,可以有如下配置:
slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。
在redis.conf配置文件中,上面的参数代表至少需要3个slaves节点与master节点进行连接,并且master和每个slave的数据同步延迟不能超过10秒。一旦上面的设定没有匹配上,则master不在提供相应的服务。
sdown达成的条件很简单,如果一个哨兵ping一个master,超过了 is-master-down-after-milliseconds 指定的毫秒数之后,就主观认为master宕机
sdown到odown转换的条件很简单,如果一个哨兵在指定时间内,收到了 quorum 指定数量的其他哨兵也认为那个master是sdown了,那么就认为是odown了,客观认为master宕机
如果一个slave跟master断开连接已经超过了down-after-milliseconds的10倍,外加master宕机的时长,那么slave就被认为不适合选举为master
(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state
每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个slave来做切换,这个slave还得得到majority哨兵的授权,才能正式执行切换;
(2)SENTINEL RESET *,在所有sentinal上执行,清理所有的master状态
(3)SENTINEL MASTER mastername,在所有sentinal上执行,查看所有sentinal对数量是否达成了一致
4.3.2 slave的永久下线
让master摘除某个已经下线的slave:SENTINEL RESET mastername,在所有的哨兵上面执行.
redis的集群模式为了解决系统的横向扩展以及海量数据的存储问题,如果你的数据量很大,那么就可以用redis cluster。
redis cluster可以支撑N个redis master,一个master上面可以挂载多个slave,一般情况我门挂载一个到两个slave,master在挂掉以后会主动切换到slave上面,或者当一个master上面的slave都挂掉后,集群会从其他master上面找到冗余的slave挂载到这个master上面,达到了系统的高可用性。
2.1 redis cluster的重要配置
2.2 在三台机器上启动6个redis实例
将上面的配置文件,在/etc/redis下放6个,分别为: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf
每个启动脚本内,都修改对应的端口号
2.3 创建集群
解决办法是 先安装rvm,再把ruby版本提升至2.3.3
使用redis-trib.rb命令创建集群
--replicas: 表示每个master有几个slave
redis-trib.rb check 192.168.31.187:7001 查看状体
3.1 加入新master
以上相同配置完成后,设置启动脚本进行启动;然后用如下命令进行node节点添加:
3.2 reshard一些数据过去
3.3 添加node作为slave
3.4 删除node