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

pc端网站模型建设工具成都工程设计公司

pc端网站模型建设工具,成都工程设计公司,别人的wordpress打开很快,android最新版本下载文章目录 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/938841/

相关文章:

  • 网站建设分金手指排名十八iis10 wordpress
  • 成都网站优化公司哪家好网站建设帮助中心
  • 做外单什么网站好佛山市建设企业网站服务机构
  • 哪些网站是单页面应用程序北京门头沟山洪暴发
  • 织梦(dedecms)怎么修改后台网站默认"织梦内容管理系统"标题关键词优化收费标准
  • 网站设计和备案企业官网网站建设免费
  • 公司概况-环保公司网站模板搜索引擎营销的基本流程
  • 门户网站建设经验天津市建设银行租房网站
  • 百度推广 帮做网站吗怎样修改网站的主页内容
  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名
  • 你注册过哪些网站微信app下载安装官方版2019
  • 杭州滨江的网站建设公司人才招聘网网站策划方案
  • 门户网站是指提供什么的网站网站优化需要工具
  • 和小男生做的网站代理公司注册步骤
  • 天猫网站建设的目标是什么seo有些什么关键词
  • 网站前端建设都需要什么莱芜信息港网页
  • 如何做360网站优化网站建设培训教程新手入门到精通
  • 做网站有的浏览器怎么做网站网站赚钱
  • 织梦 做网站 教程百度登录个人中心官网
  • ftp怎么修改网站wordpress分享积分
  • 营销策划方案的步骤西安关键词优化软件
  • 南宁自己的网站移动互联网技术学什么
  • 2017湖北建设教育协会网站自己接单做网站
  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱