Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में रेडिस डेटाबेस का उपयोग कैसे करें

रेडिस क्या है?

रेडिस एक प्रकार का इन-मेमोरी डेटाबेस है जिसमें विभिन्न प्रकार की डेटा संरचनाएं होती हैं जिनका आप उपयोग कर सकते हैं।

पसंद करें :

  • कुंजी / मान संग्रहण
  • सूचियां
  • सेट

इसका आपके विशिष्ट SQL डेटाबेस से कोई लेना-देना नहीं है, जैसे Postgres।

Redis के उपयोग में शामिल हैं :

  • कैशिंग
  • लीडरबोर्ड
  • आगंतुकों की गिनती
  • तेज़ स्वतः पूर्ण सुझाव
  • सक्रिय उपयोगकर्ता सत्रों पर नज़र रखना
  • कार्य और संदेश कतार

आइए देखें कि आप अपने रूबी अनुप्रयोगों में रेडिस का उपयोग कैसे कर सकते हैं!

Redis को स्थानीय रूप से स्थापित करना

पहला:

आपको रेडिस सर्वर स्थापित करने की आवश्यकता है।

जैसे आप कोई अन्य डेटाबेस स्थापित करेंगे।

यदि आप उबंटू चला रहे हैं, तो आप apt install redis-server . का उपयोग कर सकते हैं , मैक पर आप brew install redis . का उपयोग कर सकते हैं &विंडोज 10 पर आपको "लिनक्स के लिए विंडोज सबसिस्टम" (निर्देशों के लिए क्लिक करें) की आवश्यकता होगी।

एक बार सर्वर के चालू और चलने के बाद आप redis-cli . का उपयोग करने में सक्षम होंगे सर्वर से कनेक्ट करने के लिए।

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

नोट :आपको redis-server चलाना पड़ सकता है इससे पहले कि आप सर्वर से कनेक्ट कर सकें, दूसरे टर्मिनल पर सर्वर शुरू करने के लिए।

अब आप रेडिस का उपयोग शुरू करने के लिए तैयार हैं!

रेडिस रत्न का उपयोग करना

आप redis-cli . का उपयोग करके सीधे Redis के साथ इंटरैक्ट कर सकते हैं , लेकिन अगर आप रूबी से रेडिस के साथ काम करना चाहते हैं तो आपको एक रत्न का उपयोग करना चाहिए।

कुछ रत्न उपलब्ध हैं :

  • ऑक्सब्लड
  • रेडिक
  • रेडिस-आरबी

लेकिन रेडिस डेवलपर्स द्वारा आधिकारिक तौर पर केवल एक की सिफारिश की जाती है, redis-rb

इंस्टॉल करें :

gem install redis

मणि स्थापित होने के साथ, आप अपने रेडिस सर्वर से जुड़ सकते हैं और इसके साथ काम करना शुरू कर सकते हैं।

आइए एक कुंजी जोड़कर शुरू करें, a , 1 . के मान के साथ ।

यह रहा कोड :

require 'redis'

redis = Redis.new(host: "localhost")

redis.set("a", 1)
# "OK"

redis.get("a")
# "1"

रूबी विधियों को रेडिस कमांड में मैप करने में यह रत्न अच्छा काम करता है, इसलिए यदि आप जानना चाहते हैं कि कौन से आदेश उपलब्ध हैं तो आप रेडिस दस्तावेज़ीकरण की जांच कर सकते हैं, या आप मणि दस्तावेज़ीकरण की जांच कर सकते हैं।

दस्तावेज़ीकरण के साथ काम करना

आप किसी विशिष्ट कमांड का नाम टाइप कर सकते हैं, या डेटा संरचना द्वारा खोजें

"समूह द्वारा फ़िल्टर करें" पर क्लिक करें और "स्ट्रिंग्स" चुनें, फिर इसका परीक्षण करने के लिए कोई एक कमांड चुनें।

उदाहरण के लिए, आप incr . का उपयोग कर सकते हैं आदेश:

redis.incr("a")
# "2"

या आप setex . के साथ स्वत:समाप्त होने वाली कुंजी सेट कर सकते हैं :

redis.setex("bacon", 10, 100)

जहां दूसरा तर्क इस कुंजी के समाप्त होने से कुछ सेकंड पहले है, और अंतिम तर्क इस कुंजी का मान है।

उदाहरण :

redis.get("bacon")
# "100"

10 सेकंड के बाद…

redis.get("bacon")
# nil

अन्य कमांड को एक्सप्लोर करने और आज़माने का मज़ा लें!

Redis में सॉर्ट किए गए सेट का उपयोग कैसे करें

Redis साधारण कुंजी/मान संग्रहण तक सीमित नहीं है।

यह कुछ शक्तिशाली डेटा संरचनाएं प्रदान करता है।

क्रमबद्ध सेट की तरह।

यह आपको एक विशिष्ट आइटम की सूची बनाने की अनुमति देता है जो किसी दिए गए मान के अनुसार क्रमबद्ध होते हैं . Redis दस्तावेज़ीकरण में मान को "स्कोर" कहा जाता है।

आप इस सेट में शीर्ष N आइटम प्राप्त करने के लिए क्वेरी कर सकते हैं।

तो यह लीडरबोर्ड के लिए एकदम सही है!

उदाहरण :

redis.zadd("popular_fruit", 10, "apple")
# true
redis.zadd("popular_fruit", 20, "banana")
# true
redis.zadd("popular_fruit", 30, "orange")
# true

अब जब हमारे पास हमारा सेट है, तो हम शीर्ष आइटम के लिए क्वेरी कर सकते हैं:

r.zrevrange("popular_fruit", 0, 0)
# ["orange"]

यह आदेश कह रहा है :

"उच्चतम रैंक (0) से शुरू करते हुए, मुझे शीर्ष आइटम दें।"

यदि आप सब कुछ क्रम में चाहते हैं, तो :

r.zrevrange("popular_fruit", 0, -1)
# ["orange", "banana", "apple"]

"zrevrange" में "rev" भाग पर ध्यान दें, जिसका अर्थ है कि उल्टा और यह आपको अवरोही क्रम में आइटम देगा ।

यदि आप “zrange” का उपयोग करते हैं तो आपको आइटम आरोही क्रम . में मिलेंगे ।

क्रमबद्ध सेट लीडरबोर्ड से आगे जाते हैं!

एक और चीज़ जो आप कर सकते हैं वह है एक तेज़ स्वतः पूर्ण इंजन . बनाना ZRANGEBYLEX . के साथ आदेश।

अधिक सेट संचालन के लिए कृपया दस्तावेज़ीकरण पढ़ें।

कुंजी, मान और नेमस्पेसिंग को समझना

कोई कॉलम नहीं है, कोई टेबल नहीं है, सब कुछ एक सादा नामस्थान है।

तब आप अपना डेटा कैसे व्यवस्थित कर सकते हैं?

आप कुंजी नाम का ही उपयोग कर सकते हैं।

एक आम परंपरा एक कोलन का उपयोग करना है (: ) सामान्य नाम और उस नाम के विशिष्ट भाग को अलग करने के लिए।

यहां एक उदाहरण दिया गया है :

redis.set("fruit:1", "apple")
# OK
redis.set("fruit:2", "banana")
# OK

इस सम्मेलन के बारे में कुछ खास नहीं है, रेडिस (सॉफ्टवेयर) के लिए एक कुंजी एक कोलन के साथ एक कुंजी से अलग नहीं है इसके बिना , लेकिन आपके लिए (एक अनुकूल रूबी डेवलपर) यह आपके डेटा को व्यवस्थित करने में आपकी सहायता करता है।

Redis में डेटा दृढ़ता

डिफ़ॉल्ट रूप से Redis आपके द्वारा नियमित डेटाबेस की तरह किए जाने वाले प्रत्येक ऑपरेशन को सहेजता नहीं है।

जब आप सर्वर बंद करते हैं तो यह केवल डेटा को डिस्क में सहेजता है।

या इन शर्तों के तहत :

  • 15 मिनट के बाद, यदि 1 या अधिक कुंजियाँ बदली जाती हैं
  • 5 मिनट के बाद, यदि 10 या अधिक कुंजियाँ बदली जाती हैं
  • 1 मिनट के बाद, अगर 10,000 या अधिक कुंजियाँ बदली जाती हैं

यह एक dump.rdb बनाता है वर्तमान निर्देशिका पर फ़ाइल।

यदि आप चाहते हैं कि रेडिस दृढ़ता एक SQL डेटाबेस की तरह व्यवहार करे, तो आप "केवल संलग्न करें मोड" को सक्षम कर सकते हैं, जो हर सेकंड के बाद परिवर्तनों को सहेजेगा।

रेडिस कॉन्फ़िगरेशन पर इस लाइन को जोड़कर (या बिना टिप्पणी किए) इस मोड को सक्षम करें:

appendonly yes

Redis को रेल कैश के रूप में उपयोग करना

रेल 5.2 के बाद से आप Redis को अपने कैशे स्टोर के रूप में उपयोग कर सकते हैं।

आपको केवल redis की आवश्यकता है मणि और सर्वर।

इसे सक्षम करने के लिए :

# config/environments/production.rb

Rails.application.configure do
  config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
end

तब रेल अपनी सभी कैशिंग जरूरतों के लिए रेडिस का उपयोग करेगी।

आप कैश में भी कुछ स्टोर कर सकते हैं :

Rails.cache.write("a", 1)
# "OK"

Rails.cache.read("a")
# 1

रेल इस तरह दिखने वाले मानों को संग्रहीत करता है :

"\u0004\bo: ActiveSupport::Cache::Entry\t:\v@valuei\u0006:\r@version0:\u0010@created_atf\u00171555005228.7954454:\u0010@expires_in0"

इसका मतलब है कि आप किसी भी क्रमबद्ध रूबी ऑब्जेक्ट को स्टोर कर सकते हैं, जैसे ActiveRecord . के परिणाम क्वेरी।

Redis सामान्य प्रश्न

“क्या मैं अपने Redis सर्वर की सभी कुंजियों को सूचीबद्ध कर सकता हूँ?”

हाँ, keys . का उपयोग करके या scan आदेश देता है, लेकिन इसकी अनुशंसा नहीं की जाती है क्योंकि यह बहुत धीमा है, विशेष रूप से जैसे-जैसे आपका डेटाबेस बढ़ता है।

“मुझे Redis का उपयोग कब करना चाहिए?”

केवल तभी जब यह आपके उपयोग के मामले में समझ में आता है। इसका मतलब है कि आप अपने कोड को तर्क करने में आसान बनाने के लिए Redis डेटा संरचनाओं का लाभ उठा सकते हैं।

आप रेडिस का उपयोग सिर्फ इसलिए नहीं करना चाहते क्योंकि यह अच्छा या लोकप्रिय है।

इसका उपयोग तब करें जब यह किसी समस्या को अन्य समाधानों की तुलना में बेहतर तरीके से हल करे।

“मैं Redis को तेज़ कैसे बना सकता हूँ?”

hiredis को स्थापित करें redis-rb के शीर्ष पर मणि अधिकतम प्रदर्शन के लिए।

सारांश

आपने रेडिस के बारे में सीखा है, जो एक तेज़ इन-मेमोरी डेटाबेस है जो कैशिंग, काउंटिंग और क्यू जैसी सही स्थितियों में बहुत मददगार हो सकता है।

अगर आपको यह लेख रोचक लगा हो तो कृपया इसे शेयर करें ताकि अधिक से अधिक लोग इसका आनंद उठा सकें।

पढ़ने के लिए धन्यवाद!


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ