关于redis:redis-内存满了怎么办

淘汰机制

在redis.conf中,能够配置maxmemory 100mb来设置redis的内存,如果设置为0,在64位零碎中,有多少内存就能够应用多少,在32位零碎中,能够应用3GB的内存。有些key设置过期工夫的,所以redis会清理掉使之不占内存空间,有些key是没有设置过期工夫的,这些key会始终占用内存空间,当内存达到指定的内存大小maxmemory时,redis有以下几种淘汰机制提供抉择:

  • noeviction:当内存满的时候,回绝写入。
  • allkeys-lru:当内存满的时候,移除最近应用较少的(LRU)key。
  • volatile-lru:当内存满的时候,在设置过期的key中移除最近应用较少的(LRU)key。
  • allkeys-random:当内存满的时候,随机移除key。
  • volatile-random:当内存满的时候,在设置过期的key中随机移除key。
  • volatile-ttl:当内存满的时候,在设置过期的key中移除快要过期的key。

allkeys-lru是比拟罕用的机制,依据应用工夫,大概率的保留应用频繁的内存,进步零碎的拜访性能。比方A数据,应用很频繁,能够在内存中始终获取数据,而不必从数据库读取数据。如果保留的B数据,几天才拜访一次,就占用了内存空间。
allkeys-random在循环拜访的时候,能够用的上,因为所有的key拜访的频率是一样的,感觉应用场景不多。
noeviction应用的场景不多,volatile-lruvolatile-randomvolatile-ttl对于设置过期的key的场景,也没有很多。
淘汰机制是如何工作的呢?

  1. 客户端发送增加数据的命令。
  2. redis查看内存空间是否超过maxmemory的配置值,如果超过了,应用相应的淘汰机制清理数据。
  3. 执行客户端的命令。

这个流程有可能使理论内存大于maxmemory的配置值。比方以后的内存大于等于maxmemory的配置值100mb,redis清理后还有99MB,而后执行客户端命令,插入了1.1MB,这样redis中就有了100.1MB。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据