Home >Database >Redis >Detailed analysis of the data structure and data operations of Redis

Detailed analysis of the data structure and data operations of Redis

coldplay.xixi
coldplay.xixiforward
2021-02-08 16:20:072251browse

Detailed analysis of the data structure and data operations of Redis

Recommended (free): redis

The speed of Redis to complete data operations can reach the microsecond level, Redis can There are two main reasons for such outstanding performance:

  • Redis is an in-memory database, all operations are completed in memory, and the memory access speed itself is very fast;
  • Redis Have efficient data types and data structures.

In order to achieve fast access from key to value, Redis uses a hash table to store key-value pairs. The entry in the hash bucket saves pointers to the actual key and value, even if the value is A collection can also be found through the value pointer.

When there is more and more data in the hash table, hash conflicts will occur, that is, the hash values ​​of multiple keys may correspond to the same hash bucket. Redis uses chained hashing to resolve hash conflicts, which means that multiple elements in the same hash bucket are stored in a linked list, and the elements are linked by pointers in turn.

If there are more and more hash conflicts, the hash conflict chain will be too long, which will lead to long time and low efficiency in finding elements. In order to solve this problem, Redis will perform a rehash operation on the hash table to store multiple entry elements in a dispersed manner, reducing the number of elements in a single hash bucket, thereby reducing conflicts in a single bucket.

Redis uses two global hash tables by default for efficient rehash. Hash table 1 is used by default at the beginning, and hash table 2 does not allocate space. When the data continues to increase, redis performs rehash through the following steps:

  1. Allocate more space to hash table 2
  2. Copy the data in hash table 1 to hash table 2
  3. Release the hash table 1 space is reserved for the next rehash expansion

However, if a large amount of data is copied at one time in step 2, it may cause the Redis thread to be blocked and unable to serve other requests, so Redis adopts a gradual approach. Rehash means that every time a request is processed, all entries at this index position are copied.

For String type value, you can directly perform CRUD operations after finding the hash bucket. For sets, after finding the corresponding hash bucket through the global hash table, in the set Then perform CRUD. The operation efficiency of a collection is related to the underlying data structure and operation complexity.

  1. Single element operation is the basis, and the operation complexity is O(1);
    • Hash: HGET, HSET, HDEL;
    • Set type SADD, SREM, SRANDMEMBER, etc.
  2. Range operations are very time-consuming and the operation complexity is O(N).
    • Hash:HGETALL;
    • Set:SMEMBERS;
    • List:LRANGE
    • ZSet:ZRANGE
  3. Statistical operations are usually efficient, with operation complexity O(1).
  4. There are only a few exceptions, and the operation complexity is O(1).
    • List: LPOP, RPOP, LPUSH, RPUSH

The above is the detailed content of Detailed analysis of the data structure and data operations of Redis. For more information, please follow other related articles on the PHP Chinese website!

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