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

Redis পারফরম্যান্স অপ্টিমাইজ করার ১০টি অপরিহার্য সেরা অনুশীলন

"মূলত মার্চ ২০১৫-এ ObjectRocket.com/blog-এ প্রকাশিত"

Redis® একটি অদ্ভুত টুল, এবং টেক কমিউনিটি এটি ভালোবাসে! এটি একদূর পথ এসেছে একটি ছোট পার্সোনাল প্রজেক্ট হতে Antirez-র থেকে একটি ইন্ডাস্ট্রি-স্ট্যান্ডার্ড ইন-মেমরি ডেটা স্টোরেজ হতে। তার সাথে Redis সঠিকভাবে ব্যবহার করার জন্য সেরা অনুশীলনগুলোর একটি সেট আসে। এই আর্টিকেলে, আমরা Redis সঠিকভাবে ব্যবহার করার দশটি কুইক টিপ্স এক্সপ্লোর করব।

Redis পারফরম্যান্স অপ্টিমাইজ করার ১০টি অপরিহার্য সেরা অনুশীলন

১. KEYS ব্যবহার করা বন্ধ করুন

ঠিক আছে, হয়তো চিৎকার করে আর্টিকেল শুরু করা ভালো উপায় নয়। কিন্তু এটি সম্ভবত সবচেয়ে গুরুত্বপূর্ণ পয়েন্ট। খুব বেশি সময়, আমি একটি Redis ইনস্ট্যান্স দেখি, একটি কুইক commandstats টানি, এবং একটি চমকপ্রদ KEYS আমাকে চিয়ের করে। সবিচার দৃষ্টিকোণ থেকে, এটি অর্থপূর্ণ হবে পসিউডোকোডের মত কিছু থাকা:

for key in 'keys *': doAllTheThings() 

কিন্তু যখন আপনার কাছে, মনে করুন, ১৩ মিলিয়ন কী থাকে, তখন জিনিসগুলো স্লো হয়ে যাবে। যেহেতু KEYS হলো O(n) যেখানে n হলো রিটার্ন হওয়া কী সংখ্যা, আপনার কমপ্লেক্সিটি ডেটাবেস আকার দ্বারা বাউন্ডেড। এছাড়া এই পুরো অপারেশনের সময়, আপনি আপনার ইনস্ট্যান্সের বিপরীতে কিছুই চালাতে পারবেন না।

বিকল্প হিসেবে, SCAN চেক আউট করুন, যা আপনাকে আপনার ডেটাবেস ইনক্রিমেন্টালি স্ক্যান করতে দেয়। এটি একটি ইটারেটর ওপর অপারেট করে তাই আপনি আপনার মতো স্টপ এবং গো করতে পারেন।

২. বের করুন কী Redis-কে স্লো করছে

কারণ Redis-এ সবচেয়ে verbose লগ নেই, সাবধানে ইনস্ট্যান্সের ভিতরে কী হচ্ছে সেটি ট্র্যাকডাউন করা কঠিন। خوشকিসমتی से Redis আপনাকে 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 ব্যবহার করুন একটি বেসলাইন হিসেবে, না গস্পেল Труথ হিসেবে

Redis-এর সৃষ্টিকর্তা Salvatore আন্ডারলাইন করেছেন: "Redis GET/SET করা যেন একটি ফেরারি টেস্ট করা যাতে বুঝা যায় বৃষ্টি পড়লে সেটি মিরর কতটুকু ভালো সাফ করতে পারে।" অনেক সময়, লোকেরা আমার কাছে আসে বিস্ময় করে যে তাদের Redis-Benchmark রেজাল্ট কেন অপ্টিমাল নয়। কিন্তু আমাদের অনেক ভিন্ন ফ্যাক্টর বিবেচনা করতে হবে, যেমন:

  • ক্লায়েন্ট-সাইড লিমিটেশন
  • ভার্সনিং-এ পার্থক্য
  • চলমান টেস্ট

Redis-Benchmark একটি অসাধারণ বেসলাইন প্রদান করে নিশ্চিত করতে যে আপনার redis-server স্বাভাবিকভাবে আচরণ করছে, কিন্তু এটি কখনোই একটি সত্য লোড টেস্ট হিসেবে বিবেচনা করা উচিত নয়। লোড টেস্ট আপনার অ্যাপ্লিকেশন কীভাবে আচরণ করে একটি এনভায়রনমেন্টে যা প্রোডাকশন máximo কাছাকাছি সেটি রিফ্লেক্ট করতে হবে।

৪. Hashes আপনার সেরা বন্ধু

Hashes-কে ডিনারে আমন্ত্রণ জানান। Hashes-কে ওইন ও ডাইন করুন। আপনি চকিত হবেন যে সেগুলো কতটুকু খুশি আনতে পারে যদি আপনি সেগুলোকে একটা সুযোগ দেন। আমি একাধিকবার কী স্ট্রাকচার দেখেছি নিচের মত:

foo:first_name foo:last_name foo:address 

সেই উদাহরণে, foo হতে পারে একটি ইউজারনেম একটি ইউজারের জন্য, এবং সেগুলোর প্রতিটি লাইন একটি আলাদা কী। এটি এরর এবং অনাবশ্যক কীগুলোর জন্য জায়গা যোগ করে। বদলে, একটি hash বিবেচনা করুন। হঠাৎ আপনার কাছে শুধু একটি কী রয়েছে:

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 (Time To Live) সেট করুন!

যখনই সম্ভব, এক্সপায়ারিং কী-র সুবিধা নিন। একটি পেরফেক্ট উদাহরণ হলো টেম্পোরারি অথেনটিকেশন কী সংরক্ষণ করা। আপনি যখন অথ কী রিট্রিভ করেন, OAUTH উদাহরণ হিসেবে, আপনি প্রায়শই এক্সপিরেশন টাইম পান। আপনি যখন কী সেট করেন, একই এক্সপিরেশন সহ সেট করুন, এবং Redis আপনার জন্য ক্লিন আপ করবে! সেই সকল কীতে ইটারেট করার জন্য KEYSর প্রয়োজন নেই।

৬. সঠিক ইভিকশন পলিসি বেছে নিন

কী ক্লিন আপ করার টপিকে থাকায়, ইভিকশন-র ওপর কথা বলি। আপনার Redis ইনস্ট্যান্স ফুল হলে, Redis কী ইভিক্ট করার চেষ্টা করে। আপনার ইউজ কেসের উপর নির্ভর করে, আমরা দৃঢ়ভাবে volatile-lru সুপারিশ করি—অনুমান করে আপনার এক্সপায়ারিং কী রয়েছে। আপনি যদি ক্যাশের মত কিছু রান করেন এবং এক্সপায়ারি সেট নেই, তবে আপনি allkeys-lru বিবেচনা করতে পারেন। আমরা সুপারিশ করি যে আপনি এখানে উপলব্ধ অপশনগুলো চেক আউট করুন।

৭. আপনার ডেটা গুরুত্বপূর্ণ হলে, try/except বসান

যদি আপনার Redis ইনস্ট্যান্সে ডেটা পৌঁছানো একদম ক্রিটিক্যাল হয়, তবে আমি দৃঢ়ভাবে try/except বসানোর সুপারিশ করি। কারণ অধিকাংশ লোক Redis ক্লায়েন্ট কনফিগার করে ফায়ার-অ্যান্ড-ফরগেট, আপনাকে সবসময় পরিকল্পনা করनी উচিত যখন একটি কী আসলে ডেটাবেসে পৌঁছাতে ব্যর্থ হয়। আপনার Redis কলে এই কমপ্লেক্সিটি এই কেসে কিছুই নয়, এবং আপনি নিশ্চিত করতে পারেন আপনার গুরুত্বপূর্ণ ডেটা সেখানে পৌঁছাচ্ছে যেখানে হওয়া উচিত।

৮. একই ইনস্ট্যান্সে ফ্লাড করবেন না

যখনই সম্ভব, ওয়ার্কলোড একাধিক Redis ইনস্ট্যান্সে ভাগ করুন। Redis Cluster সংস্করণ 3.0.0 থেকে উপলব্ধ। Redis Cluster আপনাকে কী ভাঙতে দেয় প্রদত্ত প্রাইমারি এবং সেকেন্ডারি সেটগুলোর মাঝপথে কী রেঞ্জের ভিত্তিতে। আপনি এখানে Redis Cluster-র পেছনের ম্যাজিকের পূর্ণ ব্রেকডাউন পেতে পারেন। এবং আপনি যদি একটি টিউটোরিয়াল খুঁজেন, তবে আর কোথাও দেখতে হবে না। আপনি এখানে পেতে পারেন। আপনি redis.io ওয়েবসাইটে আপনার ডেটা পার্টিশন করার উপর একটি অসাধারণ রাইট-আপ পেতে পারেন।

৯. বেশি কোর = আরও ভালো পারফরম্যান্স, ঠিক নাকি?!

ভুল। Redis একটি সিঙ্গল-থ্রেডেড প্রসেস এবং অধিকতম দুটি কোর কনসাম করবে যদি আপনার পേرسیস্টেন্স সক্রিয় থাকে। আপনি যদি একই হোস্টে একাধিক ইনস্ট্যান্স রান করার প্ল্যান না করেন—আশা করি শুধু ডেভ টেস্টিং-এর জন্য, সেই কেসে—আপনাকে একটি Redis ইনস্ট্যান্সের জন্য দুইটির বেশি কোর প্রয়োজন নয়।

১০. সব জিনিস HA করুন!

Redis Sentinel এখন খুব ভালো টেস্টেড, এবং অনেক ব্যবহারকারী প্রোডাকশনে এটি রান করছে (Rackspace ObjectRocket অন্তর্ভুক্ত)। আপনি যদি আপনার অ্যাপ্লিকেশনের জন্য Redis-এ বড় মাত্রায় নির্ভর করেন, তবে আপনাকে একটি হাই অভেইলেবিলিটি (HA) সমাধান বিবেচনা করতে হবে আপনাকে অনলাইন রাখতে। অবশ্যই, আপনি যদি সেটি নিজে ম্যানেজ করতে না চান, Rackspace ObjectRocket আমাদের HA প্ল্যাটফর্ম ২৪×৭ সাপোর্টসহ অফার করে। একবার চেষ্টা করুন।

Rackspace DBA Services সম্পর্কে আরও জানুন।

ফিডব্যাক ট্যাব ব্যবহার করে মন্তব্য করুন বা প্রশ্ন করুন। আপনি Sales Chat-এ ক্লিক করুন এখন চ্যাট শুরু করতে এবং কথা বলতে শুরু করতে।

The Rackspace Cloud Terms of Service দেখতে এখানে ক্লিক করুন।


  1. DBA গাইড: Oracle Workflow Notification Mailer সমস্যার দ্রুত সমাধান

  2. রেডিস কার্যকরভাবে ব্যবহার করার ১০টি কুইক টিপস

  3. উইন্ডোজ ইউজারদের জন্য ৭টি অপরিহার্য OS X টিপস: ম্যাকে ট্রানজিশন সহজ করুন

  4. আপনার iPhone X মাস্টার করার ৯টি অপরিহার্য টিপস