redis的缓存原理-Redis 缓存原理
Redis 的缓存实际上就是个极小的内存盘子,但它能扛下整个互联网网站的流量。
这听起来有点玄,实际上就一两个词:快。
要是你没参与过服务器编程,可能会认定内存为啥如此值钱,为啥非要存数据到这块小盘子里。 起初,得把“内存”和“硬盘”彻底分开说。硬盘是经济的,便宜又耐用,每秒能存取数量级的数据,但它有一个致命的缺点:读写慢。当你伸手去那个硬盘里翻找一条数据时,机械臂得先跑那会儿,再找数据块,最终再回来写,这个过程得花庞大的物理成本。
要是把所有数据库都塞进几百个硬盘箱里,那系统反而更慢了。而内存呢?它是你电脑里的 RAM,只要通电就立马反应,存取速度是硬盘的百万倍。
要是把整个互联网的数据直接存进内存,那反应速度绝对是毫秒级的,比目前这个略微懂点技术的数据库系统都要快。 这就引出了 Redis 要做的第一件事:搞个“缓存”。说人话就是,把那些读几次的数据先扔进内存,把那些读一次就失效的数据扔进硬盘做备份。平时你去网页逛,浏览器里的那些文字、图片、就连登录密码,实际上大局部都在内存里。Redis 就是内存里的那个小箱子,专门管这些“常读常新”的东西。你手里拿个手机查个微信,微信实际上没把聊天记录全体都存有硬盘里,出于它知道大局部内容你下一秒就会点“发送”要么“刷新”。Redis 就是那个负责把这些可能下一秒就消亡的数据,先塞进内存里,让你认定秒开,实际上大局部数据只是经过了一次极快的读取,没动硬盘,故此速度飞快。 那为啥要做这个呢?出于有时候,浏览器页面加载得慢,可能是出于硬盘忒慢,要么网络卡死了,这些数据就在硬盘里傻乎乎地等着。
要是这时候把缓存数据从内存里拿出来,重新塞回硬盘,那速度肯定慢得像蜗牛。
这时候就需求缓存,把热点数据提前放到内存里。
记住,内存里的数据刷新速度极快,数据一消亡,内存就自动清空。
故此,你的页面看起来是“瞬间”加载的,实际上只是内存里的几行代码,硬盘里可能只是一瞬间的快照。 可是,这个机制也有个坑,就是“数据过期”。内存有限,你的浏览器一般也有限制,比如只能存几个页面。Redis 也一样,它有个 TTL(工夫 To Live)的概念,也就是规定了数据存有内存里的工夫。
比如你登录了,密码够用一辈子,但网络波动害得你的浏览器卡了 10 分钟,这时候 Redis 里的登录状态就过期了,系统自动把它删掉。
这意味着,Redis 不是个永久的记录库,它是个有生命周期的容器。
要是数据一直在内存里不干净利落,那内存迟早会被填满,害得新的数据也读不到,系统也就扛不住了。
故此,缓存的最终目标,是在保证大数据量不塞进硬盘的前提下,把高频访问的数据临时“搬”到内存里,让速度上去,与此同时还得记得定期把不需求的东西清理掉,保持内存里的干净利落。 再比如你说你们公司有个老用户,注册十年还没登录。
要是把这个人的所有历史数据都从硬盘捞出来存到内存,那内存早就爆了。
这时候 Redis 就会做判断:这条数据你十年没动,并且缓存里也没别的动静,那它就把这个十年前的数据从内存里杀掉,改回硬盘,要么干脆删掉。
这样,内存就省下来了,空间也腾出来了给新数据用。 还有一种情况,就是数据确实丢了。
要是你把数据从一个数据源转存到 Redis,转存的时候万一出错,要么源端数据丢了,Redis 里就不对了。
这时候 Redis 就得把里头的脏数据删了,要么找份备份。出于它的内存容量有限,一旦满了,就得自动清理,这也是为啥你会发现有时候刷新页面,发现有些数据突然“闪失”了。 故此,Redis 的本质就是一场关于速度的博弈。它用少量的内存,去换取庞大的读写效率。它不是要取代所有的数据库,而是做那些“快”的工作。当用户点一个按钮,系统能瞬间响应,用户认定快翻了,实际上背后是无数行代码在内存里快速调度,硬盘里可能啥都没形成。
这就是为啥叫缓存,别看听起来像个魔术气球,但里面的数据都是实实在在存有的。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
