缓存常见面试题(1)

(1)第一问,在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?

答:一个一个来看
(1)在项目中缓存是如何使用的?

这个,你结合你自己项目的业务来,你如果用了那恭喜你,你如果没用那不好意思,你硬加也得加一个场景吧
(2)为啥在项目里要用缓存呢?
用缓存,主要是俩用途,高性能和高并发

那么问题来了,如果不用缓存会是什么效果?
每次查询数据都要从数据库查,严重消耗数据库性能
在这里插入图片描述
用了缓存之后,我们来看下图所示:保证了高性能
在这里插入图片描述
接下来我们再看缓存是如何实现高并发的
在这里插入图片描述

(2)第二问,redis和memcached有啥区别?

这个事儿吧,你可以比较出N多个区别来,但是我还是采取redis作者给出的几个比较吧(第2,3点不重要)
1)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
3)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。

4)集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是redis目前是原生支持cluster模式的,redis官方就是支持redis cluster集群模式的,比memcached来说要更好

(3)第三问,redis的线程模型

1)文件事件处理器(下面整个图就是一个文件事件处理器)(redis内部核心原理图
io多路复用程序(非阻塞,相当于可以多线程走法,接收socket就压入队列)的作用就是负责监听各个socket,然后把产生事件的socket压入队列
下图中的三个事件处理器虽然是单线程的,但是它是基于内存的,所以可能处理一个事件或命令只需要2ms,几毫秒,很快
在这里插入图片描述
在这里插入图片描述

(4)redis都有哪些数据类型?分别在哪些场景下使用比较合适?

第一类:string
在这里插入图片描述

第二类:hash
在这里插入图片描述
在这里插入图片描述
第三类:list
在这里插入图片描述
第四类:set
在这里插入图片描述
第五类:sorted set在这里插入图片描述
在这里插入图片描述

(5)第五问,redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?

答:过期策略:①定期删除②惰性删除
在这里插入图片描述
上面的两种过期策略可能还是无法解决一些问题
答案是:走内存淘汰机制。
内存淘汰机制:
在这里插入图片描述
在这里插入图片描述
手写一下LRU代码实现在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值