面试总是被问到Redis,我该怎么回答?

Redis在互联网技术存储方面使用如此广泛,现在面试官都会用有关Redis的问题刁难面试者。

Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

 不过近日却听到有人吐槽自己的同事一直反对使用Redis,让他十分无语。

那位程序员在设计公司的业务系统时候,始终坚持永远不要用缓存(其他人想用redis),例如做个接口防重复,一定要用数据库来实现,包括定期失效之类的功能。

为什么要用Redis?

项目中使用Redis,主要考虑性能和并发。其实不是所有的场景都要上Redis,如果仅仅是分布式锁这些,完全可以用中间件Zookpeer等代替。很多业务系统其实用数据库就够了,无脑上缓存/NOSQL可能会带来更多更严重的问题。

但是在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
 

面试会问到的有关Redis的问题:

1.项目中为什么要用到Redis?

因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis 和 Memcached 不过中和考虑了他们的优缺点,最后选择了Redis。

2.Redis有哪些数据结构?

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet、HyperLogLog、Geo、Pub/Sub等……

3.使用过Redis分布式锁么,它是什么回事?

先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。

4.如果有大量的key需要设置同一时间过期,一般需要注意什么?

如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,我们一般需要在时间上加一个随机值,使得过期时间分散一些。

5.如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?

keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。

熟练使用 Redis 是后端工程师的必备技能,系统学习Java是非常有必要的,这里给大家准备了一套【Java面试题总汇】,熟练之后相信你能让面试官哑口无言,拿下P8+offer!

 

 

 

 

 

 领取完整资料需要扫码添加小助手哦!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>