Home Database Redis Can redis itself limit the current flow?

Can redis itself limit the current flow?

Nov 22, 2019 am 10:08 AM
redis

Can redis itself limit the current flow?

Of course, there are many ways to implement current limiting. Redis has very powerful functions. I have used Redis to practice three implementation methods, which can be implemented relatively simply. Redis can not only do current limiting, but also perform data statistics, nearby people and other functions.

1: Setnx based on Redis (Recommended Learning: Redis Video Tutorial )

## We are in When using Redis's distributed lock, everyone knows that it relies on the setnx instruction. During the CAS (Compare and swap) operation, the expiration time (expire) is set for the specified key at the same time. We are mainly limiting the current The purpose is to allow only N number of requests to access my code program within unit time. So relying on setnx can easily achieve this function.

For example

We need to limit 20 requests within 10 seconds, then we can set the expiration time to 10 when settingnx. When the number of requested setnx reaches 20, the current limiting effect is achieved.

Of course, there are many disadvantages to this approach. For example, when counting 1-10 seconds, it is impossible to count 2-11 seconds. If you need to count M requests within N seconds, then We need to keep N keys and other issues in Redis

Second type: Redis-based data structure zset

In fact, the most important thing involved in current limiting is sliding Window, it was also mentioned above how 1-10 becomes 2-11. In fact, the starting value and the end value are both 1.


And if we use the list data structure of Redis, we can easily implement this function


We can create the request into a zset array, and when each request comes in , the value remains unique and can be generated by UUID, and the score can be represented by the current timestamp, because the score can be used to calculate the number of requests within the current timestamp.

The zset data structure also provides the range method so that we can easily get how many requests there are within 2 timestamps


The third type: based on Redis Token Bucket Algorithm

When it comes to current limiting, we have to mention the token bucket algorithm. The Token Bucket Algorithm is also called the Bucket Algorithm. For details, please refer to Du Niang’s explanation. Token Bucket Algorithm


The Token Bucket algorithm mentions input rate and output rate. When the output rate is greater than the input rate , then the traffic limit is exceeded.


That is to say, every time we access a request, we can get a token from Redis. If we get the token, it means that the limit has not been exceeded, and if we cannot get it, then The result is the opposite.


Relying on the above ideas, we can combine the List data structure of Redis to easily achieve such code


Rely on the leftPop of List to obtain the token

// 输出令牌
public Response limitFlow2(Long id){
        Object result = redisTemplate.opsForList().leftPop("limit_list");
        if(result == null){
            return Response.ok("当前令牌桶中无令牌");
        }
        return Response.ok(articleDescription2);
    }
Copy after login

Then rely on Java's scheduled tasks to rightPush the token into the List regularly. Of course, the token also needs to be unique, so I still use UUID to generate it here

// 10S的速率往令牌桶中添加UUID,只为保证唯一性
    @Scheduled(fixedDelay = 10_000,initialDelay = 0)
    public void setIntervalTimeTask(){
        redisTemplate.opsForList().rightPush("limit_list",UUID.randomUUID().toString());
    }
Copy after login

Comprehensive It is not difficult to implement the code at first. For these current limiting methods, we can add the above code in AOP or filter to limit the current flow of the interface and ultimately protect your website.

For more Redis-related technical articles, please visit the

Introduction to Using Redis Database Tutorial column to learn!

The above is the detailed content of Can redis itself limit the current flow?. 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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

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)

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 use the redis command How to use the redis command Apr 10, 2025 pm 08:45 PM

Using the Redis directive requires the following steps: Open the Redis client. Enter the command (verb key value). Provides the required parameters (varies from instruction to instruction). Press Enter to execute the command. Redis returns a response indicating the result of the operation (usually OK or -ERR).

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 use redis lock How to use redis lock Apr 10, 2025 pm 08:39 PM

Using Redis to lock operations requires obtaining the lock through the SETNX command, and then using the EXPIRE command to set the expiration time. The specific steps are: (1) Use the SETNX command to try to set a key-value pair; (2) Use the EXPIRE command to set the expiration time for the lock; (3) Use the DEL command to delete the lock when the lock is no longer needed.

How to implement the underlying redis How to implement the underlying redis Apr 10, 2025 pm 07:21 PM

Redis uses hash tables to store data and supports data structures such as strings, lists, hash tables, collections and ordered collections. Redis persists data through snapshots (RDB) and append write-only (AOF) mechanisms. Redis uses master-slave replication to improve data availability. Redis uses a single-threaded event loop to handle connections and commands to ensure data atomicity and consistency. Redis sets the expiration time for the key and uses the lazy delete mechanism to delete the expiration key.

How to read the source code of redis How to read the source code of redis Apr 10, 2025 pm 08:27 PM

The best way to understand Redis source code is to go step by step: get familiar with the basics of Redis. Select a specific module or function as the starting point. Start with the entry point of the module or function and view the code line by line. View the code through the function call chain. Be familiar with the underlying data structures used by Redis. Identify the algorithm used by Redis.

How to make message middleware for redis How to make message middleware for redis Apr 10, 2025 pm 07:51 PM

Redis, as a message middleware, supports production-consumption models, can persist messages and ensure reliable delivery. Using Redis as the message middleware enables low latency, reliable and scalable messaging.

See all articles