缓存数据历险记(一)--被缓存警察上课一天
redis是我们研发人员的利器,虽然它速度快,支持高并发,多种业务都会融合到缓存,但要用好它,可不是那么简单的事情。下面我们就跟随卢卡的视角来去寻找一下redis内存淘汰背后的故事。
背景
第一次提到一个内存淘汰,是因为业务中很多数据已经将缓存的速度拖的很慢,而且一致在库中的数据留存下去,额,虽然说已经没有实际意义了,但是至少证明它之前存在过,数据的心声,作为redis的管理员conf大佬, 就给他们上课了,将数据整理好,确定好标签,给他们找寻
数据听了顿时留下了眼泪,踌躇满志的想要重新来过,等啊等啊。就是到了过期时间, 它还是没有被0号库的皇帝召见,看来等待它的就只能默默的离开了,当,逐渐的数据感觉自己被冷落了,皇帝也不喜欢我了,说着就开始给淘汰机制的警察诉苦,当时是他给我
作为淘汰警察的内存掌控者,每天这样的事情也已经习惯了, 谁让是缓存呢,对吧,好的东西就是比较稀有,人家就是有特权选择你们这些单纯的数据,淘汰警察说的话一次次的牵动着数据的心, 看来只有哭诉,才可以让以后的生活成长起来。经历过缓存的丢弃,渣男的抛弃,数据在一次在淘汰警察的鼓励下,站了起来,我以后要跟你混。
淘汰警察耐心的告诫数据,以后的路要自己好好走,我这里可是很复杂的,你有信心去走向远方吗?
数据,直接坚定的说了一句, YES ,SIR,(话说给淘汰警察整的不会了)
那你要是有兴趣,就先留下来吧,说着,数据眼角留下了热泪,温柔的笑了起来。
数据跟淘汰警察历险记
第二天,一大早数据就被,淘汰警察喊醒了,告诉你今天第一个任务,获取最新的
也就是将你一样,被0号库皇帝管理的韭菜数据,他们要获取一下他们现在的总体情况,你先去交接一下 memory大哥,把这个info的令牌带着, 先去找你command妹妹,告诉他要查一下 内存情况;
缓存redis的内存情况,用命令 info memory,可以获取到;

看到最新的内存情况的,数据很是高兴, 刚要回家,就看到淘汰警察给的任务卡上还有任务, 既然有挑战,那我就要完成,数据已经决定了开始像下个任务驶入;
任务一:
缓存Redis内存如何配置,生产环境中一般配置多少?
数据一看,这个配置,只能去寻找conf大哥了, 屁颠屁颠的去找了conf大哥让他查查内存配置,正好看见数据是新手,就给他指明一条路;

如果默认没有配置redis的内存,64位操作环境下,一般不限制内存大小;
但是conf大哥,细心的告诉数据, 想要配置内存,也是有技巧的;
数据认真的听了起来
生产环境,公司一般会配置 当前主内存的
方法1:可以通过conf来设置
maxmemory
单位是字节: 1024字节-1kb
1048576是1MB=1024*1024
比如:
maxmemory 1048576000 //代表1000MB
方法2:使用命令来配置
对于命令一般存储在config中
启动redis , redis -cli
config get maxmemory
config set maxmemory 104857600

任务二:
当Redis的内存满了,会发生什么情况?
数据一看这个任务,感觉要起义的感觉,内存总有一天要被我们数据占据,到时候看看鹿死谁手,
实例情况:
我将最大内存设置为1字节,
127.0.0.1:6379> config set maxmemory 1
OK
127.0.0.1:6379> set key1 hello
(error) OOM command not allowed when used memory > 'maxmemory'.

Redis内存已满
任务三:
Redis数据满了之后,如何淘汰数据?
数据一看,这不就是我之后的生活吗,我得好好表现,
这个还得从conf大哥那边找找灵感,说着就跑去找conf大哥了,
默认的Redis conf文件中,对于淘汰数据;
maxmemory-policy noeviction
不会驱逐数据的一种数据策略
如果内存够,基本都可以保存下来;

面试题:如果当前的一个键值是过期的,name他到了过期时间是否会马上在内存中被删除呢?
set k1 hello ex 10 10秒失效
答案:
因为会有
卢卡寄语
数据在淘汰警察的任务下,逐渐了解了内存的细节情况, 对于内存中最大数据,配置,以及过期保存都有了一定的了解,接下来会是对Redis,key值中过期策略的制定, 果然: 淘汰警察说,
下期会接着将关于Redis数据的过期策略的故事,期待你的关注,晚安了;