redis6种策略(redis关键字)

本文主要介绍redis的六大策略(redis关键词),下面一起看看redis的六大策略(redis关键词)相关资讯。
配置文件中最大内存删除策略在redis的配置文件中,可以设置redis的最大内存值。当redis使用的内存达到最大值时(你怎么知道已经达到最大值),redis选择删除这些键值。根据策略,在配置中容纳键值,并且没有键。这是一致的策略,内存已经不能适应新的核心值了,但是这个时候,有没有删除键呢?1.1最大内存参数设置如果maxmemory参数设置为0,分两种情况。*在64位系统上,没有限制。*在32系统中,是3g的官方文档,redis,32位系统最大内存为4g,1g为系统预留,此策略会自动设置为noeviction。也就是说,在32位系统中,如果maxmemory设置为0,则默认值为3g。到了3g,写入reidis,就会报错。1.2达到最大内存时删除键的几种策略*易变lru和删除键,停止使用lru算法选择lru算法(至少最近)和删除键都设置了过期时间。* allkeys lru任意键删除lru算法根据lru算法删除任意键。这是密钥设置过期的时间吗?no. * volatile随机密钥和-delete随机密钥其过期时间在过期集合中设置的随机密钥被随机删除。* allkeys随机删除一个随机密钥,任意密钥随机删除任意密钥,不管该密钥是否有过期时间。* volatile ttl key和delete,最晚到期时间(secondary ttl)用最后一个值(ttl)删除密钥。*如果没有证据不会过期,它将返回一个错误的写操作,如果没有设置终止时间,它将返回一个错误。1.3配置最大内存策略。以下命令的默认策略是:volatile lru在此命令中写入# date:setnx,此附加月份,rpush lpush rpushx # increase lpushx lin sert lset rpoplush,sade sinter sinterstore和sunionstore,此sdiffstore # zadd zincrby zuniostore zinterstore hset hse tnx hm set hinc rby # incr by decrby # jie xian mset mset mset tnx执行排序# default: # maxmemory lru 1.4用可变策略配置删除键的检测样本数maxmemory样本由于lru和最小ttl算法都是不精确的算法,所以可以选择要检查的样本数。例如,在默认情况下,redis将检查3个键选择的键,这些键从3开始最近没有使用过。当然,你可以查看样本号的值修改。要修改这个值,可以在配置文件中设置参数:maxmemory sample 3 2这些删除策略的实现是在函数freememoryifneed(void)中。以下是对每种策略的实施的详细描述。2.1什么时候删除键值当maxmemory策略被设置,键值被删除的时候,其实就是当maxmemory参数被设置,对应的键值被删除的时候,各个命令的处理。代码如下:每个命令处理客户端都会调用这个函数的maxmemory指令国际进程命令(redisclient × c) {…。/正在处理* *首先,如果可能,我们尝试释放一些内存(如果有)*数据集中的键)。如果我们不这样做。;t拥有唯一的东西*返回一个错误。如果有可以删除的键,释放一些内存,如果没有,返回一个错误给客户端。如果(服务器。maxmemory){//如果maxmemory不为0,那么调用下面的函数释放某个键int = freememoryiffed(use);//根据分配策略删除key,if((c-command-flag redis _ cmd _ deny oom retry =)redis _ err){//如果有错误,则终止处理命令,并向客户端标志事务返回错误(c);addreply(c,分享。oomerr);返回redis _ ok;} }……}练习1:如果没有设置maxmemory变量,那么即使设置了maxmemory策略也不起作用。实战二:如果不设置maxmemory变量,在不会调用释放策略的时候,会加速命令的处理和命令的进程。2.2删除键的全过程当内存达到最大时,我们需要根据策略删除旧的键。所有的删除和删除策略都是通过freememoryiffed函数实现的。在执行删除策略之前,首先选择数据库和键。一般步骤如下:国际freememoryiffed(void){ size _ t mem _ used,mem_tofree,mem _ freed;int slave = listlength(服务器。奴隶);mstime_t延迟;移除从输出/缓冲和非缓冲大小*内存使用计数。mem _ used = zmalloc _ used _ memory;if(slaves){ listiterli;idea:* ln;;listrewind(server.slaves,李);和((ln = list next(li))){ redis client * slave = list nodevalue(ln);无符号长度obuf _ bytes = getclientoutputbuffermoryuusage(slave);if(obuf _ bytes mem _ used)mem _ used = 0;other mem _ used = obuf _ bytes}} if (server.aof_state!= redis _ aof _ off){ mem _ used = sds len(server。aof _ buf);mem _ used = aofrewritebuffersize;}检查我们是否超过了内存*限制。检查当前系统是否超过限制内存if (mem_used server。maxmemory)返回redis _ ok;如果(server . maxmemory _ policy = redis _ maxmemory _ no _ evil)返回redis_err,我们需要自由;/* */没有内存,只有策略。计算我们需要多少内存。mem _ to free = mem _ used-server . maxmemory;mem _ freed = 0;latencystartmonitor(延迟);and (mem_freed mem_tofree){ int j,k,keys _ freed = 0;;16数据库遍历是(j = 0;;j mem _ used)mem _ used = 0;other mem _ used = obuf _ bytes}} if (server.aof_state!= redis _ aof _ off){//减去已用内存大小mem_used = sdslen (server。aof _ buf);mem _ used = aofrewritebuffersize;}检查我们是否超过了内存限制。*检查内存限制的设置。if (mem_used服务器。maxmemory)返回redis _ ok;如果(server.maxmemory_policy = redis _ maxmemory _ no _ evil)return redis _ err我们需要自由;/* */没有内存,只有策略。内存量计算出我们需要多少内存。*待释放计算mem _ to free = mem _ used-server . maxmemory;mem _ freed = 0;latencystartmonitor(延迟);且(mem _ freed mem _ to free){//已经释放,释放的内存小于总内存int j,k,keys _ freed = 0;;for(j = 0;j将无效。如果最大存储/删除策略是易变lru,您需要从数据库中找到它。如果//volatile xx策略,当前操作的数据库存储结构无效,需要从字典中查找key if(server . maxmemory _ policy = redis _ maxmemory _ volatile _ lru)germany = dict find(d b-dictionary,this key);获取密钥恢复值o = dictgetval(德国);关键视图中剩余的时间this val = estimateobjective time(o);更高的空闲时间是更好的选择* * delete//该键从lru的几个键遍历中一次选择最长的。如何更新//l值?关键是每次看,关键lru值更新,这是系统的时间戳。if(this = = null | | this val best val){ this = this;bestval = thisval} } } volatile ttl/* * * if(server . maxmemory _ policy = = redis _ maxmemory _ volatile _ ttl){ is(k = 0;;k < server.maxmemory _ samplesk ){此表;长thisval;德国= dictgetrandomkey(字典);this key = dictgetkey(德国);thisval = (long) dictgetval(德国);过期太早(过期时间戳越小越好)*已删除候选* if(this = = null | | this val id);decrefcount(key obj);keys _ freed当内存开始空闲/足够大的时候,我们就可以*不可能开始花这么多时间在这里*足够快可以把数据传到从机,所以我们强制。*环路中的传输。if(slave)flushlaslavesoutputbuffers;}}如果(!keys _ freed){ latency end monitor(delay);latencyaddsampleifneeded(驱逐循环无自由返回redis _ err/* * /…}} latencyendmonitor(延迟);latencyaddsampleifneeded(驱逐循环返回redis _ ok;边肖分享了您关于redis上述关键战略的实施方法的全部内容。希望能给大家一个参考,希望大家支持。
了解更多redis的六大策略(redis关键词)相关内容请关注本站点。

清理磁盘的最好方法是(清理磁盘垃圾怎样清理)
华为怎么降级系统,华为手机助手能降级么
小米和电脑怎么连接电脑连接不上怎么回事啊,你好小米青春版为什么连接电脑连不上
华为2021即将上市新款手机p50(华为最新款手机2020款p50)
不知道设备的IP地址 如何查,如何查找未知设备的IP
redis6种策略(redis关键字)
windows10安装跳过创建账号(2021win10安装跳过创建账户)
3000以内的笔记本电脑推荐(3000之内的笔记本买什么好)
小米官方固件怎么恢复模式,小米ac2100恢复官方固件
盗版win7可以更新系统吗(盗版win7升级正版win7)
新固态硬盘安装win7,固态硬盘怎么装win7求详细步骤
苹果电脑如何设置键盘快捷键(苹果电脑的快捷键怎么设置方法)
内存条金手指用什么擦(内存条金手指脏了)
台式电脑品牌哪个性价比高,哪个台式电脑品牌性价比最高又便宜
笔记本连不上wifi怎么办,笔记本电脑无线链接不上怎么办
游戏0xc000012d解决方案(游戏0xc0000142怎么修复)
win7旗舰版怎么恢复出厂设置在哪里(win7旗舰版系统还原出厂设置步骤)
电脑买组装机好还是整体机好,不懂电脑的人买台式电脑怎么买
篮协官宣(篮协官网)
华硕主板哪个型号性价比高,华硕主板那个型号性价比高