Redis is a single-threaded architecture, and all operations are completed in a main thread. So once Redis is blocked, it will be a nightmare. Next, let's take a look at the blocking problem with Redis. How to troubleshoot and resolve.
Unreasonable use of Redis data structure or API
There are large objects and complex and higher commands are performed on large objects
1. Perform hgetall operation or del operation on a hash with tens of millions of elements. Similar operations will cause Redis to block
2. For such large objects, you can Use redis-cli -h {host} -p {port} bigkeys to view. However, this command can only query the largest key in a certain type. If you want to query multiple. You can modify the redis-cli source code (the source code of Redis is C). If you don't want to modify the source code, you can also use scan to complete it.
The CPU usage of Redis is close to 100%
1. The slave synchronizes the host data. After the slave receives the rdb file, it loads the data from the disk2. The master-slave persists the data. 3. If the CPU usage reaches 100%, it may be that the number of real business visits is really large. A single Redis can handle 60,000 requests per second. At this time, we can only do horizontal expansion4. If the number of Redis operations per second is only a few hundred or thousands, and the CPU is still very high, it is possible to use commands with high algorithm complexity. For example hgetall. Another possibility is that the memory is over-optimized. This situation has not been encountered yet, but it is also considered.Cpu Competition
1. Redis is a CPU-intensive application and is not suitable for deployment with other CPU-intensive services. 2. In the production environment, the configuration of one of our servers is a 32-core logical CPU and 256GB memory. It would be wasteful to deploy only one Redis on each machine. Therefore, multiple Redis may be deployed on one machine. The Redis process is usually bound to the CPU. But when generating RDB files or AOF persistence, child processes will be generated. In this way, the child process and the parent process will compete for the CPU. So when turning on persistence or the master node. It is not recommended to bind the CPUMemory exchange
Redis is an in-memory database, and all data is placed in memory. Therefore, it is strongly recommended not to enable memory swapNetwork problems
If the master-slave synchronization network delay is large, the slave machine will often disconnect and reconnect. If disconnected for a long time. As a result, the slave machine will be fully synchronized when it connects to the master machine again. At this time, both the master machine and the slave machine will be affected. For more redis knowledge, please pay attention to theredis introductory tutorial column.
The above is the detailed content of Troubleshooting Redis blocking problems. For more information, please follow other related articles on the PHP Chinese website!