2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
टोकन बकेट एल्गोरिदम् इत्यस्य परिचयात् पूर्वं प्रथमं लीकी बकेट एल्गोरिदम् (Leaky Bucket) इत्यस्य परिचयं कुर्मः ।
लीकी बाल्टी एल्गोरिदम् एकं नियत-क्षमतायुक्तं पात्र-प्रतिरूपं भवति यत् आँकडा-प्रवाहस्य बहिर्वाहस्य च गतिं नियन्त्र्य आँकडा-स्थानांतरण-दरं सीमितं करोति । लीकी बाल्टी एल्गोरिदम् इत्यस्य मुख्यविशेषताः सन्ति : १.
Redisson स्वयं प्रत्यक्षतया leaky bucket algorithm इत्यस्य कार्यान्वयनम् न प्रदाति यदि भवान् Redisson इत्यस्मिन् leaky bucket algorithm इत्यस्य कार्यान्वयनस्य आवश्यकता अस्ति तर्हि भवान् निम्नलिखितपदार्थानाम् विषये विचारं कर्तुं शक्नोति ।
टोकन संग्रहणार्थं क्रमबद्धसेट् इत्यस्य उपयोगं कुर्वन्तु: रेडिस् मध्ये टोकन्स् संग्रहीतुं क्रमबद्धसेट् इत्यस्य उपयोगं कुर्वन्तु, प्रत्येकं टोकनस्य स्कोररूपेण समयमुद्रिका भवति ।
टोकन योजयतु : नियतान्तरेषु क्रमबद्धसेट् मध्ये टोकन योजयन्तु, तथा च प्रत्येकस्य टोकनस्य स्कोरः योजितसमये समयमुद्रिका भवति । (निर्धारितकार्यस्य उपयोगेन योजयितुं शक्यते)
टोकन प्राप्त करें: यदा अनुरोधं प्रेषयितुं आवश्यकं भवति तदा क्रमबद्धसमूहात् टोकनं निष्कासयन्तु (अथवा पॉप्) कुर्वन्तु तथा च पश्यन्तु यत् वर्तमानसमयः टोकनस्य समयमुद्रायाः प्लस् अधिकतमं अनुमतविलम्बात् अधिकः अस्ति वा इति।
टोकन परित्यजतु: यदि वर्तमानसमयः टोकनस्य समयमुद्रिकां प्लस् अधिकतमविलम्बं अतिक्रमति तर्हि "जलस्य लीकेज" अनुकरणार्थं टोकनं परित्यज्यते ।
वर्तमान सीमित तर्क: यदि क्रमबद्धसमूहे टोकन उपलब्धं नास्ति तर्हि अनुरोधं अङ्गीकुरुत अथवा प्रतीक्षमाणपङ्क्तौ स्थापयन्तु ।
टोकन बकेट एल्गोरिदम् अधिकं लचीलं प्रवाहनियन्त्रण एल्गोरिदम् अस्ति यत् टोकन जनयित्वा निश्चिते दरेन दत्तांशं प्रेषयितुं शक्नोति । टोकन बाल्टी एल्गोरिदम् इत्यस्य मुख्यविशेषताः सन्ति : १.
रेडिसन-रूपरेखा टोकन-बाल्टी-एल्गोरिदम्-आधारितं वर्तमान-सीमित-कार्यं प्रदाति, यत् भवितुम् अर्हति RRateLimiter
अन्तरफलक कार्यान्वयन। Redisson इत्यस्मिन् token bucket algorithm इत्यस्य उपयोगस्य सरलं उदाहरणं निम्नलिखितम् अस्ति ।
- import org.redisson.api.RRateLimiter;
- import org.redisson.api.RedissonClient;
-
- // 假设redissonClient已经创建并配置好连接
- RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");
-
- // 配置令牌桶参数
- rateLimiter.trySetRate(20, RateType.OVERALL); // 总共可以处理20个请求
- rateLimiter.trySetRate(1, RateIntervalUnit.SECONDS); // 每秒生成1个令牌
-
- // 尝试获取一个令牌,如果成功,返回true,否则返回false
- boolean acquired = rateLimiter.tryAcquire();
-
- // 使用令牌执行操作
- if (acquired) {
- // 执行受限操作
- } else {
- // 处理限流逻辑,例如重试或等待
- }
-
- // 关闭Redisson客户端
- redissonClient.shutdown();