Redis内存管理:LRU策略与实现

需积分: 5 0 下载量 94 浏览量 更新于2024-08-03 收藏 6KB MD 举报
“优胜劣汰——LRU(1)” 在 Redis 中,内存管理是一个关键问题,特别是当内存使用超过物理内存限制时,系统可能会进行磁盘交换,导致性能显著下降。为了避免这种情况,Redis 提供了一个名为 `maxmemory` 的配置选项,允许用户设定内存使用的上限。一旦达到这个上限,Redis 就需要执行内存淘汰策略,以释放空间来继续服务读写请求。 内存淘汰策略主要有以下几种: 1. **noeviction**:这是默认策略,当内存达到上限时,不再接受写请求(但 DEL 请求除外),读请求仍可继续,确保数据完整性,但可能导致线上业务中断。 2. **volatile-lru**:此策略优先淘汰有过期时间的 key,并且选择最近最少使用的 key。这保护了未设置过期时间的 key,确保了持久化数据的安全。 3. **volatile-ttl**:与 volatile-lru 类似,但根据 key 的剩余生存时间(ttl)进行淘汰,ttl 值越小的 key 越优先被淘汰。 4. **volatile-random**:在有过期时间的 key 集合中随机选择一个 key 进行淘汰。 5. **allkeys-lru**:与 volatile-lru 相反,它会淘汰所有 key,包括未设置过期时间的 key。适用于仅作为缓存的 Redis 实例。 6. **allkeys-random**:在所有 key 中随机选择一个进行淘汰,无论其是否有过期时间。 volatile-xxx 策略只对带有过期时间的 key 执行淘汰操作,适合那些希望同时利用 Redis 缓存和持久化功能的场景。而 allkeys-xxx 策略则适用于纯粹的缓存用途,客户端在写入缓存时无需设置过期时间。 LRU(Least Recently Used)算法的实现通常涉及到一个额外的数据结构,即一个链表。链表中的每个节点代表一个 key,它们按照访问顺序排列,最近访问的 key 放在链表头部,最久未访问的 key 在链表尾部。当需要淘汰 key 时,会删除链表尾部的元素。当某 key 被访问时,该节点会被移动到链表头部,从而反映出最新的访问顺序。 这种设计使得 LRU 算法能够高效地找出最近最少使用的 key 进行淘汰,以尽可能保持常用 key 的缓存状态,同时在内存受限时确保服务的可用性。然而,由于维护额外的链表结构,LRU 算法的内存开销相对较大,但它提供了良好的性能和空间利用效率之间的平衡。在实际应用中,根据具体的业务需求和资源限制,选择合适的内存淘汰策略至关重要。
2021-11-17 上传

[root@QAQ ~]# sudo tail -n 50 /var/log/mysql/error.log 2023-07-14T02:45:21.370949Z 0 [Note] Shutting down plugin 'partition' 2023-07-14T02:45:21.370952Z 0 [Note] Shutting down plugin 'BLACKHOLE' 2023-07-14T02:45:21.370954Z 0 [Note] Shutting down plugin 'ARCHIVE' 2023-07-14T02:45:21.370956Z 0 [Note] Shutting down plugin 'PERFORMANCE_SCHEMA' 2023-07-14T02:45:21.370993Z 0 [Note] Shutting down plugin 'MRG_MYISAM' 2023-07-14T02:45:21.370995Z 0 [Note] Shutting down plugin 'MyISAM' 2023-07-14T02:45:21.371003Z 0 [Note] Shutting down plugin 'INNODB_SYS_VIRTUAL' 2023-07-14T02:45:21.371011Z 0 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES' 2023-07-14T02:45:21.371013Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES' 2023-07-14T02:45:21.371015Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS' 2023-07-14T02:45:21.371017Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN' 2023-07-14T02:45:21.371018Z 0 [Note] Shutting down plugin 'INNODB_SYS_FIELDS' 2023-07-14T02:45:21.371020Z 0 [Note] Shutting down plugin 'INNODB_SYS_COLUMNS' 2023-07-14T02:45:21.371022Z 0 [Note] Shutting down plugin 'INNODB_SYS_INDEXES' 2023-07-14T02:45:21.371024Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESTATS' 2023-07-14T02:45:21.371026Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLES' 2023-07-14T02:45:21.371028Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_TABLE' 2023-07-14T02:45:21.371030Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_CACHE' 2023-07-14T02:45:21.371032Z 0 [Note] Shutting down plugin 'INNODB_FT_CONFIG' 2023-07-14T02:45:21.371033Z 0 [Note] Shutting down plugin 'INNODB_FT_BEING_DELETED' 2023-07-14T02:45:21.371035Z 0 [Note] Shutting down plugin 'INNODB_FT_DELETED' 2023-07-14T02:45:21.371037Z 0 [Note] Shutting down plugin 'INNODB_FT_DEFAULT_STOPWORD' 2023-07-14T02:45:21.371039Z 0 [Note] Shutting down plugin 'INNODB_METRICS' 2023-07-14T02:45:21.371041Z 0 [Note] Shutting down plugin 'INNODB_TEMP_TABLE_INFO' 2023-07-14T02:45:21.371043Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_POOL_STATS' 2023-07-14T02:45:21.371045Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE_LRU' 2023-07-14T02:45:21.371047Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE' 2023-07-14T02:45:21.371049Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX_RESET' 2023-07-14T02:45:21.371050Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX' 2023-07-14T02:45:21.371052Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET' 2023-07-14T02:45:21.371054Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM' 2023-07-14T02:45:21.371056Z 0 [Note] Shutting down plugin 'INNODB_CMP_RESET' 2023-07-14T02:45:21.371058Z 0 [Note] Shutting down plugin 'INNODB_CMP' 2023-07-14T02:45:21.371060Z 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS' 2023-07-14T02:45:21.371062Z 0 [Note] Shutting down plugin 'INNODB_LOCKS' 2023-07-14T02:45:21.371064Z 0 [Note] Shutting down plugin 'INNODB_TRX' 2023-07-14T02:45:21.371066Z 0 [Note] Shutting down plugin 'InnoDB' 2023-07-14T02:45:21.371100Z 0 [Note] InnoDB: FTS optimize thread exiting. 2023-07-14T02:45:21.371135Z 0 [Note] InnoDB: Starting shutdown... 2023-07-14T02:45:21.471280Z 0 [Note] InnoDB: Dumping buffer pool(s) to /www/server/data/ib_buffer_pool 2023-07-14T02:45:21.471421Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 230714 10:45:21 2023-07-14T02:45:22.992635Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2767468 2023-07-14T02:45:22.993964Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1" 2023-07-14T02:45:22.993980Z 0 [Note] Shutting down plugin 'MEMORY' 2023-07-14T02:45:22.993985Z 0 [Note] Shutting down plugin 'CSV' 2023-07-14T02:45:22.993989Z 0 [Note] Shutting down plugin 'sha256_password' 2023-07-14T02:45:22.993991Z 0 [Note] Shutting down plugin 'mysql_native_password' 2023-07-14T02:45:22.994103Z 0 [Note] Shutting down plugin 'binlog' 2023-07-14T02:45:22.994915Z 0 [Note] /www/server/mysql/bin/mysqld: Shutdown complete

2023-07-20 上传

[root@QAQ ~]# sudo tail -n 50 /var/log/mysql/error.log 2023-07-14T02:43:01.816556Z 0 [Note] Shutting down plugin 'partition' 2023-07-14T02:43:01.816558Z 0 [Note] Shutting down plugin 'BLACKHOLE' 2023-07-14T02:43:01.816566Z 0 [Note] Shutting down plugin 'ARCHIVE' 2023-07-14T02:43:01.816568Z 0 [Note] Shutting down plugin 'PERFORMANCE_SCHEMA' 2023-07-14T02:43:01.816594Z 0 [Note] Shutting down plugin 'MRG_MYISAM' 2023-07-14T02:43:01.816597Z 0 [Note] Shutting down plugin 'MyISAM' 2023-07-14T02:43:01.816605Z 0 [Note] Shutting down plugin 'INNODB_SYS_VIRTUAL' 2023-07-14T02:43:01.816608Z 0 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES' 2023-07-14T02:43:01.816610Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES' 2023-07-14T02:43:01.816612Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS' 2023-07-14T02:43:01.816614Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN' 2023-07-14T02:43:01.816616Z 0 [Note] Shutting down plugin 'INNODB_SYS_FIELDS' 2023-07-14T02:43:01.816618Z 0 [Note] Shutting down plugin 'INNODB_SYS_COLUMNS' 2023-07-14T02:43:01.816620Z 0 [Note] Shutting down plugin 'INNODB_SYS_INDEXES' 2023-07-14T02:43:01.816622Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESTATS' 2023-07-14T02:43:01.816624Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLES' 2023-07-14T02:43:01.816626Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_TABLE' 2023-07-14T02:43:01.816628Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_CACHE' 2023-07-14T02:43:01.816630Z 0 [Note] Shutting down plugin 'INNODB_FT_CONFIG' 2023-07-14T02:43:01.816632Z 0 [Note] Shutting down plugin 'INNODB_FT_BEING_DELETED' 2023-07-14T02:43:01.816634Z 0 [Note] Shutting down plugin 'INNODB_FT_DELETED' 2023-07-14T02:43:01.816636Z 0 [Note] Shutting down plugin 'INNODB_FT_DEFAULT_STOPWORD' 2023-07-14T02:43:01.816638Z 0 [Note] Shutting down plugin 'INNODB_METRICS' 2023-07-14T02:43:01.816640Z 0 [Note] Shutting down plugin 'INNODB_TEMP_TABLE_INFO' 2023-07-14T02:43:01.816642Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_POOL_STATS' 2023-07-14T02:43:01.816644Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE_LRU' 2023-07-14T02:43:01.816645Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE' 2023-07-14T02:43:01.816647Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX_RESET' 2023-07-14T02:43:01.816649Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX' 2023-07-14T02:43:01.816651Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET' 2023-07-14T02:43:01.816653Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM' 2023-07-14T02:43:01.816655Z 0 [Note] Shutting down plugin 'INNODB_CMP_RESET' 2023-07-14T02:43:01.816657Z 0 [Note] Shutting down plugin 'INNODB_CMP' 2023-07-14T02:43:01.816659Z 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS' 2023-07-14T02:43:01.816661Z 0 [Note] Shutting down plugin 'INNODB_LOCKS' 2023-07-14T02:43:01.816664Z 0 [Note] Shutting down plugin 'INNODB_TRX' 2023-07-14T02:43:01.816666Z 0 [Note] Shutting down plugin 'InnoDB' 2023-07-14T02:43:01.816703Z 0 [Note] InnoDB: FTS optimize thread exiting. 2023-07-14T02:43:01.816748Z 0 [Note] InnoDB: Starting shutdown... 2023-07-14T02:43:01.916861Z 0 [Note] InnoDB: Dumping buffer pool(s) to /www/server/data/ib_buffer_pool 2023-07-14T02:43:01.917024Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 230714 10:43:01 2023-07-14T02:43:03.438469Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2767449 2023-07-14T02:43:03.439797Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1" 2023-07-14T02:43:03.439814Z 0 [Note] Shutting down plugin 'MEMORY' 2023-07-14T02:43:03.439819Z 0 [Note] Shutting down plugin 'CSV' 2023-07-14T02:43:03.439823Z 0 [Note] Shutting down plugin 'sha256_password' 2023-07-14T02:43:03.439825Z 0 [Note] Shutting down plugin 'mysql_native_password' 2023-07-14T02:43:03.439939Z 0 [Note] Shutting down plugin 'binlog' 2023-07-14T02:43:03.440752Z 0 [Note] /www/server/mysql/bin/mysqld: Shutdown complete

2023-07-15 上传