100亿内存只需要100MB内存?这个难道离不开Redis?
1、为什么使用redis分析:在项目中使用redis , 主要是从两个角度去考虑:性能和并发 。 当然 , redis还具备可以做分布式锁等其他功能 , 但是如果只是为了分布式锁这些其他功能 , 完全还有其他中间件(如zookpeer等)代替 , 并不是非要使用redis 。 因此 , 这个问题主要从性能和并发两个角度去答 。
回答:如下所示 , 分为两点
(一)性能如下图所示 , 我们在碰到需要执行耗时特别久 , 且结果不频繁变动地SQL , 就特别适合将运行结果放入缓存 。 这样 , 后面的请求就去缓存中读取 , 使得请求能够迅速响应 。
文章插图
题外话:忽然想聊一下这个迅速响应的标准 。 其实根据交互效果的不同 , 这个响应时间没有固定标准 。 不过曾经有人这么告诉我:"在理想状态下 , 我们的页面跳转需要在瞬间解决 , 对于页内操作则需要在刹那间解决 。 另外 , 超过一弹指的耗时操作要有进度提示 , 并且可以随时中止或取消 , 这样才能给用户最好的体验 。 "那么瞬间、刹那、一弹指具体是多少时间呢?根据《摩诃僧祗律》记载
一刹那者为一念 , 二十念为一瞬 , 二十瞬为一弹指 , 二十弹指为一罗预 , 二十罗预为一须臾 , 一日一夜有三十须臾 。
那么 , 经过周密的计算 , 一瞬间为0.36 秒,一刹那有 0.018 秒.一弹指长达 7.2 秒 。 (二)并发如下图所示 , 在大并发的情况下 , 所有的请求直接访问数据库 , 数据库会出现连接异常 。 这个时候 , 就需要使用redis做一个缓冲操作 , 让请求先访问到redis , 而不是直接访问数据库 。
文章插图
2、使用redis有什么缺点分析:大家用redis这么久 , 这个问题是必须要了解的 , 基本上使用redis都会碰到一些问题 , 常见的也就几个 。 回答:主要是四个问题(一)缓存和数据库双写一致性问题(二)缓存雪崩问题(三)缓存击穿问题(四)缓存的并发竞争问题这四个问题 , 我个人是觉得在项目中 , 比较常遇见的 , 具体解决方案 , 后文给出 。
3、单线程的redis为什么这么快分析:这个问题其实是对redis内部机制的一个考察 。 其实根据博主的面试经验 , 很多人其实都不知道redis是单线程工作模型 。 所以 , 这个问题还是应该要复习一下的 。 回答:主要是以下三点(一)纯内存操作(二)单线程操作 , 避免了频繁的上下文切换(三)采用了非阻塞I/O多路复用机制
题外话:我们现在要仔细地说一说I/O多路复用机制 , 因为这个说法实在是太通俗了 , 通俗到一般人都不懂是什么意思 。 博主打一个比方:小曲在S城开了一家快递店 , 负责同城快送服务 。 小曲因为资金限制 , 雇佣了一批快递员 , 然后小曲发现资金不够了 , 只够买一辆车送快递 。 经营方式一客户每送来一份快递 , 小曲就让一个快递员盯着 , 然后快递员开车去送快递 。 慢慢的小曲就发现了这种经营方式存在下述问题
- 几十个快递员基本上时间都花在了抢车上了 , 大部分快递员都处在闲置状态 , 谁抢到了车 , 谁就能去送快递
- 随着快递的增多 , 快递员也越来越多 , 小曲发现快递店里越来越挤 , 没办法雇佣新的快递员了
- 快递员之间的协调很花时间
对比上述两种经营方式对比 , 是不是明显觉得第二种 , 效率更高 , 更好呢 。 在上述比喻中:
- 每个快递员---------->每个线程
- 每个快递------------>每个socket(I/O流)
- 快递的送达地点------>socket的不同状态
- 客户送快递请求------>来自客户端的请求
- 小曲的经营方式------>服务端运行的代码
- 一辆车--------------->CPU的核数
下面类比到真实的redis线程模型 , 如图所示
文章插图
- 互联网|苏宁跳出“零售商”重组互联网平台业务 融资60亿只是第一步
- 王文鉴|从工人到千亿掌门人,征服华为三星,只因他36年只坚持做一件事
- 健身房|乐刻韩伟:产业互联网中只做单环节很难让数据发挥大作用
- 易来|RA95显色只是起步,2020双12选灯必逛好店!
- 手机|新鲜评测:让手机变身电脑的显示器见过没?只用4步即可完成!
- 缺点|骁龙865+12GB已降至2399,X轴马达+55W快充,缺点只有一个
- 用户|把更多主动权交还给用户,市面上敢这么做的或许只有OriginOS了
- 试试|手机内存不够用,咋办?试试关闭微信这两步操作,轻松腾出几个G
- 纳闷|英媒纳闷:安道尔这个国家微信用户高达2000万,可只有8.5万人!
- 面屏手机|不是我吹!5000万像素iQOO5只卖3490!友商只能干瞪眼!