Perintah redis untuk mendapatkan semua kunci yang tersedia?

503

Apakah ada perintah Redis untuk mengambil semua kunci dalam database? Saya telah melihat beberapa perpustakaan python-redis mengambilnya. Tapi bertanya-tanya apakah itu mungkin dari redis-client.

Lalith
sumber

Jawaban:

722

Cobalah untuk melihat KEYSperintah. KEYS *akan mencantumkan semua kunci yang disimpan dalam redis.

EDIT: harap perhatikan peringatan di bagian atas KEYShalaman dokumentasi:

Kompleksitas waktu: O (N) dengan N menjadi jumlah kunci dalam basis data, dengan asumsi bahwa nama-nama kunci dalam basis data dan pola yang diberikan memiliki panjang yang terbatas.

UPDATE (V2.8 atau lebih tinggi): SCAN adalah alternatif yang unggul KEYS, dalam arti tidak memblokir server juga tidak mengkonsumsi sumber daya yang signifikan. Lebih suka menggunakannya.

yojimbo87
sumber
96
Contoh penggunaan CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -
4
Koreksi: Semua perintah redis adalah utas tunggal dan akan memblokir server. Satu-satunya perbedaan adalah bahwa KEYSmemiliki potensi memblokir server lebih lama ketika meminta set data besar
Leo
156

Diperbarui untuk Redis 2.8 dan lebih tinggi

Seperti tercantum dalam komentar jawaban sebelumnya untuk pertanyaan ini, KEYSadalah perintah yang berpotensi berbahaya karena server Redis Anda tidak akan dapat melakukan operasi lain saat melayani. Risiko lain KEYSadalah bahwa ia dapat mengkonsumsi (tergantung pada ukuran ruang kunci Anda) banyak RAM untuk mempersiapkan buffer respon, sehingga mungkin melelahkan memori server Anda.

Versi 2.8 dari Redis telah memperkenalkan keluarga perintah SCAN yang jauh lebih sopan dan dapat digunakan untuk tujuan yang sama.

CLI juga menyediakan cara yang bagus untuk bekerja dengannya:

$ redis-cli --scan --pattern '*'
Itamar Haber
sumber
59

Itu bisa terjadi bahwa menggunakan redis-cli, Anda terhubung ke server redis jauh Anda, dan kemudian perintah:

KEYS *

tidak menunjukkan apa pun, atau lebih baik, ini menunjukkan:
(empty list or set)

Jika Anda benar-benar yakin bahwa server Redis yang Anda gunakan adalah yang Anda miliki datanya, maka mungkin redis-cli Anda tidak terhubung ke instance database Redis yang benar.

Seperti yang disebutkan dalam dokumen Redis, koneksi baru terhubung sebagai default ke db 0 .

Dalam kasus saya, KEYSperintah tidak mengambil hasil karena basis data saya adalah 1. Untuk memilih db yang Anda inginkan, gunakan SELECT .
Db diidentifikasi oleh integer.

SELECT 1
KEYS *

Saya memposting info ini karena tidak ada jawaban sebelumnya yang menyelesaikan masalah saya.

Evhz
sumber
31

-> Dapatkan semua kunci dari redis-cli

-redis 127.0.0.1:6379> keys *

-> Dapatkan daftar pola

-redis 127.0.0.1:6379> keys d??

Ini akan menghasilkan kunci yang dimulai dengan 'd' dengan tiga karakter.

-redis 127.0.0.1:6379> keys *t*

Ini akan mendapatkan kunci dengan karakter cocok 't' di kunci

-> Hitung kunci dari baris perintah dengan

-redis-cli keys * |wc -l

-> Atau bisa Anda gunakan dbsize

-redis-cli dbsize
denny
sumber
Cukup salin jawaban dan coba. Itu memberi "perintah 'kunci' yang tidak dikenal". "kunci" bukan perintah, "kunci" adalah. Harap perbaiki key *t*untuk keys *t*.
Kunal Dethe
Terima kasih Bung atas informasinya. Itu kesalahan saya. Saat ini saya di ponsel. Saya akan mengubah perintah itu lebih awal.
denny
Cheatsheet yang sangat berguna ini
Hassan Baig
19

Lihatlah Redis Cheat Sheet berikut . Untuk mendapatkan subset dari kunci redis dengan redis-cli saya menggunakan perintah

KEYS "prefix:*"
wami
sumber
6

Ya, Anda bisa mendapatkan semua kunci dengan menggunakan ini

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
Albin Mathew
sumber
4
Tidak persis apa yang diminta OP (redis-cli), tetapi terima kasih telah menunjukkan ini.
Herick
4

SCAN tidak mengharuskan klien memuat semua kunci ke dalam memori seperti halnya KEYS. SCAN memberi Anda iterator yang dapat Anda gunakan. Saya memiliki catatan 1B di redis saya dan saya tidak pernah bisa mendapatkan cukup memori untuk mengembalikan semua kunci sekaligus.

Berikut ini potongan python untuk mendapatkan semua kunci dari toko yang cocok dengan suatu pola dan menghapusnya:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key
Patrick Collins
sumber
3
redis-cli -h <host> -p <port> keys * 

di mana * adalah pola untuk mencantumkan semua kunci

gobi
sumber
2
Saya harus mengutip bintang, sebagai berikut:redis-cli -h <host> -p <port> keys '*'
aggregate1166877
3

Pola KUNCI

Tersedia sejak 1.0.0.

Kompleksitas waktu: O (N) dengan N menjadi jumlah kunci dalam basis data, dengan asumsi bahwa nama-nama kunci dalam basis data dan pola yang diberikan memiliki panjang yang terbatas.

Mengembalikan semua pola pencocokan kunci.

Peringatan: Perintah ini tidak disarankan untuk digunakan karena dapat merusak kinerja ketika dieksekusi terhadap database besar, bukan KEYS Anda dapat menggunakan SCAN atau SETS .

Contoh perintah KEYS untuk digunakan:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
anandchaugule
sumber
1

Jika redis Anda adalah sebuah cluster, Anda dapat menggunakan skrip ini

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"
byte mamba
sumber
1

Dapatkan Semua Kunci Di Redis

Dapatkan semua kunci menggunakan opsi --scan:

$ redis-cli --scan --pattern '*'

Daftar semua kunci menggunakan perintah KEYS:

$ redis-cli KEYS '*'
Netwons
sumber
0

Untuk mendapatkan semua kunci yang tersedia di server redis, Anda harus membuka redis-cli dan ketik: KEYS * Untuk mendapatkan bantuan lebih lanjut silakan kunjungi halaman ini: Tautan Ini

Babaei behzad
sumber
0

Jika Anda menggunakan Laravel Framework maka Anda cukup menggunakan ini:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

Dalam Core PHP:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);
Vinay Singh
sumber
0

Anda cukup terhubung ke server redis Anda menggunakan redis-cli, pilih database Anda dan ketik KEYS *, harap diingat itu akan memberi Anda semua kunci yang ada dalam database redis yang dipilih.

pengguna1157635
sumber