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')
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
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!