Home Database Redis A summary of 30 frequently asked questions about Redis!

A summary of 30 frequently asked questions about Redis!

Sep 25, 2021 pm 04:22 PM
redis

1.How does Redis perform memory optimization?

Use hash tables (hashes) as much as possible. Hash tables (meaning that the number stored in the hash table is small) use very small memory, so you should abstract your data model as much as possible Inside a hash table.

For example, if you have a user object in your web system, do not set a separate key for the user's name, surname, email, and password. Instead, you should store all the user's information in a hash table. .

2. What is the use of pipelines in Redis?

A request/response server can handle new requests even if old requests have not yet been responded to. This makes it possible to send multiple commands to the server without waiting for a reply, and finally read the reply in one step.

This is pipelining, a technique that has been widely used for decades. For example, many POP3 protocols have implemented support for this feature, which greatly speeds up the process of downloading new emails from the server.

3. What is the relationship between Redis and Redisson?

Redisson is an advanced distributed coordination Redis client that can help users easily implement some Java objects (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map) in a distributed environment , ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog).

4.What are the suitable scenarios for Redis?

(1) Session Cache

One of the most commonly used scenarios for using Redis is session cache. The advantage of using Redis to cache sessions over other storage (such as Memcached) is that Redis provides persistence. When maintaining a cache that does not strictly require consistency, most people would be unhappy if all the user's shopping cart information was lost. Now, would they still be?

Fortunately, as Redis has improved over the years, it is easy to find how to properly use Redis to cache session documents. Even the well-known commercial platform Magento provides Redis plug-ins.

(2) Full page cache (FPC)

In addition to the basic session token, Redis also provides a very simple FPC platform. Back to the consistency issue, even if the Redis instance is restarted, users will not see a decrease in page loading speed because of disk persistence. This is a great improvement, similar to PHP local FPC.

Taking Magento as an example again, Magento provides a plug-in to use Redis as a full-page cache backend.

In addition, for WordPress users, Pantheon has a very good plug-in wp-redis, which can help you load the pages you have browsed as quickly as possible.

(3) Queue

One of the great advantages of Redis in the field of memory storage engines is that it provides list and set operations, which allows Redis to be used as a good message queue platform. The operations used by Redis as a queue are similar to the push/pop operations of list in local programming languages ​​(such as Python).

If you quickly search "Redis queues" in Google, you will immediately find a large number of open source projects. The purpose of these projects is to use Redis to create very good back-end tools to meet various queue needs. . For example, Celery has a backend that uses Redis as the broker. You can view it from here.

(4) Ranking/Counter

Redis implements the operation of incrementing or decrementing numbers in memory very well. Sets and Sorted Sets also make it very simple for us to perform these operations. Redis just provides these two data structures.

So, we want to get the top 10 users from the sorted set - we call them "user_scores", we just need to execute like the following: Of course, this is assuming that you are Sort in ascending order based on your users' scores. If you want to return the user and the user's score, you need to execute it like this:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games is a good example, implemented in Ruby, with its ranking list It uses Redis to store data, you can see it here.

(5) Publish/Subscribe

Last (but certainly not least) is the publish/subscribe function of Redis. There are indeed many use cases for publish/subscribe. I've seen people use it in social network connections, as triggers for publish/subscribe based scripts, and even to build chat systems using Redis' publish/subscribe functionality!

5. There are 20 million data in MySQL, but only 20 million data are stored in redis. How to ensure that the data in redis is hot data?

redis When the size of the memory data set increases to a certain size, the data elimination strategy will be implemented.

In fact, in addition to examining Redis during interviews, many companies attach great importance to high-concurrency and high-availability technologies, especially first-line Internet companies, distributed,

JVM, spring source code analysis, microservices and other knowledge Point is already a must-answer question in interviews.

6. Under what circumstances will the Redis cluster solution cause the entire cluster to become unavailable?

In a cluster with three nodes A, B, and C, without a replication model, if node B fails, the entire cluster will think that there is a lack of slots in the range of 5501-11000 and will be unavailable.

7. What should be done with the Redis cluster solution? What are the plans?

codis

The most commonly used cluster solution at present has basically the same effect as twemproxy, but it supports the recovery of old node data to new hash nodes when the number of nodes changes. .

redis cluster

The cluster that comes with 3.0 is characterized by the fact that its distributed algorithm is not consistent hashing, but the concept of hash slots, and it supports node setting slave nodes. See the official documentation for details. Implemented at the business code layer, several unrelated redis instances are created. At the code layer, the hash calculation is performed on the key, and then the corresponding redis instance is used to operate the data. This method has relatively high requirements for hash layer code. Considerations include alternative algorithm solutions after node failure, automatic script recovery after data shock, instance monitoring, etc.

8.What are the internal encodings of Redis String?

int, embstr, raw

Integers below 10000 will use the int constant in the cache.

Length less than or equal to 44 bytes: embstr encoding

Length greater than 44 bytes: raw encoding

9. How to use Redis as a delay queue? accomplish?

Can be implemented using Zset. Member is the task description, score is the execution time, and then use a timer to scan regularly. Once there is a task whose execution time is less than or equal to the current time, it will be executed immediately.

10. How does Redis locate the specific node when searching for keys in the cluster?

Use the crc16 algorithm to hash the key, take the hash value modulo 16384, and obtain the specific slot based on the mapping information of the node and the slot (after establishing a connection with the cluster, the client can obtain the slot Mapping information), find the specific node address and go to the specific node to find the key. If the key is not on this node, the redis cluster will return the moved command and add the new node address to the client. At the same time, the client will refresh the local node slot. Bit mapping relationship If the slot is being migrated, the redis cluster will return the asking command to the client. This is a temporary correction. The client will not refresh the local node slot mapping relationship

11.Redis Have you ever understood persistence?

Redis persistence has two methods: RDB and AOF.

RDB: Save the database snapshot to disk in binary form.

AOF: Record all commands and parameters written to the database to the AOF file in the form of protocol text, thereby recording the database status.

12. Under what circumstances will Redis trigger key recycling?

2 situations: 1. Regular (sampling) cleaning; 2. When executing the command, determine whether the memory exceeds maxmemory.

13. What are the elimination strategies for Redis key?

8 species: noeviction, volatile-lru, volatile-lfu, volatile-ttl, volatile-random, allkeylru, allkeys-lfu, allkeys-random

14. Have you understood the Redis transaction mechanism?

The concept of Redis transaction:

The essence of Redis transaction is a set of commands. Transactions support executing multiple commands at one time, and all commands in a transaction will be serialized. During the transaction execution process, the commands in the queue will be executed serially in order, and command requests submitted by other clients will not be inserted into the transaction execution command sequence.

Redis transaction is a one-time, sequential and exclusive execution of a series of commands in a queue.

Redis transactions have no concept of isolation level:

Batch operations are put into the queue cache before sending the EXEC command and will not be actually executed, so there are no queries within the transaction to see. Updates in the transaction cannot be seen by queries outside the transaction.

Redis does not guarantee atomicity:

In Redis, a single command is executed atomically, but transactions do not guarantee atomicity and there is no rollback. If any command in the transaction fails to execute, the remaining commands will still be executed.

Three stages of Redis transaction:

Start transaction

Command enqueue

Execute transaction

Redis transaction related commands:

watch key1 key2 ...: Monitor one or more keys. If the monitored key is changed by other commands before the transaction is executed, the transaction will be interrupted (similar to optimistic locking)

multi: Mark the start of a transaction block (queued)

exec: Execute the commands of all transaction blocks (once exec is executed, the previously added monitoring locks will be canceled)

discard: Cancel Transaction, abandon all commands in the transaction block

unwatch: Cancel watch’s monitoring of all keys

15. How to use Redis to count the UV of the website?

UV is different from PV, UV needs to be deduplicated. There are generally two solutions:

1. Use BitMap. What is stored is the user's uid. When calculating UV, just do the bitcount.

2. Use Bloom filter. Put the user uid of each visit into the bloom filter. The advantage is that it saves memory, but the disadvantage is that accurate UV cannot be obtained. But it is a good choice for scenes that do not need to know the specific UV accurately, but only need a rough order of magnitude.

16. How to deal with large keys in Redis?

Big key refers to a key with a particularly large value. For example, a very long string, or a large set, etc. Large keys will cause two problems:

1. Data skew, for example, the memory usage of some nodes is too high.

2. When a large key is deleted or a large key automatically expires, it will cause a sudden drop in QPS because Redis is single-threaded.

Solution: A large key can be fragmented, for example, a large set can be divided into multiple small sets.

17. How to deal with hot keys in Redis?

1. Distribute hot keys. For example: add different suffixes to the key, cache multiple keys, so that each key is distributed to different nodes.

2. Use multi-level cache.

18. Cache invalidation? Cache penetration? Cache avalanche? Cache concurrency?

Cache invalidation Cache invalidation means that a large number of caches fail at the same time, and the instantaneous pressure on the DB soars. The reason for this phenomenon is that the expiration time of the keys is set to the same value. The solution is to introduce random factors into the key's expiration time, such as 5 minutes and random seconds.

Cache penetration Cache penetration refers to querying a piece of data that is neither in the database nor in the cache. The database will always be queried, and the access pressure on the database will increase. The solutions for cache penetration are as follows Type 2: Cache empty objects: Code maintenance is simpler, but the effect is not good. Bloom filter: The code is complex to maintain, but the effect is very good.

Cache avalanche Cache avalanche refers to the centralized expiration of caches in a certain period of time. At this moment, countless requests directly bypass the cache and directly request the database. There are two reasons for cache avalanche: reids downtime. Most of the data is invalid.

There are two solutions to cache avalanche:

Build a highly available cluster to prevent stand-alone redis from going down.

Set different expiration times to prevent a large number of keys from invalidating within the agreement period.

Cache concurrency Sometimes if the website has high concurrent access, if a cache fails, multiple processes may query the DB at the same time and set up the cache at the same time. If the concurrency is really large, this may also cause excessive pressure on the DB. , and there is also the problem of frequent cache updates. The general solution is to lock when checking the DB. If the KEY does not exist, lock it, then check the DB into the cache, and then unlock it; if other processes find that there is a lock, wait, and then wait until it is unlocked before checking the cache or entering the DB. Inquire.

19. How to choose a database for Redis cluster?

Redis cluster currently cannot select database, and defaults to database 0.

20.How to set password and verify password in Redis?

Set password: config set requirepass 123456

Authorization password: auth 123456

21. Why does Redis need to put all data in memory?

In order to achieve the fastest reading and writing speed, Redis reads all the data into the memory and writes the data to the disk asynchronously.

So redis has the characteristics of fast speed and data persistence. If the data is not placed in the memory, the disk I/O speed will seriously affect the performance of redis.

As memory becomes cheaper and cheaper today, redis will become more and more popular. If the maximum memory usage is set, new values ​​cannot be inserted after the number of existing data records reaches the memory limit.

22.Why doesn’t Redis officially provide a Windows version?

Because the current Linux version is quite stable and has a large number of users, there is no need to develop a windows version, which will cause compatibility and other problems.

23. Is Redis single-threaded or multi-threaded?

Redis6.0 uses multi-threaded IO, but the execution of commands is still single-threaded.

Before Redis 6.0, the IO thread and execution thread were both single-threaded.

24. Why is Redis so fast?

1. Memory operation;

2. Single thread, eliminating the overhead of thread switching and lock competition;

3. Non-blocking IO model, epoll.

25. What is the maximum capacity that a string type value can store?

512M

26. What is the full name of Redis?

Remote Dictionary Server.

27.What physical resources does Redis mainly consume?

Memory.

28.What data structures does Redis have?

Redis has 5 basic data structures, which are: string (string), list (list), hash (dictionary), set (set) and zset (ordered set).

These 5 types are the most basic and important parts of Redis-related knowledge.

29. What are the advantages of Redis compared to memcached?

(1) All values ​​in memcached are simple strings, and redis, as its replacement, supports richer data types

(2) Redis is faster than memcached Much faster

(3) redis can persist its data

30. What is Redis? Briefly describe its advantages and disadvantages?

Redis is essentially a Key-Value type in-memory database, much like memcached. The entire database is loaded and operated in memory, and the database data is flushed to the hard disk through asynchronous operations at regular intervals for storage.

Because it is a pure memory operation, Redis's performance is very good. It can handle more than 100,000 read and write operations per second, and it is the fastest Key-Value DB with known performance.

The excellence of Redis is not just performance. The biggest charm of Redis is that it supports saving a variety of data structures. In addition, the maximum limit of a single value is 1GB. Unlike memcached, which can only save 1MB of data, Redis can be used to achieve Lots of useful features.

For example, use his List to make a FIFO doubly linked list to implement a lightweight high-performance message queue service, and use his Set to make a high-performance tag system, etc.

In addition, Redis can also set the expire time for the stored Key-Value, so it can also be used as an enhanced version of memcached. The main disadvantage of Redis is that the database capacity is limited by physical memory and cannot be used for high-performance reading and writing of massive data. Therefore, the scenarios suitable for Redis are mainly limited to high-performance operations and calculations of smaller amounts of data.

Recommended learning: "redis video tutorial"

The above is the detailed content of A summary of 30 frequently asked questions about Redis!. For more information, please follow other related articles on the PHP Chinese website!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1663
14
PHP Tutorial
1264
29
C# Tutorial
1237
24
How to build the redis cluster mode How to build the redis cluster mode Apr 10, 2025 pm 10:15 PM

Redis cluster mode deploys Redis instances to multiple servers through sharding, improving scalability and availability. The construction steps are as follows: Create odd Redis instances with different ports; Create 3 sentinel instances, monitor Redis instances and failover; configure sentinel configuration files, add monitoring Redis instance information and failover settings; configure Redis instance configuration files, enable cluster mode and specify the cluster information file path; create nodes.conf file, containing information of each Redis instance; start the cluster, execute the create command to create a cluster and specify the number of replicas; log in to the cluster to execute the CLUSTER INFO command to verify the cluster status; make

How to clear redis data How to clear redis data Apr 10, 2025 pm 10:06 PM

How to clear Redis data: Use the FLUSHALL command to clear all key values. Use the FLUSHDB command to clear the key value of the currently selected database. Use SELECT to switch databases, and then use FLUSHDB to clear multiple databases. Use the DEL command to delete a specific key. Use the redis-cli tool to clear the data.

How to read redis queue How to read redis queue Apr 10, 2025 pm 10:12 PM

To read a queue from Redis, you need to get the queue name, read the elements using the LPOP command, and process the empty queue. The specific steps are as follows: Get the queue name: name it with the prefix of "queue:" such as "queue:my-queue". Use the LPOP command: Eject the element from the head of the queue and return its value, such as LPOP queue:my-queue. Processing empty queues: If the queue is empty, LPOP returns nil, and you can check whether the queue exists before reading the element.

How to configure Lua script execution time in centos redis How to configure Lua script execution time in centos redis Apr 14, 2025 pm 02:12 PM

On CentOS systems, you can limit the execution time of Lua scripts by modifying Redis configuration files or using Redis commands to prevent malicious scripts from consuming too much resources. Method 1: Modify the Redis configuration file and locate the Redis configuration file: The Redis configuration file is usually located in /etc/redis/redis.conf. Edit configuration file: Open the configuration file using a text editor (such as vi or nano): sudovi/etc/redis/redis.conf Set the Lua script execution time limit: Add or modify the following lines in the configuration file to set the maximum execution time of the Lua script (unit: milliseconds)

How to use the redis command line How to use the redis command line Apr 10, 2025 pm 10:18 PM

Use the Redis command line tool (redis-cli) to manage and operate Redis through the following steps: Connect to the server, specify the address and port. Send commands to the server using the command name and parameters. Use the HELP command to view help information for a specific command. Use the QUIT command to exit the command line tool.

How to implement redis counter How to implement redis counter Apr 10, 2025 pm 10:21 PM

Redis counter is a mechanism that uses Redis key-value pair storage to implement counting operations, including the following steps: creating counter keys, increasing counts, decreasing counts, resetting counts, and obtaining counts. The advantages of Redis counters include fast speed, high concurrency, durability and simplicity and ease of use. It can be used in scenarios such as user access counting, real-time metric tracking, game scores and rankings, and order processing counting.

How to set the redis expiration policy How to set the redis expiration policy Apr 10, 2025 pm 10:03 PM

There are two types of Redis data expiration strategies: periodic deletion: periodic scan to delete the expired key, which can be set through expired-time-cap-remove-count and expired-time-cap-remove-delay parameters. Lazy Deletion: Check for deletion expired keys only when keys are read or written. They can be set through lazyfree-lazy-eviction, lazyfree-lazy-expire, lazyfree-lazy-user-del parameters.

How to optimize the performance of debian readdir How to optimize the performance of debian readdir Apr 13, 2025 am 08:48 AM

In Debian systems, readdir system calls are used to read directory contents. If its performance is not good, try the following optimization strategy: Simplify the number of directory files: Split large directories into multiple small directories as much as possible, reducing the number of items processed per readdir call. Enable directory content caching: build a cache mechanism, update the cache regularly or when directory content changes, and reduce frequent calls to readdir. Memory caches (such as Memcached or Redis) or local caches (such as files or databases) can be considered. Adopt efficient data structure: If you implement directory traversal by yourself, select more efficient data structures (such as hash tables instead of linear search) to store and access directory information

See all articles