টেক কমিউনিটিতে রেডিস বর্তমানে খুব জনপ্রিয়। এটি অ্যান্টিরেজের একটি ছোট পーソনাল প্রজেক্ট থেকে ইন-মেমরি ডেটা স্টোরেজের ইন্ডাস্ট্রি স্ট্যান্ডার্ড হওয়ার পথ তে এসেছে। এর সাথে রেডিস সঠিকভাবে ব্যবহার করার জন্য কিছু সর্বোত্তম অভ্যাস আসে যা অধিকাংশ লোক মেনে নেন। নিচে রেডিস সঠিকভাবে ব্যবহার করার ১০টি কুইক টিপস আলোচনা করা হলো।
১. KEYS * ব্যবহার বন্ধ করুন
ওকে, হয়তো চিৎকার করে শুরু করা ভালো পদ্ধতি নয়। কিন্তু এটি সম্ভবত সবচেয়ে গুরুত্বপূর্ণ পয়েন্ট। অনেক সময় আমি একটি রেডিস ইনস্ট্যান্স দেখি, দ্রুত commandstats চালিয়ে একটি স্পষ্ট KEYS দেখি। প্রোগ্রাম্যাটিক দৃষ্টিকোণ থেকে এটি স্বাভাবিক লাগতে পারে এমন কোড লিখতে:
for key in 'keys *': doAllTheThings()
কিন্তু যখন আপনার पास ১৩ মিলিয়ন কি থাকে, তখন জিনিসগুলো স্লো হয়ে যাবে। যেহেতু KEYS O(n) যেখানে n হলো ফেরত আসা কি সংখ্যা, তাই এর কমপ্লেক্সিটি dbsize দ্বারা বাধা পায়। এই পুরো অপারেশনের সময় আপনার ইনস্ট্যান্সে অন্য কিছু চালানো যায় না।
বিকল্প হিসেবে SCAN` দেখুন, যা আপনাকে ডেটাবেসে ধাপে ধাপে স্ক্যান করতে দেয়। এটি একটি ইটারেটরে কাজ করে তাই আপনি ইচ্ছামতো স্টার্ট-স্টপ করতে পারেন।
২. কী রেডিসকে স্লো করছে তা জানুন
যেহেতু রেডিসের লগ খুব ভার্বোস নয়, তাই ইনস্ট্যান্সের ভেতরে কী হচ্ছে সেটা ট্র্যাক করা কঠিন। خوشকισমتی से রেডিস commandstat ইউটিলিটি দিয়ে এটি দেখাতে পারে:
127.0.0.1:6379> INFO commandstats
# Commandstats
cmdstat_get:calls=78,usec=608,usec_per_call=7.79
cmdstat_setex:calls=5,usec=71,usec_per_call=14.20
cmdstat_keys:calls=2,usec=42,usec_per_call=21.00
cmdstat_info:calls=10,usec=1931,usec_per_call=193.10
এটি সব কমান্ড, কতবার চলেছে, এক্সিকিউট হওয়ায় কত মাইক্রোসেকেন্ড লেগেছে (মোট এবং প্রতি কল গড়) এর ব্রেকডাউন দেয়।
এটি রিসেট করতে সিম্পলি CONFIG RESETSTAT চালান, এবং আপনার একটি নতুন স্লেট পাবেন।
৩. Redis-Benchmark কে বেসলাইন হিসেবে ব্যবহার করুন, গוסপেল ট্রুথ হিসেবে নয়
রেডিসের সৃষ্টিকর্তা সালভাটোরে খুব সুন্দর বলেছিলেন: "রেডিসকে GET/SET দিয়ে টেস্ট করা ফেরারিকে বৃষ্টিতে মিরর পরিষ্কার করার দক্ষতা টেস্ট করার মতো।" অনেক লোক আমার কাছে আসে জানতে চেয়ে তাদের রেডিস-বেঞ্চমার্ক রেজাল্ট অপ্টিমাল নয় কেন। কিন্তু আমাদের অনেক ফ্যাক্টর বিবেচনা করতে হয়, যেমন:
- ক্লায়েন্ট-সাইডে কী লিমিটেশন থাকতে পারে?
- ভার্সনিং-এ কী পার্থক্য আছে?
- টেস্টগুলো আপনার অ্যাপ্লিকেশন যা করবে তার সাথে প্রাসঙ্গিক কি না?
Redis-Benchmark একটি ভালো বেসলাইন দেয় যাতে আপনার রেডিস-সার্ভার অস্বাভাবিক আচরণ করছে কিনা বুঝতে পারেন, কিন্তু এটাকে কখনোই সত্যিকারের "লোড টেস্ট" হিসেবে বিবেচনা করা উচিত নয়। লোড টেস্ট অবশ্যই আপনার অ্যাপ্লিকেশন কীভাবে আচরণ করে এবং প্রোডাকশন যতটুকু সম্ভব সতেজ এনভায়রনমেন্ট থেকে রিফ্লেক্ট করা উচিত।
৪. হ্যাশ আপনার সেরা বন্ধু
হ্যাশকে ডিনারএ আমন্ত্রণ জানান। হ্যাশকে ওয়াইন ও ডাইন করান। আপনি বিস্মিত হবেন যদি এটাকে সুযোগ দেন। আমি আগে অনেকবার এমন কি স্ট্রাকচার دیده থাকি:
foo:first_name foo:last_name foo:address
উপরের উদাহরণে, foo হয়তো একটি ইউজারের ইউজারনেম, এবং প্রতিটি আলাদা কি। এতে ভুলের সুযোগ থাকে এবং অপ্রয়োজনীয় কি যোগ হয়। পরিবর্তে একটি হ্যাশ বিবেচনা করুন। আপনার কাছে হঠাৎ একটু কি থাকে:
127.0.0.1:6379> HSET foo first_name "Joe"
(integer) 1
127.0.0.1:6379> HSET foo last_name "Engel"
(integer) 1
127.0.0.1:6379> HSET foo address "1 Fanatical Pl"
(integer) 1
127.0.0.1:6379> HGETALL foo
1) "first_name" 2) "Joe"
3) "last_name" 4) "Engel"
5) "address" 6) "1 Fanatical Pl"
127.0.0.1:6379> HGET foo first_name
"Joe"
৫. TTL সেট করুন!
যতটুকু সম্ভব এক্সপায়ারিং কির সুবিধা নিন। একটি চমৎকার উদাহরণ হলো অস্থায়ী অথেন্টিকেশন কি স্টোর করা। আপনি যখন অথেন্টিকেশন কি রিট্রিভ করেন—OAUTH উদাহরণ হিসেবে নিলে—আপনাকে প্রায়শই এক্সপারেশন টাইম দেওয়া হয়। কি সেট করার সময় সেম এক্সপারেশন দিয়ে সেট করুন, এবং রেডিস আপনার জন্য পরিষ্কার করবে! আর KEYS * দিয়ে সকল কি ওয়erniয়েট করার দরকার নেই, ঠিক?
৬. সঠিক ইভিকশন পলিসি বেছে নিন
কি পরিষ্কার করার কথা বললেই, আসুন ইভিকশন স্পর্শ করি। আপনার রেডিস ইনস্ট্যান্স ফুল হলে, রেডিস কি ইভিক্ট করার চেষ্টা করবে। আপনার ইউজ কেস অনুযায়ী, আমি volatile-lru রিকমেন্ড করছি—যদি আপনার এক্সপায়ারিং কি থাকে। যদি আপনি ক্যাশের মতো কিছু চালান এবং এক্সপারেশন সেট না থাকে, তবে allkeys-lru বিবেচনা করতে পারেন। উপলব্ধ অপশনগুলো দেখতে পারেন।
৭. ডেটা গুরুত্বপূর্ণ হলে Try/Except ব্যবহার করুন
যদি ডেটা আপনার রেডিস ইনস্ট্যান্সে পৌঁছাতে হয় এমনভাবে যা নিঃশর্তে গুরুত্বপূর্ণ, তবে আমি দৃঢ়ভাবে try/except বসানোর পরামর্শ দিচ্ছি। যেহেতু প্রায় সব রেডিস ক্লায়েন্ট "ফায়ার-অ্যান্ড-ফরগেট" কনফিগার করা থাকে, তাই কখনো কি ডেটাবেসে আসেনি সেটা বিবেচনা করা উচিত। এতে আপনার রেডিস কলের কমপ্লেক্সিটি প্রায় শূন্য বেড়ে, কিন্তু আপনি নিশ্চিত হবেন আপনার গুরুত্বপূর্ণ ডেটা সেখানে পৌঁছেছে।
৮. একই ইনস্ট্যান্সে ফ্লাড করবেন না
যতটুকু সম্ভব ওয়ার্কলোড একাধিক রেডিস ইনস্ট্যান্সে বাঁটান। ভার্সন ৩.০.০ থেকে রেডিস ক্লাস্টার উপলব্ধ। রেডিস ক্লাস্টার আপনাকে কি রেঞ্জ অনুযায়ী দिये गये মাস্টার/স্লেভ সেটগুলোর মধ্যে কি বাঁটাতে দেয়। ক্লাস্টারের জাদুর পূর্ণ ব্রেকডাউন এখানে পাওয়া যাবে। এবং আপনি যদি টিউটোরিয়াল খুঁজেন, তবে আর কোথাও দেখতে হবে না। যদি ক্লাস্টারিং অপশন না থাকে, তবে নেমস্পেসিং এবং একাধিক ইনস্ট্যান্সের মধ্যে কি ডিস্ট্রিবিউট করার কথা বিবেচনা করুন। আপনার ডেটা পার্টিশন করার চমৎকার লেখা রেডিস.আইও ওয়েবসাইটে পাওয়া যাবে।
৯. আরও کور = আরও ভালো, ঠিক?
ভুল। রেডিস একটি সিঙ্গেল থ্রেডেড প্রসেস এবং পার্সিস্টেন্স সক্ষম থাকলে সর্বোচ্চ দুটি কোর ব্যবহার করবে। আপনি যদি একই হোস্টে একাধিক ইনস্ট্যান্স চালানোর প্ল্যান না করেন—যা হপফুলি শুধু ডেভ টেস্টিংয়ের জন্য!—তবে একটি রেডিস ইনস্ট্যান্সের জন্য দুটির বেশি কোর দরকার নেই।
১০. সব জায়গায় HA করুন!
রেডিস সেন্টিনেল এখন খুব ভালোভাবে টেস্টেড, এবং অনেক ইউজার এটাকে প্রোডাকশনে চালাচ্ছে (অবজেক্টরকেট সহ!)। আপনি যদি আপনার অ্যাপ্লিকেশনের জন্য রেডিসে ভরবরভাবে নির্ভরশীল হন, তবে আপনাকে অনলাইন থাকার জন্য একটি HA (হাই অ্যাভেইলেবিলিটি) সমাধান বিবেচনা করতে হবে। অবশ্যই, আপনি যদি সবটা নিজে ম্যানেজ করতে না চান, তবে অবজেক্টরকেট আমাদের HA প্ল্যাটফর্ম ২৪x৭ সাপোর্টের সাথে অফার করে, একবার ট্রাই করুন।