Rumah > pangkalan data > Redis > teks badan

Menggunakan Redis untuk melaksanakan pengehadan arus teragih

王林
Lepaskan: 2023-11-07 13:00:24
asal
1015 orang telah melayarinya

Menggunakan Redis untuk melaksanakan pengehadan arus teragih

Tajuk: Menggunakan Redis untuk melaksanakan pengehadan semasa yang diedarkan

Teks:

Dengan perkembangan pesat Internet, bilangan lawatan serentak ke laman web dan perkhidmatan terus meningkat Untuk melindungi kestabilan belakang-. sistem akhir, mengehadkan bilangan lawatan serentak telah menjadi satu tugas yang penting. Dalam sistem teragih, untuk memastikan status dikongsi antara berbilang contoh perkhidmatan, kami boleh menggunakan Redis sebagai alat pengehad semasa yang diedarkan.

Redis ialah sistem storan nilai kunci berprestasi tinggi dengan kelajuan baca dan tulis pantas serta sokongan struktur data yang kaya, dan digunakan secara meluas dalam sistem teragih. Di bawah ini kami akan memperkenalkan cara menggunakan Redis untuk melaksanakan pengehadan semasa yang diedarkan dan memberikan contoh kod khusus.

Pertama, kita perlu menentukan strategi pengehadan semasa. Algoritma pengehad semasa biasa termasuk algoritma baldi bocor dan algoritma baldi token. Dalam artikel ini, kami menggunakan algoritma baldi token sebagai contoh.

Prinsip algoritma baldi token adalah untuk mengedarkan token kepada setiap permintaan, dan apabila bilangan token dalam baldi token tidak mencukupi, permintaan baharu akan ditolak. Kita boleh menggunakan pembilang Redis dan set diisih untuk melaksanakan algoritma baldi token.

Berikut ialah kod sampel (ditulis dalam bahasa Python) yang menggunakan Redis untuk melaksanakan pengehadan kadar teragih:

import redis
import time


class DistributedRateLimiter:
    def __init__(self, host, port, password, limit, interval):
        self.r = redis.Redis(host=host, port=port, password=password)
        self.limit = limit
        self.interval = interval

    def limit_request(self, key):
        current_time = int(time.time() * 1000)
        self.r.zremrangebyscore(key, 0, current_time - self.interval)
        requests_count = self.r.zcard(key)
        if requests_count < self.limit:
            self.r.zadd(key, {current_time: current_time})
            return True
        return False


if __name__ == '__main__':
    limiter = DistributedRateLimiter('localhost', 6379, 'password', 100, 1000)
    for _ in range(10):
        if limiter.limit_request('api:rate_limit'):
            print('Allow request')
        else:
            print('Limit exceeded')
Salin selepas log masuk

Dalam kod di atas, kami mencipta kelas bernama DistributedRateLimiter, yang mengandungi Logik yang berkaitan algoritma had semasa dijelaskan. Kaedah pembinaan menerima parameter sambungan Redis, ambang had semasa dan selang had semasa. DistributedRateLimiter的类,其中包含了限流算法的相关逻辑。构造方法接受Redis的连接参数、限流的阈值和限流的时间间隔。

limit_request方法用于进行限流判断,它首先清理过期的令牌,然后获取当前令牌桶中的请求数量,如果请求数量小于限制,则将当前时间添加到有序集合中,并返回允许请求的标志位。

在示例代码的主函数中,我们创建了一个DistributedRateLimiter

Kaedah limit_request digunakan untuk menentukan had semasa terlebih dahulu membersihkan token yang telah tamat tempoh, dan kemudian mendapat bilangan permintaan dalam baldi token semasa. masa semasa ditambah kepada bilangan permintaan ke dalam set urutan dan mengembalikan bendera yang membenarkan permintaan itu.

Dalam fungsi utama kod sampel, kami mencipta objek dan gelung DistributedRateLimiter untuk menentukan had semasa permintaan. Apabila had semasa melepasi, 'Benarkan permintaan' adalah output, jika tidak 'Had melebihi' adalah output.

Melalui contoh di atas, kita boleh menggunakan Redis untuk melaksanakan pengehadan arus teragih untuk memastikan kestabilan sistem semasa akses serentak. Sudah tentu, strategi dan parameter pengehad semasa tertentu perlu diselaraskan dan dioptimumkan berdasarkan keadaan sebenar.

Perlu diambil perhatian bahawa contoh di atas hanyalah demonstrasi mudah Pengehadan arus teragih sebenar mungkin perlu mempertimbangkan lebih banyak faktor, seperti penyegerakan jam antara berbilang kejadian, prestasi dan ketersediaan Redis, dsb. 🎜🎜Ringkasnya, Redis, sebagai sistem storan nilai utama berprestasi tinggi, boleh membantu kami mencapai pengehadan arus teragih. Kita boleh menggunakan struktur data dan arahan Redis untuk menyimpan dan mengira status permintaan untuk mengehadkan akses serentak. Melalui strategi pengehadan semasa yang munasabah dan konfigurasi parameter, kami boleh melindungi sistem bahagian belakang daripada beban berlebihan dan meningkatkan ketersediaan dan kestabilan sistem. 🎜

Atas ialah kandungan terperinci Menggunakan Redis untuk melaksanakan pengehadan arus teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan