রেডিস এবং মেমকেচে নাকি কেবল রেডিস?


85

আমি সহজ Rails.cacheইন্টারফেসের মাধ্যমে আমার রেলস 3 অ্যাপে কিছু ক্যাচিংয়ের জন্য মেমক্যাচ ব্যবহার করছি এবং এখন আমি রেডিস এবং রেসকিউ সহ কিছু পটভূমি জব প্রসেসিং করতে চাই।

আমি মনে করি তারা উভয় ব্যবহারের পরোয়ানা দিতে যথেষ্ট আলাদা different যদিও হিরকুতে, মেমক্যাচড এবং রেডিস উভয়ই আলাদা আলাদা ফি ব্যবহার করতে পারে। দুটোই ব্যবহার করা কি বোধগম্য নয় বা কেবল রেডিস ব্যবহার করে আমার স্থানান্তরিত হওয়া উচিত?

আমি ক্যাচিংয়ের জন্য মেমক্যাচ করা পছন্দ করি কারণ সাম্প্রতিককালে ব্যবহৃত কীগুলি স্বয়ংক্রিয়ভাবে ক্যাশে থেকে বেরিয়ে আসে এবং অবিরাম থাকতে আমার ক্যাশে ডেটার দরকার হয় না। রেডিস আমার কাছে বেশিরভাগ ক্ষেত্রে নতুন, তবে আমি বুঝতে পারি যে এটি ডিফল্টরূপে স্থির থাকে এবং কীগুলি স্বয়ংক্রিয়ভাবে ক্যাশে থেকে শেষ হয় না।

সম্পাদনা: শুধু আমার প্রশ্নটি দিয়ে আরও পরিষ্কার হতে চেয়েছিলেন। আমি জানি উভয়ের পরিবর্তে কেবল রেডিস ব্যবহার করা সম্ভব। আমি অনুমান করি যে আমি কেবল এটির ক্ষেত্রে কোনও নির্দিষ্ট অসুবিধা আছে কিনা তা জানতে চাই? বাস্তবায়ন এবং অবকাঠামো উভয়ই বিবেচনা করে, কেন কেবলমাত্র রেডিস ব্যবহার করা উচিত নয়? (অর্থাত্, সহজ ক্যাচিংয়ের জন্য কী দ্রুত মেকচেড করা যায়?) আমি কোনওভাবেই সুনির্দিষ্ট কিছু পাইনি।


4
অন্য কারও জন্য এটি বিবেচনা করা হচ্ছে: রেলের জন্য একটি রেডিস-স্টোর প্লাগইন রয়েছে যা আপনাকে ক্যাশে স্টোর হিসাবে রেডিস ব্যবহার করতে দেয়।
মার্ককিজাদা

উত্তর:


49

ধরে নিই যে আপনি ইতিমধ্যে করা ক্যাচিংয়ের জন্য মেমচেড থেকে রেডিসে স্থানান্তর করা যথেষ্ট সহজ, আমি কেবল জিনিসগুলিকে সহজ রাখতে রেডিসের সাথে যাই।

রেডিসে অধ্যবসায় optionচ্ছিক, তাই আপনি যদি এটি চান তবে আপনি এটি মেমচেডের মতো ব্যবহার করতে পারেন can আপনি এমনকি দেখতে পাচ্ছেন যে আপনার ক্যাশেটিকে অবিচ্ছিন্ন করা পুনঃসূচনা করার পরে প্রচুর ক্যাশে মিস করা এড়াতে দরকারী। মেয়াদোত্তীর্ণতাও উপলভ্য - অ্যালগরিদম ম্যাকচেড থেকে কিছুটা পৃথক, তবে বেশিরভাগ কাজের জন্য যথেষ্ট নয় - বিশদ বিবরণের জন্য http://redis.io/commands/expire দেখুন।


4
উত্তর এবং প্রাসঙ্গিক ডক্সের জন্য ধন্যবাদ। আমি কী খুঁজছি তা আরও পরিষ্কার করার জন্য আমি আমার প্রশ্নটি কিছুটা সম্পাদনা করেছি। পুনরায় চালু হওয়ার পরে ক্যাশে অধ্যবসায়ের বিষয়ে ভাবি নি ... এটি একটি দুর্দান্ত বৈশিষ্ট্য। (যদিও আমি নিশ্চিত নই যে হিরকু-এর সাথে যাওয়ার জন্য আমি পুনরায় ব্যবহার করছিলাম এটি বিবেচনা করে কতটা কার্যকর considering)
মার্ককেজাদা

4
যদি আপনি কিছু আইটেমের সংক্ষিপ্ত বিবরণ (টুকরো ক্যাচিং) এবং কিছু আইটেমগুলি রেডিসে ক্রমাগত রাখতে চান তবে আপনার কি দুটি পৃথক রেডিস উদাহরণ তৈরি করতে হবে?
ব্রায়ান আর্মস্ট্রং

4
আমরা যখন রেডিস উভয় কাজের সারি এবং ক্যাশে ব্যবহার করি তখন আমরা বিশেষত @ ব্রায়ানআর্মস্ট্রংয়ের কারণগুলির জন্য বিভিন্ন কনফিগারেশন সহ এগুলি চালিত করি। ক্যাশে ক্ষণস্থায়ী হয় তাই আমরা এটিকে দ্রুত হওয়ার সাথে এটি কনফিগার করে থাকি, তবে স্মৃতিতে জিনিসগুলি হারাতে এবং এলআরইউ ড্রপ করা ঠিক আছে। কাতার জন্য, আমরা সত্যিই চাকরি হারাতে চাই না তাই আমরা দৃ it়তার সাথে এটি কনফিগার করি যাতে এটি পুনরুদ্ধারযোগ্য।
জাওয়াদস্যাক 23

@ জাওয়াদস্যাকের আপনার একটি পোস্ট রয়েছে যেখানে আপনি দেখান যে আপনি এই কনফিগারেশনটি কীভাবে প্রয়োগ করেছেন?
মার্কার

4
@ মার্কার ভাল ধারণা। আমি এখনই করছি: ballardhack.wordpress.com/2015/09/30/…
জাওয়াদস্যাক

44

আমি রেডিস-স্টোরের লেখক, সরাসরি রেডিস কমান্ড ব্যবহার করার দরকার নেই, কেবল :expires_inএই জাতীয় বিকল্পটি ব্যবহার করুন :

ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes

রেডিস ব্যবহারের সুবিধা হ'ল স্থিরতা এবং আমার রত্নের সাথে এটি হ'ল আপনার কাছে ইতিমধ্যে স্টোর রয়েছে Rack::Cache, Rails.cacheবা I18n


প্রতিক্রিয়া লুকা জন্য ধন্যবাদ। আমি ধরে নিচ্ছি আপনি ওভাররাইড করতে পারেন: যখন আপনার অবিচ্ছিন্নভাবে কিছু সঞ্চয় করতে হবে তখন সরাসরি মেয়াদ উত্তীর্ণ হয়? আমি অনুমান করি যে প্রশ্নটি সত্যই উভয় মেমক্যাচড ধরণের কার্যকারিতা এবং একে অপরের পাশাপাশি ধ্রুবক স্টোর হিসাবে রেডিস ব্যবহার সম্পর্কে।
মার্ককিজডা

4
আমি মনে করি না যে এগুলি দুটি নো এসকিউএল সেগমেন্টে রয়েছে বলে উভয়ই পাশাপাশি মেমক্যাচ করা এবং পুনরায় redis করা বোধগম্য: উভয়ই একে / ভি স্টোর। রেডিস প্রসেস: 1. মেমচেডের চেয়ে দ্রুত 2. আরও শক্তিশালী কমান্ড 3. কোন ক্যাশে ওয়ার্মআপের প্রয়োজন নেই 4. অন্যান্য সমস্যা সমাধানের জন্য দরকারী (যেমন রেসকিউয়ের সাথে সারি) কনস: 1. আপনার একটি বাহ্যিক রত্ন দরকার 2. পুনরায় চালু করার পরে সার্ভার অ্যাপেন্ড ফাইল থেকে ডেটা পড়ার সময় কমান্ডগুলি গ্রহণ করে না মেমক্যাচড প্রস: রেলগুলিতে বেকড কনস: ১. রেডিসের চেয়ে ধীরে ধীরে ২. ক্যাশে ওয়ার্মআপ।
লুকা গুইদি

4
@ লুকাগুইডি আমি বর্তমানে আমার রেল ক্যাশে রেডিসটোর ব্যবহার করছি। রেডিস ইউআরএল এবং ডিফল্ট উভয় কীভাবে সেট করবেন তা আমি বুঝতে পারি না :expires_in। তুমি কি সাহায্য করতে পারো?
ক্রিস ভিনসেন্ট

আমার মত আপনার সমস্যা সেটিং সম্মুখীন হয়ে থাকেন :expires_inredis_store ব্যবহার পড়ুন stackoverflow.com/questions/20907247/...
Anirudhan জে

19

আমি কয়েকটি বড় রেল সাইট দেখেছি যা মেমক্যাচড এবং রেডিস উভয়ই ব্যবহার করে। মেমক্যাচ অল্পকালীন জিনিসের জন্য ব্যবহৃত হয় যা স্মৃতিতে গরম রাখতে ভাল তবে প্রয়োজনে হারিয়ে যেতে / পুনরায় জেনারেট করা যেতে পারে এবং অবিরাম সঞ্চয় করার জন্য রেডিস। উভয়ই ভারী অপারেশন পড়ার / লেখার জন্য প্রধান ডিবি থেকে বোঝা নেওয়ার জন্য ব্যবহৃত হয়।

আরো বিস্তারিত:

মেমক্যাচড: পৃষ্ঠা / টুকরা / প্রতিক্রিয়া ক্যাচিংয়ের জন্য ব্যবহৃত হয়েছে এবং মেমক্যাচে মেমরির সীমাটি হিট করা ঠিক আছে কারণ এটি পুরানো স্টাফের মেয়াদ শেষ করতে এলআরইউ (কমপক্ষে সম্প্রতি ব্যবহৃত হয়েছে) হবে এবং প্রায়শই অ্যাক্সেস করা কীগুলি স্মৃতিতে গরম রাখবে। এটি গুরুত্বপূর্ণ যে মেম্যাচেডের কোনও কিছুই প্রয়োজনে ডিবি থেকে পুনরায় তৈরি করা যেতে পারে (এটি আপনার একমাত্র অনুলিপি নয়)। তবে আপনি এটিতে জিনিস ফেলে দিতে পারেন এবং মেম্যাচেডগুলি চিত্রিত হবে যা বেশিরভাগ ঘন ঘন ব্যবহৃত হয় এবং সেগুলিকে স্মৃতিতে গরম রাখে। মেমক্যাচ থেকে জিনিসগুলি সরানোর বিষয়ে আপনাকে চিন্তা করতে হবে না।

redis: আপনি এটি এমন ডেটার জন্য ব্যবহার করেন যা আপনি হারাতে চান না এবং মেমরিতে ফিট করার পক্ষে এটি যথেষ্ট ছোট। এর মধ্যে সাধারণত রিকুই / সাইডিক্যাক জবস, রেট সীমাবদ্ধতার কাউন্টার, বিভাজন পরীক্ষার ফলাফল বা এমন কোনও কিছু যা আপনি হারাতে / পুনরায় তৈরি করতে চান না। আপনি এখানে মেমরির সীমা অতিক্রম করতে চান না, তাই আপনি কী সঞ্চয় করেন এবং পরে কীভাবে পরিষ্কার করবেন সে সম্পর্কে আপনাকে আরও কিছুটা যত্নবান হতে হবে।

রেডিস একবার তার স্মৃতি সীমা ছাড়িয়ে গেলে পারফরম্যান্স সমস্যায় ভুগতে শুরু করে (আমি ভুল হলে আমাকে সংশোধন করুন)। রেডিসকে মেমক্যাচড এবং এলআরইউ এর মেয়াদ শেষ হওয়া স্টাফের মতো কাজ করার জন্য কনফিগার করে এটি সমাধান করা সম্ভব, তাই এটি কখনই এর স্মৃতি সীমাতে পৌঁছায় না। কিন্তু আপনি রেডিসে রাখছেন এমন সমস্ত কিছু, যেমন রিসিভ জবসের মতো করে এটি করতে চান না। সুতরাং লোকেরা প্রায়শই ডিফল্ট রাখার পরিবর্তে, রেইলস ক্যাশে মেমক্যাচ ( dalliরত্ন ব্যবহার করে ) ব্যবহার করতে সেট করে । এবং তারপরে তারা redis অপারেশন করতে একটি পৃথক $ redis = ... গ্লোবাল ভেরিয়েবল রাখে।

# in config/application.rb
config.cache_store = :dalli_store  # memcached

# in config/initializers/redis.rb
$redis = $redis = Redis.connect(url: ENV['REDIS_URL'])

রেডিসে এগুলি করার সহজ উপায় হতে পারে - সম্ভবত দুটি পৃথক রেডিস উদাহরণ রয়েছে, একটি এলআরইউ হার্ড মেমরির সীমা সহ, মেমক্যাশের অনুরূপ, এবং অন্যটি অবিরাম সঞ্চয় করার জন্য? আমি এটি ব্যবহৃত দেখিনি, তবে আমি অনুমান করছি এটি করণীয় হবে।


15

আমি এই বিষয়ে আমার উত্তরটি পরীক্ষা করে বিবেচনা করব:

রেল এবং ক্যাশিং, মেমক্যাস এবং রেডিসের মধ্যে স্যুইচ করা কি সহজ?

মূলত, আমার অভিজ্ঞতার মাধ্যমে, আমি তাদের আলাদা রাখার পক্ষে পরামর্শ দেব: ডেটা স্ট্রাকচারের জন্য ক্যাচিংয়ের জন্য মেমক্যাচ করা হয়েছে এবং আরও স্ট্রেনসিটিভ স্টোরেজ রেডিস করা হয়েছে


যদিও আমি প্রাথমিকভাবে আমার প্রশ্নের মূল উত্তরের ভিত্তিতে এগুলি একত্রীকরণের পরিকল্পনা করেছি, তবে আমি মূলত একই সিদ্ধান্তে এসেছি। আমি বেসিক ক্যাচিংয়ের জন্য মেমক্যাচ ব্যবহার করছি এবং রেসিসের জন্য রেডিস।
মার্ককিজডা

6

আমি রেডিস ল্যাবগুলিতে টিমকে জিজ্ঞাসা করেছি (যারা মেমক্যাচড ক্লাউড এবং রেডিস ক্লাউড অ্যাডগুলি সরবরাহ করে ) তারা কোন পণ্যটি রেল ক্যাশে দেওয়ার পরামর্শ দেবে about তারা বলেছিল যে তারা সাধারণত রেডিস ক্লাউডকে সুপারিশ করবে, মেমক্যাচড ক্লাউডটি মূলত উত্তরাধিকারের উদ্দেশ্যে দেওয়া হয় এবং উল্লেখ করে যে তাদের মেমক্যাচযুক্ত ক্লাউড পরিষেবাটি আসলে রেডিস ক্লাউডের শীর্ষে নির্মিত।


সুতরাং ব্রায়ানের উত্তরে উল্লিখিত মেমক্যাচড এবং রেডিস উভয়ের কোনও দরকার নেই? "লোকেরা প্রায়শই ডিফল্ট রেইলস কোডকে ম্যাকচেড ব্যবহারের জন্য সেট করে রাখে (ডালির মণি ব্যবহার করে) then তারপরে তারা রেডিস অপারেশন করতে আলাদা separate redis = ... গ্লোবাল ভেরিয়েবল রাখে।"
মার্কার

4

আপনি তাদের জন্য কী ব্যবহার করছেন তা আমি জানি না, তবে প্রকৃতপক্ষে দু'টি ব্যবহারই আপনাকে একটি পারফরম্যান্স সুবিধা দিতে পারে: মেম্যাচড রেডিসের চেয়ে একাধিক কোর জুড়ে চলছে আরও ভাল পারফরম্যান্স, সুতরাং মেমক্যাচযুক্ত সবচেয়ে গুরুত্বপূর্ণ ডেটা ক্যাশে করা এবং বাকীগুলি রেডিসে রেখে , এর ডেটাবেস হিসাবে তার ক্ষমতা গ্রহণ করে কর্মক্ষমতা বৃদ্ধি করতে পারে।


4
এটি সম্পূর্ণ সত্য নয় - রেডিস একাধিক থ্রেডের পরিবর্তে একাধিক উদাহরণ ব্যবহার করে, সুতরাং একটি একক কোর রেডিস উদাহরণটি মাল্টি কোর মেমক্যাচ করা দৃষ্টান্তের সাথে তুলনা করা বিশেষত প্রাসঙ্গিক পরীক্ষা নয়। তদ্ব্যতীত, যখন উভয় সিস্টেমকে দ্রুততম হিসাবে দেখাতে মাপদণ্ড উপলব্ধ থাকে তখন পার্থক্যটি বাস্তব বিশ্বে খুব কমই দেখা যায়।
টম ক্লার্কসন


4
রেডিসের এই বড় ঘাটতি সত্যিই অনেকটা নিচু হয়েছে। আপনি যদি উচ্চ-সমাবর্তন সন্ধান করেন এবং অনেকগুলি কোরে থাকে তবে মেমক্যাচড রেডিসের চারপাশে চেনাশোনা চালাতে পারে। ভাগ করে নেওয়া ভাল সমাধান নয় কারণ আপনার আবেদনে ধারাবাহিক হ্যাশিং প্রয়োগ করতে হবে এবং আপনি রেডিস উদাহরণগুলির মধ্যে নিখুঁত বিতরণ পাবেন না। উদাহরণস্বরূপ, যদি শারড এ আপনার অ্যাপ্লিকেশনটির কনফিগারেশনটি প্রতিটি অনুরোধে ব্যবহৃত হয়, তবে শর্ট এ অন্যান্য অনুরোধগুলির চেয়ে বেশি অনুরোধ পাবে যা প্রতিটি অনুরোধের জন্য হিট হয় না।
কলিনম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.