在逛知乎时,看到这样一个问题,觉得挺不错的,将自己个人的见解分享给大家。问题是:有哪些办法可以降低 Redis 的内存使用情况?
个人也对Redis做了一个比较全面的问题汇总,希望对大家有所帮助。Redis面试题汇总
要降低内存的使用。无非就是从数据的存、数据的剔除两个方面入手。
要现在合适的数据类型,我们就需要知道数据类型的底层结构。Redis底层数据结构主要有六种,这六种构成了五种常用的数据类型。其他的数据类型,例如bitmap、hyperLogLog也是基于这五大数据类型实现。具体的数据结构图如下:
从数据的剔除方面,需要考虑数据的过期机制、内存淘汰策略方面入手。淘汰策略主要是真针对数据一直存在内存中,导致内存无法接纳新的数据。重点是了解lru算法、lfu算法。
针对设置了过期时间的key:
针对所有的key:
不处理:
由于Redis的内存淘汰策略会主动删除数据,因此会出现一种情况,没有设置过期时间的key,却被删除了。
大多数情况都可以使用LRU算法;当存在大量热点缓存数据时,推荐使用LFU算法更好一些。(比如有一个热点key,在最近的5分钟内被访问的次数很少,使用LRU算法就会剔除;但是在5分钟之后,这个热点key被频繁访问。因此热点key应该以访问次数作为参考更好一些。)
过期策略是指数据在过期之后,还会占用这内容,这时候Redis是如何处理的?分别有下面三种方式: