作为后端工程师,我们在面试和工作中都会用到 Redis,特别是大型互联网公司面试时,不仅要求面试者能简单使用 Redis,还要求懂 Redis 源码层面的实现原理,具备解决常见问题的能力。可以说,熟练使用 Redis 仅仅是入门,能够真正掌握 Redis 源码才是真正的考验。

 

不过,我们平常接触不到源码层面的东西,更多的只是将 Redis 作为一个缓存系统或数据库来存取数据。因此大多数工程师在排查问题故障点,或是技术面试时,都还是可能会遇到阻碍。

 

举个简单的例子,Redis 在运行过程中,随着保存数据的增加,会进行 rehash 操作,而此操作会对 Redis 的性能造成一定影响。如果要快速定位问题,就需要了解 rehash 的具体触发时机,包括触发条件,以及操作过程中会对触发条件进行判断等等。

 

但是,从 Rehash 具体到 Redis ,会面临很多复杂的现实问题:

 

  • 哈希表的负载因子是怎么算的?
  • 除负载因子这一条件外,是否还有其他触发条件?
  • rehash 触发条件的判断在哪些函数中进行调用?
 解答这些问题最好的办法就是:阅读和学习 Redis 源码。通过学习源码,来进一步掌握 Redis 的实现细节,了解关键设计原理和机制。而 Redis 运行过程中要判断和处理的各种条件,这也正对应了性能、故障问题的排查思路,所以能更高效地解决问题。