Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

लारवेल को AWS पर रेडिस क्लस्टर के साथ कैसे काम करें

खोज और डिबगिंग के बाद, इसने इसे काम किया:

'redis' => [
    'client' => 'predis',
    'cluster' => true,
    'options' => [
        'cluster' => 'redis',
        'parameters' => [
            'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_DEFAULT_PORT', 6379),
            'database' => 0,
            ],
        ],
    'clusters' => [
         'default' => [
            'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_DEFAULT_PORT', 6379),
            'database' => 0,
        ],
        'jobs' => [
            'host' => env('REDIS_JOBS_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_JOBS_PORT', 6379),
            'database' => 0,
        ],
        'content' => [
            'host' => env('REDIS_CONTENT_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_CONTENT_PORT', 6379),
            'database' => 0,
        ],
        'options' => [
            'cluster' => 'redis'
        ],
    ]
]

नोट:उपरोक्त प्रश्न में मेरी कॉन्फ़िगरेशन में एक स्पष्ट गलती यह थी कि मैंने होस्ट और पोर्ट को जोड़ दिया, जिसे मैंने यहां तय किया था। मेरी .env फ़ाइल इस तरह दिखती है:

REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1

REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002

नोट:मैंने यहां दिए गए निर्देशों का उपयोग करके क्लस्टर बनाया है:https://redis.io/topics/cluster-tutorial#creating-the-cluster

अनुसंधान पद्धति

इस तथ्य के कारण:1. इस पर लार्वा/प्रीडिस प्रलेखन की कमी है2. स्टैक ओवरफ्लो पर अधिकांश उत्तर इन पंक्तियों के साथ हैं:गूगलिंग और खोज के बाद .. मेरे लिए यही काम आया क्या हो रहा है, इसकी अधिक व्याख्या किए बिना

मुझे लगा कि कैसे . दिखाकर मैं कुछ मदद कर सकता हूं मुझे उपरोक्त के लिए अपना उत्तर मिल गया।

1) त्रुटि समस्या का समाधान

इस बग को हल करने के लिए

<ब्लॉकक्वॉट>

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argument 1 to पारित Predis\Connection\Parameters::__construct() प्रकार की सरणी, पूर्णांक दिया जाना चाहिए, जिसे/उपयोगकर्ता/साझा/देव/php कहा जाता है /toters-api/vendor/predis/predis/src/Connection/Factory.phpon लाइन 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack ट्रेस :

मुझे एहसास हुआ कि मेरा config/database.php प्रारूप बस गलत था। हर जगह गुगलिंग ने मुझे कोई स्पष्ट तस्वीर नहीं दी, इसलिए मैंने xdebug का उपयोग करने और कोड में गोता लगाने का फैसला किया। नोट:मेरे पास एक दस्तावेज़ में मुद्रित त्रुटि स्टैक ट्रेस (उपरोक्त प्रश्न में दिखाया गया) था, और मैंने इसे डिबग चरणों के माध्यम से मार्गदर्शन करने के लिए एक पक्षी की आंखों के दृश्य के रूप में उपयोग किया था (यानी हमेशा आउटपुट प्रिंट करते समय/बाहर/बाहर कदम उठाना आदि) एक अलग दस्तावेज़ में और इसे मेरे config/database.php के साथ एक सैनिटी चेक/डीबग कंपास के रूप में तुलना करना)।

खुदाई और छपाई के बाद, मुझे यह पता चला:

[ *Locals ] [ Superglobals ] [ User defined constants ]

- Locals at /Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Client.php:55

 ▾ $options = (array [1])
  \
   ⬦ $options["cluster"] = (string [5]) `redis`
  /
 ▾ $parameters = (array [4])
  \
   ⬦ $parameters[0] = (string [14]) `127.0.0.1:7000`
   |
   ⬦ $parameters[1] = (null)
   |
   ⬦ $parameters[2] = (int) 6379
   |
   ⬦ $parameters[3] = (int) 0
  /
 ▾ $this = (Predis\Client [3])
  \
   ⬦ $this->connection = (null)
   |
   ⬦ $this->options = (null)
   |
   ⬦ $this->profile = (null)
  /

मैंने इसकी तुलना अपनी .env फ़ाइल की सामग्री से की:

REDIS_DEFAULT_HOST=127.0.0.1:7000
REDIS_JOBS_HOST=127.0.0.1:7001
REDIS_CONTENT_HOST=127.0.0.1:7002

और मुझे एहसास हुआ कि प्रारूप गलत था, मुझे होस्ट और पोर्ट को एक ही env वेरिएबल में नहीं रखना चाहिए.. इसलिए मैंने इसे इसके बजाय इस तरह रखा:

REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1

REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002

और इससे मेरी पहली समस्या हल हो गई।

2) अन्य समस्याओं का समाधान

उपरोक्त तय होने के बाद मुझे यह मिल गया

<ब्लॉकक्वॉट>

क्लस्टरडाउन हैश स्लॉट प्रस्तुत नहीं किया गया

यह काफी आसान था, यह त्रुटि संदेश को गुगल करने का मामला था (चूंकि त्रुटि संदेश स्पष्ट रूप से मूल रेडिस त्रुटि संदेश था, बजाय कुछ गुप्त लाइब्रेरी रैपर जैसे प्रीडिस त्रुटि संदेश) .. और मुझे यह उत्तर मिला।

बाकी आसान था।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जावास्क्रिप्ट में रेडिस में सभी कुंजी और मान कैसे प्राप्त करें?

  2. Redis क्लस्टर के साथ StackExchange.Redis क्लाइंट का उपयोग करना

  3. रेडिस टेम्पलेट का उपयोग करके रेडिस से सभी कुंजी कैसे प्राप्त करें

  4. रेडिस से फ्लिंक तक डेटा पढ़ें

  5. जब मेरे पास Django के लिए मेरे डेटाबेस के रूप में PostgreSQL है तो मुझे Redis का उपयोग क्यों करना चाहिए?