本文是技术面试系列Redis篇,你在面试中关于Redis被常问的高频面试题都有哪些?下面一文带你详细了解,欢迎收藏!

  • Redis与Memcache的区别?

  • Redis的单线程问题?

  • Redis的持久化方案由哪些?

  • Redis的集群方式有哪些?

  • Redis的常用数据类型有哪些?

  • 聊一下Redis事务机制?

  • Redis的Key过期策略?

  • Redis在项目中的哪些地方有用到?

  • Redis的缓存击穿、缓存雪崩、缓存穿透?

  • 缓存冷热数据分离?

  • Redis实现分布式锁?

  • 如何实现数据库与缓存数据一致?

1.Redis与Memcache的区别?

  • redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。

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

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

2.Redis的单线程问题

面试官:Redis采用单线程,如何保证高并发?

面试话术:Redis快的主要原因是:

  1. 完全基于内存

  2. 数据结构简单,对数据操作也简单

  3. 使用多路 I/O 复用模型,充分利用CPU资源

面试官:这样做的好处是什么?

面试话术:单线程优势有下面几点:

  • 代码更清晰,处理逻辑更简单

  • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为锁而导致的性能消耗

  • 不存在多进程或者多线程导致的CPU切换,充分利用CPU资源

3.Redis的持久化方案由哪些?

相关资料:

1)RDB 持久化

RDB持久化可以使用save或bgsave,为了不阻塞主进程业务,一般都使用bgsave,流程:

  • Redis 进程会 fork 出一个子进程(与父进程内存数据一致)。

  • 父进程继续处理客户端请求命令