Instance redis saya tampaknya tumbuh sangat besar dan saya ingin mencari tahu dari beberapa database yang saya miliki di sana yang menghabiskan berapa banyak memori. INFO
Perintah Redis hanya menunjukkan ukuran total dan jumlah kunci per database yang tidak memberi saya banyak wawasan ... Jadi alat / ide apa pun yang memberi saya lebih banyak informasi saat memantau server redis akan dihargai.
Dokumentasi Redis tidak menunjukkan kepada saya perintah apa pun yang dapat mengembalikan memori yang dikonsumsi dari kunci tertentu, jadi saya kira jika ada kode buggy yang akan menulis banyak "sampah" untuk redis, ini akan sangat sulit ditemukan ...
Solusi dari komentar pantas mendapatkan jawabannya sendiri:
sumber
a
dengan nilai 4GB tetapi ini tidak akan muncul di tombol besar. (ini dilakukan oleh gist.github.com/michael-grunder/9257326 dan docs.redislabs.com/latest/ri/memory-optimizations/… )MEMORY USAGE key
perintah memberi Anda jumlah byte yang dibutuhkan kunci dan nilainya untuk disimpan dalam RAM.Penggunaan yang dilaporkan adalah total alokasi memori untuk data dan biaya administrasi yang diperlukan oleh nilai kunci (dokumentasi redis sumber)
sumber
Lihatlah proyek ini, ia mengeluarkan beberapa statistik menarik tentang ruang kunci berdasarkan regex dan prefiks. Ini menggunakan
DEBUG OBJECT
perintah dan memindai db, mengidentifikasi kelompok kunci dan memperkirakan persentase ruang yang mereka gunakan .https://github.com/snmaynard/redis-audit
Outputnya terlihat seperti ini:
Atau yang ini: https://github.com/sripathikrishnan/redis-rdb-tools yang melakukan analisis penuh pada seluruh ruang kunci dengan menganalisis file dump.rdb secara offline. Yang ini juga bekerja dengan baik. Ini dapat memberi Anda ukuran avg / min / max untuk entri di db Anda, dan bahkan akan melakukannya berdasarkan awalan.
sumber
Anda mungkin merasa sangat berguna untuk mengambil sampel kunci Redis dan mengelompokkannya berdasarkan jenis. Salvatore telah menulis alat yang disebut redis-sampler yang mengeluarkan sekitar 10.000
RANDOMKEY
perintah diikuti olehTYPE
tombol yang diambil. Dalam hitungan detik, atau menit, Anda akan mendapatkan gambaran yang cukup akurat tentang distribusi jenis kunci.Saya telah menulis ekstensi (sayangnya tidak di mana pun open-source karena itu terkait dengan pekerjaan), yang menambahkan sedikit introspeksi nama kunci melalui regex yang memberi Anda gambaran tentang jenis kunci aplikasi apa (sesuai dengan struktur penamaan apa pun yang Anda menggunakan), disimpan di Redis. Dikombinasikan dengan keluaran redis-sampler yang lebih umum, ini akan memberi Anda gambaran yang sangat bagus tentang apa yang terjadi.
sumber
redis-cli --bigkeys
Mungkin Anda bisa melakukan introspeksi pada file db. Protokolnya relatif sederhana (namun tidak terdokumentasi dengan baik), jadi Anda dapat menulis parser untuk menentukan kunci individual mana yang menghabiskan banyak ruang.
Saran baru:
Sudahkah Anda mencoba menggunakan
MONITOR
untuk melihat apa yang sedang ditulis, secara langsung? Mungkin Anda dapat menemukan masalah dengan data yang sedang bergerak.sumber
INFO
danMONITOR
, tetapi mungkin masalah utamanya adalah, bahwa ketika tidak menonton redis tumbuh sangat besar ...Anda dapat menggunakan aplikasi .net https://github.com/abhiyx/RedisSizeCalculator untuk menghitung ukuran kunci redis,
Jangan ragu untuk memberikan tanggapan Anda untuk hal yang sama
sumber
Saya biasanya lebih suka metode pengambilan sampel kunci untuk memecahkan masalah skenario seperti itu.
Misalnya:-
sumber
Bagaimana kalau redis-cli dapatkan KEYNAME | wc -c
sumber