Home >Database >Redis >How to solve the problem of insufficient memory when using redis in php

How to solve the problem of insufficient memory when using redis in php

WBOY
WBOYforward
2023-06-01 16:37:121115browse

Solution to insufficient memory when using redis in php: 1. Set the maximum memory size of Redis to 100M through the configuration file or command; 2. Get the current memory elimination strategy; 3. Through "config Set maxmemory-policy allkeys-lru" command can be used to modify the elimination policy.

Memory size occupied by Redis

We know that Redis is a memory-based key-value database. Because the memory size of the system is limited, we are using Redis You can configure the maximum memory size that Redis can use.

1. Configure through the configuration file

Set the memory size by adding the following configuration to the redis.conf configuration file under the Redis installation directory

/ /Set the maximum memory size of Redis to 100M maxmemory 100mb

The redis configuration file does not necessarily use the redis.conf file under the installation directory. When starting the redis service, you can pass a parameter to specify the redis configuration file.

2. Modify through commands

Redis supports dynamically modifying the memory size through commands during runtime

//Set the maximum memory size occupied by Redis to 100M 127.0.0.1:6379> config set maxmemory 100mb //Get the maximum memory size that Redis can use 127.0.0.1:6379> config get maxmemory

If the maximum memory size is not set or the maximum memory size is set to 0 , there is no limit on the memory size under the 64-bit operating system, and up to 3GB of memory can be used under the 32-bit operating system

Redis memory elimination

Now that the maximum occupancy of Redis can be set memory size, then the configured memory will be used up. Then when the memory runs out, won't there be no memory available if we continue to add data to Redis? In fact, Redis defines several strategies to handle this situation: noeviction (default strategy): No longer provides services for write requests and directly returns an error (except for DEL requests and some special requests) allkeys-lru: Use the LRU algorithm to eliminate from all keys volatile-lru: Use the LRU algorithm to eliminate from the keys with expiration time set allkeys-random: From Randomly eliminate data in all keys volatile-random: Randomly eliminate data from keys with expiration time set volatile-ttl: In keys with expiration time set, according to the expiration time of the key For elimination, the sooner they expire, the more priority they will be eliminated. When creating a strategy, if no key can be eliminated, the same error will be returned as

noeviction
How to obtain and set the memory elimination strategyGet the current Memory elimination policy: 127.0.0.1:6379> config get maxmemory-policy

Set the elimination policy through the configuration file (modify the redis.conf file): maxmemory-policy allkeys-lru

Modify the elimination policy through the command:

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

LRU algorithm

What is LRU?

As mentioned above, when the maximum memory available for Redis is used up, the LRU algorithm can be used for memory elimination. So what is the LRU algorithm?

LRU (Least Recently Used)

, which is the least recently used, is a cache replacement algorithm. When using memory as a cache, the size of the cache is generally fixed. When the cache is full and you continue to add data to the cache, you need to eliminate some old data and free up memory space to store new data. At this time, the LRU algorithm can be used. The core idea is: If a piece of data has not been used in the recent period, the possibility of being used in the future is very small, so it can be eliminated.

Implementation of LRU in Redis

Approximate LRU algorithm

Redis uses the approximate LRU algorithm, which is similar to the conventional The LRU algorithm is not quite the same. The approximate LRU algorithm eliminates data through random sampling, randomly selecting 5 (default) keys each time, and eliminating the least recently used keys. The number of samples can be modified through the maxmemory-samples parameter: Example: maxmemory-samples 10 The larger the maxmenory-samples configuration, the closer the elimination result is to the strict LRU algorithm

In order to achieve approximation, Redis The LRU algorithm adds an additional 24-bit field to each key to store the last time the key was accessed. What are the tools for building a PHP development environment?

1. phpStudy is the most commonly used development environment for novices to get started.

2. WampServer, WampServer is also as simple to operate as phpStudy and is more friendly to novices.

3. XAMPP, XAMPP (Apache MySQL PHP PERL) is a powerful integrated website building software package;

4. MAMP, MAMP is divided into two types: MAMP and MAMP Pro for Mac.

5. Pagoda Panel, Pagoda Panel is a server management software that supports Windows and Linux systems.

6. UPUPW, UPUPW is currently the most distinctive web server PHP suite under the Windows platform.

The above is the detailed content of How to solve the problem of insufficient memory when using redis in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete