রেডিসে কীগুলির মুদ্রণ সংখ্যা


164

রেডিসে কীগুলির সংখ্যা মুদ্রণের কোনও উপায় আছে?

আমি সতর্ক

keys *

তবে কিছুটা ভারী ওজন মনে হচ্ছে। - রেডিস একটি মূল মানের দোকান এটি দেওয়া সম্ভবত এটিই করার একমাত্র উপায়। তবে আমি এখনও লাইনের সাথে কিছু দেখতে চাই

count keys *

4
COUNT এর জন্য একটি টানার অনুরোধ রয়েছে, যদিও তা অস্বীকার করা হয়েছে। github.com/antirez/redis/pull/32 এছাড়াও কী মন্তব্য করেছে antirez
অ্যালেক্স

আমি ভাবলাম যে তারা ও (এন) হিসাবে এটি সমর্থন করে না - ধারণা করুন এটি এটির নিশ্চিত করে।
অ্যান্ডি বুট

উত্তর:


199

আপনি INFO কমান্ড জারি করতে পারেন, যা সার্ভার সম্পর্কে তথ্য এবং পরিসংখ্যান ফেরত দেয়। একটি উদাহরণ আউটপুট জন্য এখানে দেখুন ।

এমভিসিএইচআর দ্বারা মন্তব্যে উল্লিখিত হিসাবে, আপনি info keyspaceসরাসরি রেডিস-ক্লাইমে ব্যবহার করতে পারেন ।


1
redis-cli INFO Keyspace | grep ^db
হ্যাকাহলিক

164

DBSIZE কীগুলির সংখ্যা দেয় এবং পার্স করা আরও সহজ।

ডাউনসাইড: যদি কোনও কীটির মেয়াদ শেষ হয়ে যায় তবে এটি এখনও গণনা করতে পারে।

http://redis.io/commands/dbsize


3
উদাহরণস্বরূপ, KEYS *মেয়াদোত্তীর্ণ কীটি সরিয়ে দেয়। এছাড়াও রেডিস সক্রিয়ভাবে কিছু মেয়াদোত্তীর্ণ কীগুলি উচ্ছেদ করতে পারে , তবে অগত্যা সেগুলি সবই নয়।
seppo0010

45

সতর্কতা: এটি কোনও প্রোডাকশন মেশিনে চালাবেন না।

একটি লিনাক্স বাক্সে:

redis-cli KEYS "*" | wc -l

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


3
অত্যন্ত কার্যকর, এবং আপনাকে কীগুলিতে ফিল্টার করতে দেয়।
নিক ফারিনা

25
এটি একটি ও (এন) অপারেশন, ও (1) এ এটি করার কোনও উপায় আছে কি?
Zoozy

21
উত্পাদন পরিবেশে বড় ডাটাবেস ব্যবহার করবেন না। KEYS কমান্ড
মন্টাস

4
কেউ এটি পড়তে চলেছেন, এটি কোনও দিন চিন্তা না করে কোনও প্রোডাকশন বক্সে করুন এবং তারপরে এটিকে ধাক্কা দিন ... সম্ভবত ইতিমধ্যে ঘটেছে।
স্টু থম্পসন

2
এটি কেবলমাত্র উত্পাদনহীন সার্ভারগুলিতে ব্যবহার করার জন্য একটি দাবি অস্বীকার করা উচিত। অন্যথায় আপনার redis.io/commands/SCAN
হোয়াইটফিন

40

কীগুলির মোট সংখ্যা গণনা করার জন্য, নীচের কমান্ডটি ব্যবহার করুন:

127.0.0.1:6379> DBSIZE


14

যেহেতু রেডিস ২.6, লুয়া সমর্থিত তাই আপনি এ জাতীয় সংখ্যক ওয়াইল্ডকার্ড কী পেতে পারেন

eval "return #redis.call('keys', 'prefix-*')" 0

দেখতে Eval কমান্ড


8
ব্যবহার KEYS(সহ বা ছাড়া একটি উপসর্গ) কী গণনা bathwater সঙ্গে শিশুর নিক্ষেপ ভালো হয়।
ইতামার হাবর


4

dbsize() কীগুলির মোট সংখ্যা প্রদান করে।

এলোমেলোভাবে কী কী নমুনা দিয়ে প্রদত্ত প্যাটার্নের সাথে মেলে কীগুলির সংখ্যা আপনি দ্রুত নির্ণয় করতে পারেন, তারপরে কোনটি ভগ্নাংশের সাথে মেলে তা পরীক্ষা করে।

অজগর উদাহরণ; দিয়ে শুরু সমস্ত কী গণনা prefix_:

import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter

এমনকি iter=100আমার ক্ষেত্রে একটি শালীন অনুমান দেয়, তবে তুলনায় খুব দ্রুত keys prefix_

প্রতিটি অনুরোধের জন্য 1000 কীগুলির নমুনা করা একটি উন্নতি, তবে মোট সংখ্যাটি রেখে দিন, যাতে দুটি অনুরোধের পরে আপনি 2000 দ্বারা ভাগ করবেন, তিনটি অনুরোধের পরে আপনি 3000 দ্বারা বিভক্ত করবেন divide সুতরাং, যদি আপনার অ্যাপ্লিকেশন মোট সংখ্যাটিতে আগ্রহী মোটামুটি প্রায়শই কীগুলির সাথে মিলবে, তারপরে প্রতিবার এটি সত্য মানের কাছাকাছি এবং কাছাকাছি চলে আসবে।


1

Redis 2.6 এর পরে, INFO কমান্ডের ফলাফলটি বিভাগ দ্বারা বিভক্ত হয়। "কীস্পেস" বিভাগে, "কীগুলি" এবং "মেয়াদোত্তীর্ণ কীগুলি" ক্ষেত্র রয়েছে যে কতগুলি কী আছে তা জানাতে।


4
এটি সঠিক নয়। এটি বিভাগটির একটি নমুনা আউটপুট: # কীস্পেস ডিবি0: কীস = 366, মেয়াদ শেষ হবে = 366 এখানে, 'কীগুলি' মোট কী কী নির্দেশ করে না এবং 'মেয়াদ উত্তীর্ণ' সমাপ্তির সেট সহ কীগুলির কোনও ইঙ্গিত করে। মূলত এর অর্থ হ'ল তাদের একটি টিটিএল সেট রয়েছে এবং তারা মেয়াদ শেষ হয়ে গেছে, তাদের মেয়াদ শেষ হয়ে গেছে।
s1d

-1
eval "local count = redis.call('scan', 0, 'match', 'key:*:key', 'count', 10000) if count ~= 0 then return #count[2] end " 0

eval "local count = redis.call('sscan', 'key.key:all', 0, 'match', '*', 'count', 1000000) if count ~= 0 then return #count[2] end " 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.