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:
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:
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.
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!