当前位置: 首页 > news >正文

如何给网站做外部优化今年国内重大新闻

如何给网站做外部优化,今年国内重大新闻,wordpress两侧有空白,网站建设业务终止合作范本文章目录 Redis内存策略过期策略DB结构惰性删除周期删除 淘汰策略 Redis内存策略 Redis是基于内存存储#xff0c;所以其性能很强。但单节点的Redis内存不宜过大#xff0c;否则会影响持久化或主从同步性能。 可以手动修改配置文件来设置Redis的最大内存 # 格式#xff1… 文章目录 Redis内存策略过期策略DB结构惰性删除周期删除 淘汰策略 Redis内存策略 Redis是基于内存存储所以其性能很强。但单节点的Redis内存不宜过大否则会影响持久化或主从同步性能。 可以手动修改配置文件来设置Redis的最大内存 # 格式 maxmemory bytes maxmemory 1gb如果内存使用达到了上限就无法存储更多的数据了。 Redis为尽量避免内存达到上限提供了两种策略过期策略、淘汰策略。 过期策略 在Redis缓存中可以通过expire命令为redis的key设置TTL(过期时间或存活时间)。 当key的TTL到期之后再次访问key是返回的值为nil(空)说明这个key就已经不存在了其对应的内存也得到了释放从而起到了内存回收的目的。 DB结构 Redis本身就是一个很经典的key-value内存存储数据库因此所有的key、value都保存在Dict结构中。不过在其database结构体中有两个Dict一个记录key-value另一个记录key-TTL。 源码 typedef struct redisDb {dict *dict; /* 存放所有key及value的地方也被称为keyspace*/dict *expires; /* 存放每一个key及其对应的TTL存活时间只包含设置了TTL的key*/dict *blocking_keys; /* Keys with clients waiting for data (BLPOP)*/dict *ready_keys; /* Blocked keys that received a PUSH */dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */int id; /* Database ID0~15 */long long avg_ttl; /* 记录平均TTL时长 */unsigned long expires_cursor; /* expire检查时在dict中抽样的索引位置. */list *defrag_later; /* 等待碎片整理的key列表. */ } redisDb;结构流程图 惰性删除 **惰性删除**并不是在TTL到期后就立刻删除key而是在访问一个key的时候检查该key的存活时间如果已经过期才执行删除。 // 查找一个key执行写操作 robj *lookupKeyWriteWithFlags(redisDb *db, robj *key, int flags) {// 检查key是否过期expireIfNeeded(db,key);return lookupKey(db,key,flags); } // 查找一个key执行读操作 robj *lookupKeyReadWithFlags(redisDb *db, robj *key, int flags) {robj *val;// 检查key是否过期 if (expireIfNeeded(db,key) 1) {// ...略}return NULL; }int expireIfNeeded(redisDb *db, robj *key) {// 判断是否过期如果未过期直接结束并返回0if (!keyIsExpired(db,key)) return 0;// ... 略// 删除过期keydeleteExpiredKeyAndPropagate(db,key);return 1; }这种删除策略会存在一个问题如果一个key过期了就再也没有被访问过则这个key就永远不会被删除。在极端情况下当大量的key出现这种情况也会对内存造成很大的压力。 周期删除 周期删除顾明思议是通过一个定时任务周期性的抽样部分过期的key然后执行删除。执行周期有两种 Redis服务初始化函数initServer()中设置定时任务按照server.hz的频率来执行过期key清理模式为SLOW。 // server.c void initServer(void){// ...// 创建定时器关联回调函数serverCron处理周期取决于server.hz默认10aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL) }// server.c int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {// 更新lruclock到当前时间为后期的LRU和LFU做准备unsigned int lruclock getLRUClock();atomicSet(server.lruclock,lruclock);// 执行database的数据清理例如过期key处理databasesCron(); }void databasesCron(void) {// 尝试清理部分过期key清理模式默认为SLOWactiveExpireCycle(ACTIVE_EXPIRE_CYCLE_SLOW); }Redis的每个事件循环前会调用beforeSleep()函数执行过期key清理模式为FAST。 void beforeSleep(struct aeEventLoop *eventLoop){// ...// 尝试清理部分过期key清理模式默认为FASTactiveExpireCycle(ACTIVE_EXPIRE_CYCLE_FAST); }void aeMain(aeEventLoop *eventloop){eventLoop-stop 0;while(!eventLoop-stop){// beforeSleep() -- Fast模式快速清理// n aeApiPoll()// 如果n 0FD就绪处理IO事件。// 如果到了执行时间则调用serverCron() -- SLOW模式清理} }周期清理的两种模式 SLOW模式规则 ① 执行频率受server.hz影响默认为10即每秒执行10次每个执行周期100ms。 ② 执行清理耗时不超过一次执行周期的25%.默认slow模式耗时不超过25ms。 ③ 逐个遍历db逐个遍历db中的bucket抽取20个key判断是否过期。 ④ 如果没达到时间上限25ms并且过期key比例大于10%再进行一次抽样否则结束。 FAST模式规则(过期key比例小于10%不执行) ① 执行频率受beforeSleep()调用频率影响但两次FAST模式间隔不低于2ms。 ② 执行清理耗时不超过1ms。 ③ 逐个遍历db逐个遍历db中的bucket抽取20个key判断是否过期。 ④ 如果没达到时间上限1ms并且过期key比例大于10%再进行一次抽样否则结束。 淘汰策略 内存淘汰当Redis内存使用达到设置的阈值时Redis会主动挑选部分key将其删除释放更多内存。 Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰。 int processCommand(client *c) {// 如果服务器设置了server.maxmemory属性并且并未有执行lua脚本if (server.maxmemory !server.lua_timedout) {// 尝试进行内存淘汰performEvictionsint out_of_memory (performEvictions() EVICT_FAIL);// ...if (out_of_memory reject_cmd_on_oom) {rejectCommand(c, shared.oomerr);return C_OK;}// ....} }Redis支持8种不同策略来选择要删除的key noeviction不淘汰任何key但是内存满时不允许写入新数据(默认)。volatile-ttl对设置了TTL的key比较key的剩余TTL值TTL越小越先被淘汰。allkeys-random对全体key 随机进行淘汰。也就是直接从db-dict中随机挑选。volatile-random对设置了TTL的key 随机进行淘汰。也就是从db-expires中随机挑选。allkeys-lru 对全体key基于LRU算法进行淘汰。volatile-lru 对设置了TTL的key基于LRU算法进行淘汰。allkeys-lfu 对全体key基于LFU算法进行淘汰。volatile-lfu 对设置了TTL的key基于LFI算法进行淘汰。 LRULeast Recently Used最少最近使用。用当前时间减去最后一次访问时间这个值越大则淘汰优先级越高。 LFULeast Frequently Used最少频率使用(最近最少使用)。会统计每个key的访问频率值越小淘汰优先级越高。 Redis的数据都会被封装成RedisObject结构 typedef struct redisObject {unsigned type:4; // 对象类型unsigned encoding:4; // 编码方式unsigned lru:LRU_BITS; // LRU以秒为单位记录最近一次访问时间长度24bit// LFU高16位以分钟为单位记录最近一次访问时间低8位记录逻辑访问次数int refcount; // 引用计数计数为0则可以回收void *ptr; // 数据指针指向真实数据 } robj;逻辑访问次数并不是每次key被访问都计数而是通过下面的步骤计算得来 生成一个0~1之间的随机数。计算 (旧次数 * lfu_log_factor 1)记录为P(lfu_log_factor默认为10)。如果 R P 则计数器 1且最大不超过255。访问次数会随时间衰减距离上一次访问时间每隔 lfu_decay_time 分钟(默认为1)计数器 - 1。 淘汰策略流程图
http://www.w-s-a.com/news/59234/

相关文章:

  • 有没有做生物科技相关的网站弄一个app大概多少钱
  • 五金加工东莞网站建设怎么做网页跳转
  • 淄博网站优化价格wordpress没有小工具
  • 自己搭建服务器做视频网站wordpress发布文章 发布
  • php仿博客园网站阅读分享网站模板
  • 网站宣传的劣势域名注册长沙有限公司
  • 怎样联系自己建设网站企业怎样做好网站建设
  • 网站制作需求分析电商网站建设浩森宇特
  • 淄博网站建设招聘摄影网站建设的论文
  • 怎么把凡科网里做的网站保存成文件网站建设研究的意义
  • 服务器2003怎么做网站网站建设服务器的配置
  • 高校网站建设方案网站推广软件下载安装免费
  • 重庆没建网站的企业网站开发软件 连接SQL数据库
  • 百度申诉网站沉默是金
  • 如何自己建网站wordpress图片延时加载
  • 甘肃省住房和城乡建设厅注册中心网站千博企业网站管理系统2013
  • 西餐厅网站模板seo搜索引擎优化ppt
  • 什么做的网站吗wordpress注册可见插件
  • 献县做网站价格可以提升自己的网站
  • 如何修改网站title建设网站只能是公司
  • 网站推广效果怎么样建设工程公司组织架构图
  • 成都制作网站价格表网站安全证书过期怎么办
  • 高校图书馆网站的建设方案湖南常德市
  • 房地产怎么做网站推广wordpress插件汉化下载
  • 一般pr做视频过程那个网站有无锡网络公司平台
  • 安徽网站推广系统网站根目录权限设置
  • 班级网站建设需求智慧校园登录入口
  • asp.net网站发布到虚拟主机电商设计网站哪个好
  • 做的网站怎么转成网址链接企业为什么要找会计
  • 关于建设网站的情况说明书文化建设方面的建议