কম্পিউটার

রেডিস প্রোটোকলের জন্য একটি প্রাথমিক নির্দেশিকা

রেডিসের সেরা অসংযুক্ত বৈশিষ্ট্যগুলির মধ্যে একটি হল এর তারের প্রোটোকল। এই কারণেই রেডিসের উচ্চমানের ক্লায়েন্ট লাইব্রেরির বৃহত্তম ইকোসিস্টেম রয়েছে। রেডিস ওয়্যার প্রোটোকলটি অসাধারণভাবে সহজ, যা একটি ক্লায়েন্ট তৈরি করা সহজ করে তোলে যা রেডিসের সমস্ত প্রধান বৈশিষ্ট্যগুলিকে প্রয়োগ করে৷ এটি এমনভাবে ডিজাইন করা হয়েছে যা দ্রুত এবং দক্ষ ক্লায়েন্ট লাইব্রেরি লেখা সহজ করে তোলে৷

RESP কি?

RESP (RE dis S erialization P rotocol) হল টেক্সট-ভিত্তিক প্রোটোকলের নাম যা Redis ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে ওভারটিসিপি যোগাযোগ করতে ব্যবহার করে। সার্ভার এবং ক্লায়েন্টের মধ্যে সমস্ত যোগাযোগ পাঁচটি মৌলিক প্রকার নিয়ে গঠিত:

  • সরল স্ট্রিং সাধারণ সার্ভারের উত্তরগুলির জন্য ব্যবহৃত হয় যেমন "ঠিক আছে" (সফল লিখিত আদেশের পরে) বা "PONG" (PINGcommand-এর সফল প্রতিক্রিয়া)।
  • বাল্ক স্ট্রিং GET, LPOP, এবং HGET-এর মতো প্রায় সমস্ত একক-মানের রিড কমান্ডের জন্য ফেরত দেওয়া হয়। বাল্ক স্ট্রিংগুলি সাধারণ স্ট্রিংগুলির থেকে আলাদা যে এতে যেকোন কিছু থাকতে পারে — নতুন লাইন, নিয়ন্ত্রণ অক্ষর, এমনকি বৈধRESP, সবই এড়িয়ে যাওয়া বা এনকোড করা ছাড়াই৷
  • পূর্ণসংখ্যা STRLEN, HLEN, বা BITCOUNT এর মতো যেকোন ধরনের কাউন্টিং কমান্ডের উত্তর হিসাবে ব্যবহার করা হয়।
  • অ্যারে অন্যান্য অ্যারে সহ যেকোন সংখ্যক RESP অবজেক্ট থাকতে পারে। এটি সার্ভারে কমান্ড পাঠাতে, সেইসাথে HGETALL, LRANGE, বা MGET এর মতো একাধিক উপাদান ফেরত দেয় এমন যেকোনো উত্তরের জন্য ব্যবহার করা হয়।
  • ত্রুটি আপনার কমান্ড পরিচালনা করার সময় যখনই Redis কোনো ত্রুটির সম্মুখীন হয়, যেমন তথ্যের ভুল ধরণ ধারণ করে একটি কী-এর বিরুদ্ধে একটি কমান্ড চালানোর চেষ্টা করার সময় ফেরত দেওয়া হয়৷

RESP লেখার এবং পড়ার সময়, আমাদের কী বা মানগুলির কোনও পালানো বা এনকোডিং করতে হবে না। RESP এর একমাত্র অংশ যা আমাদের প্রকৃতপক্ষে পার্স করতে হবে তা হল প্রতিটি RESP অবজেক্টের সাথে অন্তর্ভুক্ত করা সহজ মেটাডেটা।

RESP দেখতে কেমন?

সমস্ত RESP অবজেক্ট একটি উপসর্গ অক্ষর দিয়ে শুরু হয় এবং একটি লাইন টার্মিনেটর দিয়ে শেষ হয় (অ্যারে ব্যতীত, যা তাদের নিজস্ব লাইন টার্মিনেটর অন্তর্ভুক্ত করে না)। একটি RESP অবজেক্টের সহজ উদাহরণ হল OK সহজ স্ট্রিং প্রতিক্রিয়া:

+OK\r\n

(RESP একটি মানব-পাঠযোগ্য প্রোটোকল কিন্তু স্পষ্টতার জন্য আমি স্পষ্টভাবে লাইন ব্রেকগুলি লিখব (\r\n ) সমস্ত RESP উদাহরণে।)

উপরের সাধারণ স্ট্রিং-এ, + সহজ স্ট্রিং উপসর্গ, OK সাধারণ স্ট্রিং এর মূল অংশ, এবং \r\n লাইন টার্মিনেটর যা এই সরল স্ট্রিং এর শেষ চিহ্নিত করে।

একটি সাধারণ স্ট্রিং পড়তে, আমরা পরবর্তী \r\n পর্যন্ত পড়ি লাইনটারমিনেটর, পূর্ববর্তী বাইট ফেরত দিচ্ছে ( + পর্যন্ত ) প্রত্যাবর্তিত উত্তর স্ট্রিং হিসাবে। এটি কাজ করে কারণ RESP সাধারণ স্ট্রিংগুলিতে কোনও নতুন লাইন অক্ষর অন্তর্ভুক্ত করা যায় না৷

ত্রুটি এবং পূর্ণসংখ্যাগুলি সাধারণ স্ট্রিংগুলির অনুরূপভাবে বিন্যাসিত হয়, তবে তারা বিভিন্ন উপসর্গ ব্যবহার করে। ত্রুটিগুলি - দিয়ে উপসর্গযুক্ত :

-ERR unknown command 'GETT'\r\n

এবং পূর্ণসংখ্যা : এর সাথে উপসর্গযুক্ত :

:99\r\n

বাল্ক স্ট্রিংগুলি অনন্য যে তাদের দুটি অংশ রয়েছে। একটি দৈর্ঘ্য স্পেসিফিকেশন এবং একটি বডি:

$13\r\nHello, World!\r\n

$ হল বাল্ক স্ট্রিং প্রিফিক্স, 13 প্রকৃত স্ট্রিংবডিতে বাইটের সংখ্যা এবং তারপর \r\n দৈর্ঘ্য স্পেসিফিকেশন শেষ করে। Hello, World! isthe 13 বাইট স্ট্রিং বডি, এবং এটিও \r\n দিয়ে শেষ করা হয় (যা স্ট্রিং বডির অংশ নয়)।

কারণ বাল্ক স্ট্রিং কন্টেইনার বডির জন্য একটি সঠিক দৈর্ঘ্য প্রদান করে, শেষ খুঁজে বের করার জন্য কখনই প্রকৃত স্ট্রিং বডিকে পার্স করতে হবে না — আমরা স্ট্রিংয়ের বিষয়বস্তু পরীক্ষা না করেই সকেট থেকে আরও 13 বাইট (প্লাস ফাইনাল লাইন টার্মিনেটর) পড়তে পারি। এর মানে হল আমরা স্ট্রিং এর বডিতে যে কোনো ডেটা ব্যবহার করতে পারি যা আমরা বিষয়বস্তু এনকোডিং বা এস্কেপিং ছাড়াই ব্যবহার করতে পারি।

অ্যারেগুলিও একটি দৈর্ঘ্যের স্পেসিফিকেশন দিয়ে শুরু হয়, দৈর্ঘ্যের ক্ষেত্রটি ব্যতীত অ্যারের বিষয়বস্তুতে বাইটের সংখ্যার পরিবর্তে অ্যারেতে বস্তুর সংখ্যা নির্দেশ করে৷

*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n

উপরের উদাহরণে, আমাদের একটি অ্যারে রয়েছে যাতে দুটি বাল্ক স্ট্রিং রয়েছে (foo এবং bar ) যদিও অ্যারের দৈর্ঘ্যের স্পেসিফিকেশন আমাদেরকে বাল্ক স্ট্রিং পড়ার সময় যেভাবে করতে পারি সেভাবে এড়িয়ে যাওয়ার অনুমতি দেয় না, এটি আমাদের ক্লায়েন্টে অ্যারে প্রয়োগ করা সহজ করে তোলে। আমরা অ্যারের আকার পড়ি, আরও অনেকগুলি অবজেক্ট পড়ি এবং তারপর সেই সমস্ত অবজেক্টগুলিকে চূড়ান্ত অ্যারেতে ফিরিয়ে দেই।

সমস্ত Redis কমান্ড বাল্ক স্ট্রিং এর অ্যারে হিসাবে পাঠানো হয়. উদাহরণস্বরূপ, "SET mykey 'my value'" কমান্ডটি লেখা হবে এবং এইভাবে পাঠানো হবে:

*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$8\r\nmy value\r\n

আরও RESP বিবরণ

RESP-এ ব্যবহৃত প্রিফিক্সড দৈর্ঘ্যগুলি পার্সারদেরকে জটিল স্টেট মডেলিং বা ডেটার মাধ্যমে একাধিক পাস করার প্রয়োজন ছাড়াই প্রয়োগ করার অনুমতি দেয়, যাতে খুব দ্রুত পার্সার তৈরি করা যায়৷

এমন অনেকগুলি বিবরণ রয়েছে যা আমি এখানে কভার করিনি, যেমন নাল বাল্ক স্ট্রিং এবং নাল অ্যারে। আরও তথ্যের জন্য, অফিসিয়াল ডকুমেন্টেশন (স্বাভাবিকভাবে) RESP-এর জন্য খুব পঠনযোগ্য এবং ব্যাপক ডকুমেন্টেশন পৃষ্ঠা রয়েছে৷

প্রোটোকলটি আরও ভালভাবে বোঝার একটি দুর্দান্ত উপায় হ'ল নিজেকে একটি সাধারণ গ্রাহক প্রয়োগ করার চেষ্টা করা। রেডিস প্রোটোকলিন গো নেক্সট পড়ার এবং লেখার জন্য আমাদের গাইড দেখুন।


  1. শিশুদের জন্য চিট ইঞ্জিন (সম্পূর্ণ নির্দেশিকা)

  2. রেডিস ইনসাইডার প্রোগ্রামের ঘোষণা

  3. Redis SETRANGE – কিভাবে redis এ স্ট্রিং মানের একটি অংশ আপডেট করবেন

  4. রেডিস স্ট্রলেন - রেডিস ডেটাস্টোরে কীভাবে স্ট্রিং মানের দৈর্ঘ্য পাবেন