redis默认内存大小是多少,你是如何配置redis内存大小的
1.在64位机器下,如果没有配置redis内存大小,则默认是系统自身最大内存,如果是32位系统,则最大3G内存
2.如果手动配置redis内存,打开redis.conf 配置文件,设置maxmemory参数,maxmemory是bytes字节类型。
3.一般推荐redis设置内存为最大物理内存的四分之三。
4.查看redis内存命令:config get maxmemory ,设置内存命令:config get maxmemory 1024
如果redis内存使用超出了设置的最大值会怎么样?
1.直接会报OOM内存溢出
redis三种不同的删除策略
1.定时删除
-
能保证内存中数据的最大新鲜度,因为它保证过期键会在过期后马上被删除,但是对cpu不友好,因为删除会占用cup时间,如果cpu在繁忙的时候,就会给cup造成额外压力
-
缺点:对cpu不友好,用处理器性能换取存储空间(拿时间换空间)
2.惰性删除
-
数据到达过期时间,不会做处理,等下次访问数据时,如果未过期,返回数据,发现已过期,则删除,这种在极端情况下,一个键如果过期,一直没被访问,它会占用内存一直不会释放,浪费内存资源
-
缺点:对内存不友好,用存储空间换取处理器的性能(拿空间换时间)
定期删除
- 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制,删除操作执行的时长和频率,来减少删除操作对cpu时间的影响。
- 比如:周期性的轮询redis库中年的时效性数据,采用随机抽取策略,利用过期数据占比的方式控制删除频度
- 特点:cpu性能占用设置有峰值,检测频度可以自动以设置,内存压力不是很大,长期占用内存的冷数据会被持续清理
- 定期删除策略的难点是,确定删除操作执行的时长和频率:如果删除操作执行的频繁,或者执行的时间太久,定期删除策略就会退化定时删除策略,以至于CPU时间过多的消耗在删除过期键上,如果删除操作执行的太少,或者执行的时间太短,定时删除策略又会和惰性策略一样,出现浪费内存的情况。因此采用此策略,服务器必须根据情况,合理的设置删除操作的执行时长和执行频率
- 总结: 周期性抽查存储空间(随机抽查,重点抽查)
举例:redis默认每个100ms检查,是否有过期的key,有过期的key则删除。注意:redis不是每隔100ms将所有key检查一次,而是随机抽取进行检查。因此,如果采用定期删除策略,会导致很多key到时间没有删除。
内存淘汰策略
- 一般用第二种,最近最少使用,是一种常用的页面置换算法。选择最近最久没使用的数据予以淘汰。
LRU淘汰策略算法实现请看另外一篇博客:详解redis的淘汰策略LRU算法实现