কম্পিউটার টিউটোরিয়াল

রুবিতে রেডিস মাস্টার করুন: একটি প্র্যাক্টিক্যাল গাইড

রেডিস কী?

রেডিস হলো একটি ইন-মেমরি ডেটাবেস যাতে বিভিন্ন ধরনের ডেটা স্ট্রাকচার ব্যবহার করা যায়।

যেমন:

  • কি / ভ্যালু স্টোরেজ
  • লিস্ট
  • সেট

এটির আপনার টিপিক্যাল SQL ডেটাবেসের সাথে, যেমন পোস্টগ্রেস, কোনো সম্পর্ক নেই।

রেডিসের ব্যবহারের ক্ষেত্রে:

  • ক্যাশিং
  • লিডারবোর্ড
  • ভিজিটর কাউন্টিং
  • দ্রুত অটোকমপ্লিট সাজেশন
  • সক্রিয় ইউজার সেশন ট্র্যাক করা
  • ওয়ার্ক এবং মেসেজ কিউ

আসুন দেখি আপনি আপনার রুবি অ্যাপ্লিকেশনে রেডিস কীভাবে ব্যবহার করতে পারেন!

স্থানীয়ভাবে রেডিস ইনস্টল করা

প্রথমে: আপনাকে রেডিস সার্ভার ইনস্টল করতে হবে। যেকোনো অন্য ডেটাবেসের মতো।

যদি আপনি উবুন্টু চালান, তবে apt install redis-server ব্যবহার করুন, ম্যাক-এ brew install redis এবং উইন্ডোজ ১০-এ "Windows Subsystem for Linux" প্রয়োজন হবে (ইনস্ট্রাকশনের জন্য ক্লিক করুন)।

সার্ভার আপ ও রানিং হলে আপনি redis-cli দিয়ে সার্ভারের সাথে সংযোগ করতে পারবেন।

নোট: redis-server অন্য একটি টার্মিনালে চালাতে হতে পারে সার্ভার শুরু করার জন্য সংযোগ করার আগে।

এখন আপনি রেডিস ব্যবহার শুরু করতে প্রস্তুত!

রেডিস জেম ব্যবহার করা

আপনি redis-cli দিয়ে সরাসরি রেডিসের সাথে ইন্টারঅ্যাক্ট করতে পারেন, কিন্তু আপনি যদি রুবি থেকে রেডিসের সাথে কাজ করতে চান তবে একটি জেম ব্যবহার করা উচিত।

কয়েকটি জেম উপলব্ধ:

  • oxblood
  • redic
  • redis-rb

কিন্তু রেডিস ডেভেলপাররা শুধু একটি অফিসিয়ালি রিকমেন্ড করেন, redis-rb।

ইনস্টল করুন:

gem install redis

জেম ইনস্টল হলে, আপনি আপনার রেডিস সার্ভারের সাথে সংযোগ করে কাজ শুরু করতে পারেন।

আসুন একটি কি, a, ভ্যালু 1 দিয়ে যোগ করি।

কোডটি:

require 'redis' 
redis = Redis.new(host: "localhost") 
redis.set("a", 1) # "OK" 
redis.get("a") # "1"

এই জেমটি রুবি মেথডকে রেডিস কমান্ডে ম্যাপ করার চমৎকার কাজ করে, তাই আপনি যদি জানতে চান কী কমান্ডগুলো উপলব্ধ, রেডিস ডকুমেন্টেশন বা জেম ডকুমেন্টেশন চেক করতে পারেন।

ডকুমেন্টেশন সহ কাজ করা

আপনি একটি নির্দিষ্ট কমান্ডের নাম টাইপ করতে পারেন, বা ডেটা স্ট্রাকচার দিয়ে সার্চ করতে পারেন।

"Filter by group" এ ক্লিক করুন এবং "Strings" বেছে নিন, তারপর একটি কমান্ড বেছে নিন টেস্ট করার জন্য।

উদাহরণস্বরূপ, আপনি incr কমান্ড ব্যবহার করতে পারেন:

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

বা আপনি setex দিয়ে অটো-এক্সপায়ারিং কি সেট করতে পারেন:

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

যেখানে ২য় আর্গুমেন্ট হলো সেকেন্ডের সংখ্যা এই কি এক্সপায়ার হওয়ার আগে, এবং শেষ আর্গুমেন্ট হলো এই কির ভ্যালু।

উদাহরণ:

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

১০ সেকেন্ড পর…

redis.get("bacon") # nil

অন্যান্য কমান্ড এক্সপ্লোর এবং ট্রাই করার মজা লুটুন!

রেডিতে সোর্টেড সেট ব্যবহার করা

রেডিস সিম্পল কি/ভ্যালু স্টোরেজে সীমাবদ্ধ নয়। এটি কিছু শক্তিশালী ডেটা স্ট্রাকচার অফার করে। সর্টেড সেট এর মত।

এটি আপনাকে ইউনিক আইটেমের একটি লিস্ট তৈরি করতে দেয় যা একটি দেওয়া ভ্যালু অনুযায়ী সর্টেড থাকে। এই ভ্যালুটিকে রেডিস ডকুমেন্টেশনে "স্কোর" বলা হয়।

আপনি এই সেট থেকে টপ 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"]

এই কমান্ডটি বলছে:

"সর্বোচ্চ র‍্যাঙ্ক (০) থেকে শুরু করে, টপ আইটেমটি দাও।"

আপনি যদি সব কিছু ক্রমে চান:

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

এই কনভেনশনে কিছু 스페শাল নেই, রেডিস (সফ্টওয়্যার) এর জন্য কোলনসহ একটি কি কোলন-বিহীন কির থেকে আলাদা নয়, কিন্তু আপনার (একজন বান্ধব রুবি ডেভেলপার) জন্য এটি আপনার ডেটা অর্গানাইজ করতে সাহায্য করে।

রেডিতে ডেটা পার্সিস্টেন্স

ডিফল্টভাবে রেডিস আপনার করা প্রতিটি অপারেশন একটি রেগুলার ডেটাবেসের মতো সেভ করে না। এটি শুধু সার্ভার বন্ধ করলে ডেটা ডিস্কে সেভ করে।

বা এই শর্তগুলো পূরণ হলে:

  • ১৫ মিনিট পর, যদি ১ বা অধিক কি পরিবর্তন হয়
  • ৫ মিনিট পর, যদি ১০ বা অধিক কি পরিবর্তন হয়
  • ১ মিনিট পর, যদি ১০,০০০ বা অধিক কি পরিবর্তন হয়

এটি কারেন্ট ডিরেক্টরিতে একটি dump.rdb ফাইল তৈরি করে।

আপনি যদি চান রেডিস পার্সিস্টেন্স SQL ডেটাবেসের মতো আচরণ করুক, তবে আপনি "Append Only Mode" সক্ষম করতে পারেন, যা প্রতি সেকেন্ডে পরিবর্তন সেভ করবে।

রেডিস কনফিগারেশনে এই লাইনটি যোগ করে (বা আনকমেন্ট করে) এই মোড সক্ষম করুন:

appendonly yes

রেডিসকে রেইলস ক্যাশ হিসেবে ব্যবহার করা

রেইলস ৫.২ থেকে আপনি রেডিসকে আপনার ক্যাশ স্টোর হিসেবে ব্যবহার করতে পারেন। আপনার শুধু 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 কুয়েরির রেজাল্ট।

রেডিস F.A.Q

"আমি কি আমার রেডিস সার্ভারের সব কি লিস্ট করতে পারি?"

হ্যাঁ, keys বা scan কমান্ড দিয়ে, কিন্তু এটার পরামর্শ দেয়া হয় না কারণ এটি খুব স্লো, বিশেষ করে আপনার ডেটাবেস বড় হলে।

"আমি কখন রেডিস ব্যবহার করব?"

শুধু তখনই যখন আপনার ইউজ কেসের জন্য এটি অর্থবহ। অর্থাৎ আপনি রেডিস ডেটা স্ট্রাকচারের সুবিধা নিয়ে আপনার কোডকে সহজ করে তোলতে পারেন। আপনি রেডিস শুধু কুল বা জনপ্রিয় হওয়ার কারণে ব্যবহার করতে চান না। এটি তখনই ব্যবহার করুন যখন এটি অন্যান্য সমাধানের চেয়ে ভালো সমাধান করে।

"আমি রেডিসকে কীভাবে দ্রুত করব?"

redis-rb-র ওপর hiredis জেম ইনস্টল করুন সর্বোচ্চ পারফরম্যান্সের জন্য।

সারসংক্ষেপ

আপনি রেডিস সম্পর্কে শিখলেন, একটি দ্রুত ইন-মেমরি ডেটাবেস যা সঠিক পরিস্থিতিতে খুব সাহায্যকারী হতে পারে, যেমন ক্যাশিং, কাউন্টিং এবং কিউ।

আপনি যদি এই আর্টিকেলটি আকর্ষণীয় পান তবে শেয়ার করুন যাতে আরও মানুষ এর উপভোগ করতে পারে।

পড়ার জন্য ধন্যবাদ!

  1. রুবি মাস্টারিং: মেথড এলিয়াস তৈরি করার জন্য Alias কিওয়ার্ড ব্যবহার

  2. রুবির grep মেথড মাস্টারিং: কোড উদাহরণসহ একটি ব্যবহারিক গাইড

  3. রুবির Map মেথড মাস্টারিং: উদাহরণসহ একটি ব্যবহারিক গাইড

  4. রুবি Struct ও OpenStruct: দক্ষ ভ্যালু অবজেক্টস