Redis
webman/redis ने illuminate/redis के आधार पर कनेक्शन पूल फ़ंक्शन जोड़ा है, जो सह-निष्पादित और गैर-सह-निष्पादित वातावरण दोनों का समर्थन करता है, और इसका उपयोग Laravel के समान है।
illuminate/redis का उपयोग करने से पहले, आपको php-cli पर Redis एक्सटेंशन स्थापित करना होगा।
ध्यान दें
वर्तमान हैंडबुक webman v2 संस्करण के लिए है, यदि आप webman v1 संस्करण का उपयोग कर रहे हैं, तो कृपया v1 संस्करण की हैंडबुक को देखें।
इस कंपोनेंट को Redis एक्सटेंशन स्थापित करने की आवश्यकता है,php -m | grep redisकमांड का उपयोग करके यह जांचें किphp-cliपर Redis एक्सटेंशन स्थापित है या नहीं।
स्थापना
composer require -W webman/redis illuminate/events
स्थापना के बाद आपको restart करना होगा (reload प्रभावी नहीं है)
कॉन्फ़िगरेशन
Redis कॉन्फ़िगरेशन फ़ाइल config/redis.php में है
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
'pool' => [ // कनेक्शन पूल कॉन्फ़िगरेशन
'max_connections' => 10, // कनेक्शन पूल की अधिकतम कनेक्शन संख्या
'min_connections' => 1, // कनेक्शन पूल की न्यूनतम कनेक्शन संख्या
'wait_timeout' => 3, // कनेक्शन पूल से कनेक्शन प्राप्त करने के लिए अधिकतम प्रतीक्षा समय
'idle_timeout' => 50, // कनेक्शन पूल में कनेक्शन की निष्क्रियता समय सीमा, इस समय के बाद बंद कर दिया जाएगा, जब तक कनेक्शन की संख्या `min_connections` तक न पहुंच जाए
'heartbeat_interval' => 50, // हार्टबीट जाँच का अंतराल, 60 सेकंड से अधिक नहीं होना चाहिए
],
]
];
कनेक्शन पूल के बारे में
- प्रत्येक प्रक्रिया के पास अपना कनेक्शन पूल होता है, प्रक्रियाओं के बीच कनेक्शन पूल साझा नहीं होता है।
- सह-निष्पादन बंद होने पर, व्यवसाय प्रक्रिया के भीतर कतारबद्ध होते हैं, जिससे समवर्तीता नहीं उत्पन्न होती, इसलिए कनेक्शन पूल में अधिकतम केवल 1 कनेक्शन होता है।
- सह-निष्पादन चालू करने पर, व्यवसाय प्रक्रिया के भीतर समवर्ती रूप से निष्पादित होते हैं, कनेक्शन पूल आवश्यकतानुसार कनेक्शन की संख्या को गतिशील रूप से समायोजित करेगा, जो
max_connectionsसे अधिक औरmin_connectionsसे कम नहीं हो सकता। - क्यू में कनेक्शन की अधिकतम संख्या
max_connectionsहोने के कारण, जब Redis के सह-निष्पादन की संख्याmax_connectionsसे अधिक होती है, तो क्यू में सह-निष्पादन प्रतीक्षा करते हैं, अधिकतमwait_timeoutसेकंड के लिए, इससे अधिक होने पर अपवाद उत्पन्न होगा। - निष्क्रिय स्थिति में (सह-निष्पादन और गैर-सह-निष्पादन वातावरण दोनों में), कनेक्शन
idle_timeoutसमय के बाद पुनर्प्राप्त कर लिए जाएंगे, जब तक कि कनेक्शन की संख्याmin_connectionsतक न पहुंचे (min_connections0 भी हो सकता है)।
उदाहरण
<?php
namespace app\controller;
use support\Request;
use support\Redis;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Redis::set($key, rand());
return response(Redis::get($key));
}
}
Redis इंटरफ़ेस
Redis::append($key, $value)
Redis::bitCount($key)
Redis::decr($key, $value)
Redis::decrBy($key, $value)
Redis::get($key)
Redis::getBit($key, $offset)
Redis::getRange($key, $start, $end)
Redis::getSet($key, $value)
Redis::incr($key, $value)
Redis::incrBy($key, $value)
Redis::incrByFloat($key, $value)
Redis::mGet(array $keys)
Redis::getMultiple(array $keys)
Redis::mSet($pairs)
Redis::mSetNx($pairs)
Redis::set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)
Redis::setBit($key, $offset, $value)
Redis::setEx($key, $ttl, $value)
Redis::pSetEx($key, $ttl, $value)
Redis::setNx($key, $value)
Redis::setRange($key, $offset, $value)
Redis::strLen($key)
Redis::del(...$keys)
Redis::exists(...$keys)
Redis::expire($key, $ttl)
Redis::expireAt($key, $timestamp)
Redis::select($dbIndex)
के समान है
$redis = Redis::connection('default');
$redis->append($key, $value)
$redis->bitCount($key)
$redis->decr($key, $value)
$redis->decrBy($key, $value)
$redis->get($key)
$redis->getBit($key, $offset)
...
ध्यान दें
Redis::select($db)इंटरफ़ेस का सावधानी पूर्वक उपयोग करें, क्योंकि webman एक स्थायी मेमोरी ढांचा है, यदि कोई अनुरोधRedis::select($db)का उपयोग करता है और डेटाबेस स्विच करता है, तो यह अन्य अनुरोधों को प्रभावित करेगा। विभिन्न डेटाबेस के लिए विभिन्न$dbको विभिन्न Redis कनेक्शन कॉन्फ़िगरेशन के रूप में सेट करने की सलाह दी जाती है।
कई Redis कनेक्शनों का उपयोग
उदाहरण के लिए कॉन्फ़िगरेशन फ़ाइल config/redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
]
डिफ़ॉल्ट रूप से default के तहत कॉन्फ़िगर किया गया कनेक्शन का उपयोग किया जाता है, आप Redis::connection() विधि का उपयोग करके यह चुन सकते हैं कि कौन सा Redis कनेक्शन का उपयोग करना है।
$redis = Redis::connection('cache');
$redis->get('test_key');
क्लस्टर कॉन्फ़िगरेशन
यदि आपके आवेदन में Redis सर्वर क्लस्टर का उपयोग किया जाता है, तो आपको Redis कॉन्फ़िगरेशन फ़ाइल में clusters कुंजी का उपयोग करके इन क्लस्टरों को परिभाषित करना चाहिए:
return [
'clusters' => [
'default' => [
[
'host' => 'localhost',
'password' => null,
'port' => 6379,
'database' => 0,
],
],
],
];
डिफ़ॉल्ट रूप से, क्लस्टर नोड्स पर क्लाइंट विभाजन को लागू कर सकते हैं, जो आपको नोड पूल को लागू करने और बड़ी मात्रा में उपलब्ध मेमोरी बनाने की अनुमति देता है। यहाँ ध्यान देने वाली बात यह है कि क्लाइंट साझा करने में असफलता की स्थिति को प्रबंधित नहीं किया जाएगा; इसलिए, यह कार्य मुख्य रूप से अन्य मुख्य डेटाबेस से प्राप्त कैश डेटा के लिए उपयुक्त है। यदि आप Redis का मूल क्लस्टर उपयोग करना चाहते हैं, तो आपको कॉन्फ़िगरेशन फ़ाइल के नीचे options कुंजी में निम्नलिखित निर्दिष्ट करना होगा:
return[
'options' => [
'cluster' => 'redis',
],
'clusters' => [
// ...
],
];
पाइपलाइन कमांड
जब आपको एक ऑपरेशन में सर्वर को कई कमांड भेजने की आवश्यकता हो, तो आपको पाइपलाइन कमांड का उपयोग करने की सिफारिश की जाती है। pipeline विधि एक Redis इंस्टेंस के लिए एक क्लोजर को स्वीकार करती है। आप सभी कमांड को Redis इंस्टेंस को भेज सकते हैं, और वे सभी एक ऑपरेशन में पूरी हो जाएंगी:
Redis::pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", $i);
}
});