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

如何修改网站模板内容软件开发需要学什么

如何修改网站模板内容,软件开发需要学什么,开发公司资料员岗位职责及工作内容,网线制作的标准文章目录 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.yutouwan.com/news/449317/

相关文章:

  • 网站建设收费明细宿迁网站建设推广
  • 黄浦区做网站公司成立费用
  • 做旅游网站的目的与意义网站首页翻转效果什么模块
  • 郑州做旅游网站目前网站开发技术
  • 专业制作外贸网站宝安有效的网站制作
  • 南京做网站需要多少钱单位网站建设与管理
  • 重庆网站怎么设置地图网站 源码
  • 常州云之家网站建设网络公司怎么样网站备案号没有-1
  • 网站引导页flash网站修改教程
  • 大同建设银行煤炭支行网站wordpress插件文档
  • 网站如何百度收入男科医院在线咨询免费
  • 垡头做网站的公司网站域名 格式
  • 佛山高端外贸网站建设泾川县门户网
  • 商城微信网站怎么做1元注册新域名
  • 网站和软件是怎么做的go pricing wordpress
  • 网站建设参考书黑彩网站充值就给你做单子
  • 网站项目开发流程中山专业门户网站制作咨询
  • 做网站好公司网站备案文件下载
  • 网站建设哪家好 万维科技怎么用自己的电脑建设网站
  • 自己做网站项目网络营销网站有哪些
  • 阳江网站推广优化公司wordpress悬停图
  • 常德网站建设优化万能搜索网站
  • 上海做网站培训班徐州企业网站设计
  • 网站开发和运行模式的搭建网店关键词怎么优化
  • 黑龙江省和城乡建设厅网站免费微信网站源码
  • 社保网站做员工用工备案吗做网站公司促销海报
  • 做网站哪里买空间好大兴区企业网站建设
  • 台州seo网站排名优化茶叶网站开发目的和意义
  • 网络营销公司组织架构一个新网站怎么做seo
  • seo关键词排名技术长春网站排名优化价格