对于开发者而言,缓存的接触必不可少,无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。
常见的缓存算法:
- LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。
- LFU (Least frequently used) 最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。
- FIFO (Fist in first out) 先进先出, 如果一个数据最先进入缓存中,则应该最早淘汰掉。
LRU缓存:
关于LRU缓存的原理,很多资料已经介绍的非常全面了,这里不再赘述。如:
https://zhuanlan.zhihu.com/p/34133067--LRU原理和Redis实现——一个今日头条的面试题
https://www.cnblogs.com/cpselvis/p/6272096.html--常见缓存算法和LRU的C++实现
设计思路:
如上图所示:我们可以使用hash表来存储key值,这样可以实现get(key)和put(key