Home  >  Article  >  Database  >  Troubleshooting Redis blocking problems

Troubleshooting Redis blocking problems

尚
forward
2020-04-08 09:12:592821browse

Troubleshooting Redis blocking problems

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.

You need to pay attention to the Scan command. This command can only scan data on a single Redis. If you are a cluster, you need to execute it once on each machine. But if you use an open source client (for example: Java's Lettuce client), it will already help you implement the scan command to scan the entire cluster.

3. Then split the large object. The specific split will depend on the business.

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 disk

2. 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 expansion

4. 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 CPU

Memory exchange

Redis is an in-memory database, and all data is placed in memory. Therefore, it is strongly recommended not to enable memory swap

Network 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 the

redis 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!

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