Home > Database > Redis > body text

Detailed analysis of the data structure and data operations of Redis

coldplay.xixi
Release: 2021-02-08 21:28:12
forward
2220 people have browsed it

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!

source:csdn.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template