编程语言那么多,但不管你是从事Python、Java、Go、PHP、Ruby等,Redis都应该是一个你比较熟悉的中间件。
Redis号称支持并发11万读操作、并发8万写操作。由于优异的性能和方便的操作, Redis在国内各大公司都很热门,比如阿里、腾讯、字节跳动、百度、美团、小米等。
可大部分经常写业务代码的程序员,在实际工作中或许只用到了set value、GetValue两个操作,而对Redis缺乏一个整体的认识。
只有当你真正深入去了解了Redis,才会发现Redis的无穷妙用,让你在工作和面试中都如鱼得水。
本文将从8个问题引入,带你深刻理解Redis。(同时我还整理了一份Redis的学习指南,需要的朋友可以自取。)
1、为什么使用Redis?
项目中使用Redis,主要考虑性能和并发。如果仅仅是分布式锁这些,完全可以用中间件Zookpeer等代替。
性能:
如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
可是,Redis也有慢查询操作,应该如何优化?值得思考。
根据交互效果的不同,响应时间没有固定标准。在理想状态下,我们的页面跳转需要在瞬间解决,对于页内操作则需要在刹那间解决。
并发:
如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
2、使用Redis有什么缺点?
缓存和数据库双写一致性问题
缓存雪崩问题
缓存击穿问题
缓存的并发竞争问题
3、单线程的Redis为什么这么快?
多路复用Resp协议
单线程
内存操作
(面试官会针对这几点详细提问)
4、Redis的数据类型及使用场景(这5种类型你用到过几个?)
String:一般做一些复杂的计数功能的缓存;
Hash:存储二维数据或对象;
List:可实现队列,栈及有序的数据存储;
Set:常用于黑名单,微信抽奖等功能,应用场景多变;
SortedSet:做排行榜应用,取TOPN操作;延时任务;做范围查找。
5、Redis过期策略和内存淘汰机制?
定期删除,惰性删除策略等;
6、Redis和数据库双写一致性问题;
(最终一致性和强一致性)
7、如何应对缓存穿透和缓存雪崩问题?
中小型的公司一般遇不到这些问题,但是大并发的项目,流量有几百万左右,这两个问题一定要深刻考虑。
8、如何解决Redis并发竞争Key问题?
这个你知道怎么解答吗?
这8个问题是来源于阿里面试真题,基本上你只要把上面这8个问题吃透,关于Redis绝对可以征服面试官!
这8个问题的详细答案及《Redis学习指南》我已经整理到了文档里,需要的朋友可以私信或者在留言区获取哈!