设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
Redis的键删除策略
返回列表
发新帖
Redis的键删除策略
[复制链接]
11
|
4
|
2014-2-19 11:55:14
|
显示全部楼层
|
阅读模式
三种删除策略:
定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。
惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
在这三种策略中,第一种和第三种为主动删除策略,而第二种则为被动删除策略。
定时删除策略是对内存最友好的:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存。另一方面,定时删除策略的缺点是,它对CPU时间是最不友好的:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。
例如,如果正有大量的命令请求在等待服务器处理,并且服务器当前不缺少内存,那么服务器应该优先将CPU时间用在处理客户端的命令请求上面,而不是用在删除过期键上面。
除此之外,创建一个定时器需要用到Redis服务器中的时间事件,而当前时间事件的实现方式--无序链表,查找一个事件的时间复杂度为O(N) ---- 并不能高效地处理大量时间事件。
因此,要让服务器创建大量的定时器,从而实现定时删除策略,在现阶段来说并不现实。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
惰性删除策略对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会在删除其他无关的过期键上花费任何CPU时间。
惰性删除策略的缺点是,它对内存是最不友好的:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占的内存就不会释放。
在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话,那么它们也许永远也不会被删除(除非用户手动执行FLUSHDB),我们甚至可以将这种情况看作是一种内存泄露----无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息。
举个例子,对于一些和时间有关的数据,比如日志(log),在某个时间之后,对它们的访问就会大大减少,甚至不再访问,如果这类过期数据大量地积压在数据库中,用户以为服务器已经自动将它们删除了,但实际上这些键仍然存在,而且键所占用的内存也没有释放,那么造成的后果肯定是非常严重的。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
从上面对定时删除和惰性删除的讨论来看,这两种删除方式在单一使用都有明显的缺陷:
1. 定时删除占用太多CPU时间,影响服务器的响应时间和吞吐量;
2. 惰性删除浪费太多内存,有内存泄露的危险。
定期删除策略是前两种策略的一种整合和折中:
1. 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响;
2. 除此之外,通过定期删除过期键,定期删除策略有效地减少了因为过期键而带来的内存浪费。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
定期删除策略的难点是确定删除操作执行的时长和频率:
1. 如果删除操作执行的太频繁,或者执行的时间太长,定期删除策略就会退化成定时删除策略,以至于将CPU时间过多地消耗在删除过期键上面。
2. 如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况。
因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。
Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
宝宝手足口病已经好十几天了
2
上周六对象上床,我还是第一次他没从前面进
3
喉咙不舒服总感觉有东西粘粘的稠稠的那种特别是躺下很
4
白带多呈黄色像鼻涕一样怎么回事
5
我这腰上的是不是白癜风啊
6
宝宝今早六点多睡着从鼻子子喷出些透明装粘性液体
7
最近三四天一直打嗝,很少有间歇
8
肚子上长有白癜风,好治吗?
9
中医治疗痛风哪里好
10
孩子脸色发黄没有血色
11
最近一两个月尿频,需要做什么检查吗
12
我爸捐完骨髓给我后完全走不了路
13
肚子上的白癜风该怎么治疗?
14
我家宝宝一岁四个月了走路有点螺旋腿怎么办
15
额头下巴总是长痘痘,脸颊也有
16
中医治癫痫病有什么优势吗
17
小冯,21岁,以发热
18
手指甲连接处分开了,很硬
19
有白癜风后还能用香水吗
20
走路总想往左边走,头晕
21
请问医生,如果怀孕有一次胎停
22
出现这种情况治疗时间需要多久能好转
23
包皮手术一个月可吸收线大部分还没掉
24
我9号骑车摔了骨头没事走路也不疼就是蹲不下怎么回事
25
请问患上类风湿一般怎么治疗比较好?
26
保山治疗白癜风怎么样,可以吗
27
上个月二十七号来的大姨妈这个月七号同房的会不会怀孕
28
同事手上的白癜风是不是很容易传染给别人?
29
多喝水对痛风患者的病情有帮助?
30
手上长透明的水泡、就手上长其他地方都没有
31
想问下胸片,看不太懂
32
以前检查有乳腺增生吃药好了这几天又有点疼了但是忘记
33
请心血管内科专家接诊
34
能够造成男性精子质量低的原因有哪些?
35
这是第二次四维彩超,可不可以帮我算下娃娃现在多少斤
36
请问例假少现在吃定坤丹和鹿胎膏有些肾阳虚不知道能不
37
中医治疗膝关节炎方法
38
孩子出生14天,感觉鼻音重
39
甲功五项检查结果,好像一直有甲状腺炎
40
复元奇方饮真的可以治好我家孩子肌营养不良吗
41
10月29号做的输卵管造影
42
神经性皮炎好久了,很多药都用过
43
脸上痘印怎么快速消长痘两月目前不长了就是痘印难看
44
孕16周做的唐氏筛查
45
孕19周4天,今天早晨同事在办公室涂指甲油
46
请问一下单位的厕所是蹲坑的但是属于冲水的我在用之前
47
白癜风怎样治疗的好呢
48
一个月的婴儿为什么吃奶就吐吃奶就吐
49
皮肤突然凸起一块,硬硬的
50
hcg推算受孕时间我是10月15号来的月经
51
最近脸上多油,还生有很多逗逗
52
朋友脸上的白癜风会不会遗传给孩子啊?
53
通过检查骨密度丅-3.3Z-1.6需要怎么治疗
54
腰椎骨刺压迫神经,四肢麻木
55
从排卵日算起。一周之内服用了孕妇禁用的感冒药
56
: 每天晚上都要到10点之后才睡觉
57
不知道白癜风会传染人吗?
58
癫痫病患者最好别贪吃什么食品
59
每天趴着玩手机两个多小时
60
医生同事说植物可以吸收辐射
61
医生我儿子今年三岁脖子两侧能摸到一个淋巴结怎么回事
62
2岁半宝宝感冒咳嗽今天是第三关吃药
63
帮我看下,什么情况,怎么治疗
64
宝宝发烧3天,每次都是39度左右
65
我今年三十四岁男,我的是睡眠性癫痫
66
医生我去做那个游乐场那个上来又下去的那个50多米高
67
月经很规律,周期是28天
68
咳嗽了一个月,打了吊针吃药都不管用
69
上个月18来月经,这个月今天16号
70
医生前天做了鼓膜修复手术
71
(打嗝频繁胃有点胀)请问医生我最近几个月经常打嗝
72
白癜风患者会遗传给小孩吗?
73
有白癜风后也不能喝咖啡啊
74
一年中温度变化大的时候
75
不到一岁发热引起抽风
76
宝宝出生三十五天,昨天下午身上和脸上开始出红色的一
77
鸡鸡不坚挺有晨勃但不硬手淫不频繁最近身体有点疲劳
78
能否判断良性,没有肝炎病史
79
班里有小朋友出水痘,孩子4周岁的水痘预防针还没有打
80
鸡眼的根部是什么啊
81
鸡眼红色的这个能治吗
82
剖腹产20天了,纯母乳喂养
83
医生我昨天早上睡醒的时候感觉喉咙特别痛
84
男性乳腺肥大手术价格
85
卵巢癌手术之后化疗一次
86
宝宝三个月,前两天拉肚子
87
孩子2个多月,脖子上有白斑,是白癜风吗?
88
睡觉的时候感觉腿有点累
89
人流25天同房轻轻来了几下
90
红肿反反复复又痒擦了药膏好了别的地方又有
91
有了类风湿这病去什么地方治疗好?
92
我的阴囊湿疹,用草本萃芙成吗
93
我在晚上睡觉的时候总是耿耿和打呼噜怎么回事啊有什么
94
宝宝被别人喂饭几次会传染什么病毒吗需要做什么检查吗
95
大腿内部被踢伤,导致外阴血肿
96
怀孕31周,昨晚到现在一直胎动