超全Redis面试题,谈笑间对付面试官

Redis 在当今的计算机行业,可以说是使用的最为广泛的内存数据库,几乎所有的后端技术面试都会涉及到 Redis 相关的知识,正所谓知己知彼,百战百胜。小白今天精心整理的超全的 Redis 面试题,希望可以帮助到在路上的你们~

什么是 Redis

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库

是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向

Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列

Redis 还支持事务 、持久化、Lua 脚本、多种集群方案等,可以使用众多复杂的业务场景

常见的分布式缓存技术

缓存使用的比较多的主要是 Memcached 和 Redis。不过现在使用 Memcached 做缓存的比较少

Memcached 是分布式缓存最开始兴起的时候比较常用的方案,后来随着 Redis 的发展,Redis 逐渐成为了人们的首选

分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用信息的问题。因为本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共享的

Memcached 与 Redis 的异同

共同点

  1. 都是基于内存的数据库,一般都用来当作缓存使用

  2. 都有过期策略

  3. 两者的性能都非常高

异同点

  1. Redis 支持更丰富的数据类型,Memcached 只支持最简单的 k/v 数据类型,所有的值均是简单的字符串

  2. Redis 支持数据的持久化,而 Memecache 把数据全部存在内存之中,重启之后数据丢失

  3. Redis 有灾难恢复机制,因为可以把缓存中的数据持久化到磁盘上

  4. Redis 在服务器内存使用完之后,可以将不用的数据放到磁盘上。但 Memcached 在服务器内存使用完之后,就会直接报异常

  5. Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但 Redis目前是原生支持 cluster 模式的

  6. Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型

  7. Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持。并且,Redis 支持更多的编程语言

  8. Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除

Redis 的数据类型

Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zsetsorted set:有序集合)

实际中我们最为常用的还是 string 类型,不过还有几种高级数据类型我们也需要了解掌握:BloomFilter,RedisSearch,Redis-ML,还有更高级的数据类型,BloomFilter,RedisSearch,Redis-ML 如果使用过,那么在面试官眼里都是加分项!

缓存数据的处理流程

缓存的简单处理流程如下:

  1. 如果用户请求的数据命中缓存,就直接返回

  2. 缓存中不存在的话,查看数据库中是否存在

  3. 如果数据库中存在,则更新缓存中的数据

  4. 如果数据库中不存在,则返回空数据

上图就是一个最为简易的缓存流程图,从图中我们也可以看出在使用缓存时的一系列注意事项,比如当缓存失效时,如何更好的保护数据库,如何保证数据库与缓存数据一致等

Redis 运行模式(单进程还是单线程)

Redis 是单线程,利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销问题

一个字符串能存储的最大容量

512 M

为什么要使用缓存

高性能

将高频访问的数据放进缓存,保证高频操作可以快速响应,提高系统响应速度和用户体验

高并发

一般像 MySQL 这类数据库的 QPS 大概都在 1w 左右(4 核 8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到 30w+(redis 集群的话会更高)

QPS(Query Per Second):服务器每秒可以执行的查询次数

所以增加缓存可以大大提高系统的并发能力

具体说说 Redis 可以做什么

缓存

缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够很好的为一个网站的稳定保驾护航

排行榜系统

排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照 发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统

计数器应用

计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有 浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择

社交网络

赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis 提供的数据结构可以相对比较容易地实现这些功能

消息队列系统

消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务 解耦、非实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足

哪些是 Redis 不可以(不擅长)做的

我们可以站在数据规模和数据冷热的角度来进行分析

站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们 知道 Redis 的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用 Redis 来存储的话,基本上是个无底洞,经济成本相当的高

站在数据冷热的角度看,数据分为热数据和冷数据,热数据通

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis(Remote Dictionary Server)是一种高性能、内存存储数据的非关系型数据库,它的出现极大地推动了内存存储技术的发展。很多公司在高并发、分布式缓存、任务统计等方面使用Redis。由于Redis的使用广泛性和在很多场景下的高可用性,很多公司都在招聘Redis相关的开发人员,而Redis面试题也就变成了应聘者面试过程中的重要内容之一。 首先,Redis面试题通常涵盖了Redis的原理和基础使用、Redis在开发中的常见应用场景和应用方式、Redis的性能优化和安全问题等方面。以下是一些常见的Redis面试题: 1. Redis有哪些数据类型? 2. Redis的过期键是如何实现的? 3. Redis的持久化机制有哪些? 4. Redis的并发处理是如何实现的? 5. Redis如何实现分布式锁? 6. Redis在哪些场景下适合使用? 7. 如何保证Redis的高可用性? 8. Redis的性能优化有哪些方法? 9. Redis的数据备份和恢复如何实现? 10. Redis如何避免被恶意攻击? 以上是一些常见的Redis面试题,涵盖了Redis的基础知识、应用场景、性能、安全等各个方面。应聘者需要在这些方面具备较为扎实的知识,才能在面试中给出令面试官满意的答案。 总之,对于想要在Redis开发方向发展的人来说,熟练掌握Redis的基础知识、有丰富的实际项目经验、了解Redis的优化和安全方面,是成为一名优秀Redis开发人员的必要条件。而在面试中,应聘者需要思路清晰、语言准确、答案恰当,才能成功通过面试并拿到心仪的工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值