写点什么

缓存数据历险记(一)

用户头像
卢卡多多
关注
发布于: 44 分钟前
缓存数据历险记(一)

redis 是我们研发人员的利器,虽然它速度快,支持高并发,多种业务都会融合到缓存,但要用好它,可不是那么简单的事情。下面我们就跟随卢卡的视角来去寻找一下 redis 内存淘汰背后的故事。

背景

第一次提到一个内存淘汰,是因为业务中很多数据已经将缓存的速度拖的很慢,而且一致在库中的数据留存下去,额,虽然说已经没有实际意义了,但是至少证明它之前存在过,数据的心声,作为 redis 的管理员 conf 大佬, 就给他们上课了,将数据整理好,确定好标签,给他们找寻数据最后的归属

数据听了顿时留下了眼泪,踌躇满志的想要重新来过,等啊等啊。就是到了过期时间, 它还是没有被 0 号库的皇帝召见,看来等待它的就只能默默的离开了,当,逐渐的数据感觉自己被冷落了,皇帝也不喜欢我了,说着就开始给淘汰机制的警察诉苦,当时是他给我标注的,说好会一直待我好,现在呢,就不爱了,渣男,呸。

作为淘汰警察的内存掌控者,每天这样的事情也已经习惯了, 谁让是缓存呢,对吧,好的东西就是比较稀有,人家就是有特权选择你们这些单纯的数据,淘汰警察说的话一次次的牵动着数据的心, 看来只有哭诉,才可以让以后的生活成长起来。经历过缓存的丢弃,渣男的抛弃,数据在一次在淘汰警察的鼓励下,站了起来,我以后要跟你混。

淘汰警察耐心的告诫数据,以后的路要自己好好走,我这里可是很复杂的,你有信心去走向远方吗?

数据,直接坚定的说了一句, YES ,SIR,(话说给淘汰警察整的不会了)

那你要是有兴趣,就先留下来吧,说着,数据眼角留下了热泪,温柔的笑了起来。

迎接你新的生活吧,淘汰警察慢吞吞的说到。

数据跟淘汰警察历险记

第二天,一大早数据就被,淘汰警察喊醒了,告诉你今天第一个任务,获取最新的内存情况

也就是将你一样,被 0 号库皇帝管理的韭菜数据,他们要获取一下他们现在的总体情况,你先去交接一下 memory 大哥,把这个 info 的令牌带着, 先去找你 command 妹妹,告诉他要查一下 内存情况;


实例情况

缓存 redis 的内存情况,用命令 info memory,可以获取到;

看到最新的内存情况的,数据很是高兴, 刚要回家,就看到淘汰警察给的任务卡上还有任务, 既然有挑战,那我就要完成,数据已经决定了开始像下个任务驶入;

任务一:

缓存 Redis 内存如何配置,生产环境中一般配置多少?

数据一看,这个配置,只能去寻找 conf 大哥了, 屁颠屁颠的去找了 conf 大哥让他查查内存配置,正好看见数据是新手,就给他指明一条路;

如果默认没有配置 redis 的内存,64 位操作环境下,一般不限制内存大小;

但是 conf 大哥,细心的告诉数据, 想要配置内存,也是有技巧的;

数据认真的听了起来

生产环境缓存内存配置:


生产环境,公司一般会配置 当前主内存的四分之三,(redis 底层用 hash 算法,负载因子是 0.75)

如何设置 redis 的内存:

  • 方法 1:可以通过 conf 来设置

maxmemory <bytes>    单位是字节: 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 1OK127.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秒失效
复制代码

答案:当一个 key 过期,标识不可用之后,不会立刻删除

因为会有过期键值对的策略在起作用

卢卡寄语

数据在淘汰警察的任务下,逐渐了解了内存的细节情况, 对于内存中最大数据,配置,以及过期保存都有了一定的了解,接下来会是对 Redis,key 值中过期策略的制定, 果然: 淘汰警察说,数据你还有很远的路要走

下期会接着将关于 Redis 数据的过期策略的故事,期待你的关注,晚安了;

发布于: 44 分钟前阅读数: 3
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
缓存数据历险记(一)