>  기사  >  백엔드 개발  >  PHP가 redis를 사용하는데 메모리가 부족하면 어떻게 해야 합니까?

PHP가 redis를 사용하는데 메모리가 부족하면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2022-11-06 09:48:251642검색

PHP가 redis를 사용할 때 메모리 부족에 대한 해결 방법: 1. 구성 파일 또는 명령을 통해 Redis의 최대 메모리 크기를 100M로 설정합니다. 2. 현재 메모리 제거 전략을 가져옵니다. 3. "config set maxmemory-policy"를 통해 수정합니다. allkeys-lru" 명령 그냥 전략을 제거하세요.

PHP가 redis를 사용하는데 메모리가 부족하면 어떻게 해야 합니까?

本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。

Redis™용 内存大小

我们知道Redis是基于内存의 키-값은 数据库,因为系统的内存,大小有限所以我们基于内存의 Redis의 时候可以配置Redis는 매우 큰 규모로 사용됩니다.

1. 일반적으로 Redis에서 Redis 보안을 유지하는 redis.conf配置文以下配置设置内存大

//设置Redis最大·용内存大小为100M 최대 메모리 100mb

redis의 配置文件불일정 사용 가능한 redis.conf 문자는 启动redis에 사용되는 저장소입니다.改

Redis支持运行时通过命令动态修改内存大小

//设置Redis最大·용内存大小为100M 127.0.0.1:6379> config set maxmemory 100mb //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory

如果不设置最大内存大小或者设置最大内存大小为0,64位操系统下不限 창작内存大存大最多3GB 용량을 사용할 수 있습니다

Redis의 스토리지는 2GB입니다.

既然可以设置Redis는 大内存大小,那么配置의 内存就유용한 时候입니다.就没内存可用了吗?实际上Redis定义了几种策略用来处理这种情况:

noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求와 特殊分请求除밖)allkeys-lru

:从所有key中使用LRU算法进行淘汰

휘발성-lru:从设置了过期时间的key中使用LRU算法进行淘汰allkeys-random:从所有key中随机淘汰数据휘발성-random:从设置了过期时间的key中随机淘汰휘발성 -ttl: 에서 设置了被淘汰当使사용 휘발성 lru 휘발성-random

휘발성-ttl这三种策略时,如果没有key可以被淘汰,则和 noeviction一样返回错误如何获取及设置内存淘汰策略
获取当前内存淘汰策略:

127.0.0.1:6379> config get maxmemory-policy

communications配置文件设置淘汰策略(修改redis.conf文件):

maxmemory-policy allkeys-lru

过命令修改汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru

LRU算法

什么是LRU?

상면说到了Redis可使用最大内存使用完了,是可LRU算법을 사용하여 LRU算법을 실행하는 것이 좋습니다. 응?

LRU(Least Recent Used)는 가장 최근에 사용된 캐시 교체 알고리즘입니다. 메모리를 캐시로 사용하는 경우 캐시의 크기는 일반적으로 고정되어 있습니다. 캐시가 가득 차고 계속해서 캐시에 데이터를 추가하는 경우 오래된 데이터 일부를 제거하고 새 데이터를 저장할 메모리 공간을 확보해야 합니다. 이때 LRU 알고리즘을 사용할 수 있다. 핵심 아이디어는: 최근 기간에 데이터 조각이 사용되지 않은 경우 향후 사용될 가능성이 매우 적으므로 제거할 수 있다는 것입니다.

Redis에서 LRU 구현

Approximate LRU 알고리즘

Redis는 기존 LRU 알고리즘과 동일하지 않은 대략적인 LRU 알고리즘을 사용합니다. 근사 LRU 알고리즘은 무작위 샘플링을 통해 데이터를 제거하고, 매번 무작위로 5개(기본값) 키를 선택하고, 가장 최근에 사용된 키를 제거합니다.

maxmemory-samples 매개변수를 통해 샘플 수를 수정할 수 있습니다. 예: maxmemory-samples 10 maxmenory-samples 구성이 클수록 제거 결과는 엄격한 LRU 알고리즘에 더 가까워집니다.

대략적인 LRU를 구현하려면 알고리즘에 따라 Redis는 각 키에 추가 값을 추가합니다. 키에 마지막으로 액세스한 시간을 저장하기 위해 추가 24비트 필드가 추가됩니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP가 redis를 사용하는데 메모리가 부족하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.