Kullanılabilir tüm anahtarları almak için komutu yeniden?


502

Veritabanındaki tüm anahtarları almak için bir Redis komutu var mı? Onları getiren bazı python-redis kütüphaneleri gördüm. Ancak redis-client'dan mümkün olup olmadığını merak ediyordum.

Yanıtlar:


721

KEYSKomuta bakmaya çalışın . KEYS *redis içinde saklanan tüm anahtarları listeler.

EDIT: Lütfen KEYSdokümantasyon sayfasının üst kısmındaki uyarıya dikkat edin :

Zaman karmaşıklığı: O (N) ile N, veritabanındaki anahtar adlarının ve verilen paternin sınırlı uzunluğuna sahip olduğu varsayılarak veritabanındaki anahtar sayısıdır.

GÜNCELLEME (V2.8 veya üstü): sunucuyu engellememesi veya önemli miktarda kaynak tüketmesi bakımından SCANüstün bir alternatiftir KEYS. Kullanmayı tercih edin.


96
CLI kullanım örneği:redis-cli keys "*"
XåpplI'-I0llwlg'I -

4
Düzeltme: Tüm redis komutları tek iş parçacıklıdır ve sunucuyu engeller. Tek fark, KEYSbüyük bir veri kümesini
Leo

155

Redis 2.8 ve üstü için güncellendi

Bu soruya verilen önceki yanıtların yorumlarında belirtildiği gibi, KEYSRedis sunucunuz hizmet ederken başka işlemler yapmak için kullanılamayacağı için potansiyel olarak tehlikeli bir komuttur. Başka bir risk KEYS, yanıt arabelleğini hazırlamak için çok fazla RAM tüketebilmesi (anahtar boşluğunuzun boyutuna bağlı olarak), böylece muhtemelen sunucunuzun belleğini tüketebilmesidir.

Redis'in 2.8 sürümü, SCAN çok daha kibar ve aynı amaçla kullanılabilen komutlar ailesini tanıtmıştı .

CLI ayrıca bununla çalışmak için güzel bir yol sağlar:

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

59

Redis-cli kullanarak, uzak redis sunucunuza bağlanırsınız ve ardından komut:

KEYS *

hiçbir şey göstermiyor veya daha iyisi şunu gösteriyor:
(empty list or set)

Kullandığınız Redis sunucusunun verilere sahip olduğunuzdan kesinlikle eminseniz, redis-cli'niz Redis doğru veritabanı örneğine bağlanmıyor olabilir.

Redis belgelerinde belirtildiği gibi, yeni bağlantılar varsayılan olarak db 0'a bağlanır .

Benim durumumda KEYS, veritabanım 1 olduğundan komut alınamadı . İstediğiniz db'yi seçmek için SELECT kullanın .
Db bir tamsayı ile tanımlanır.

SELECT 1
KEYS *

Bu bilgiyi gönderiyorum çünkü önceki yanıtların hiçbiri sorunumu çözmedi.


31

-> Tüm anahtarları redis-cli'den alın

-redis 127.0.0.1:6379> keys *

-> Desen listesini al

-redis 127.0.0.1:6379> keys d??

Bu, 'd' ile üç karakterle başlayan anahtarlar üretecektir.

-redis 127.0.0.1:6379> keys *t*

Bu anahtarda 't' karakteriyle eşleşen anahtarlar alacak

-> Komut satırından tuşları say

-redis-cli keys * |wc -l

-> Veya kullanabilirsiniz dbsize

-redis-cli dbsize

Sadece cevapları kopyalayıp denedim. "Bilinmeyen komut" anahtarı "verdi. "key" komutu değil, "keys" dir. Lütfen düzeltin key *t*için keys *t*.
Kunal Dethe

Bu bilgi için teşekkürler dostum. Benim hatamdı. Akım ben cep telefonundayım. Bu komutu eairlier değiştirecek.
denny

Çok yararlı hileler bu
Hassan Baig


6

Evet, bunu kullanarak tüm anahtarları alabilirsiniz

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})

4
OP'nin tam olarak sorduğu şey değil (redis-cli), ama yine de bunu işaret ettiğiniz için teşekkürler.
Herick

4

SCAN, istemcinin tüm anahtarları KEYS gibi belleğe yüklemesini gerektirmez. SCAN, kullanabileceğiniz bir yineleyici sağlar. Redislerimde 1B kayıtları vardı ve tüm anahtarları aynı anda döndürmek için yeterli belleği alamadım.

Mağazadaki tüm anahtarları bir desenle eşleşen ve silmek için bir python snippet'i:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key

3
redis-cli -h <host> -p <port> keys * 

burada * tüm anahtarları listeleyen modeldir


2
Yıldızı şöyle alıntılamak zorunda kaldım:redis-cli -h <host> -p <port> keys '*'
aggregate1166877

3

ANAHTARLAR desen

1.0.0'dan beri kullanılabilir.

Zaman karmaşıklığı: O (N) ile N, veritabanındaki anahtar adlarının ve verilen paternin sınırlı uzunluğuna sahip olduğu varsayılarak veritabanındaki anahtar sayısıdır.

Kalıpla eşleşen tüm tuşları döndürür.

Uyarı: KEYS yerine büyük veritabanlarına karşı yürütüldüğünde performansı bozabileceğinden, bu komutun kullanılması önerilmez, TARAMA veya SETS kullanabilirsiniz .

Kullanılacak KEYS komutu örneği:

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"

1

Redis'iniz bir kümeyse, bu komut dosyasını kullanabilirsiniz

#!/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"

1

Tüm Anahtarları Redis'te Alın

--Scan seçeneğini kullanarak tüm anahtarları alın:

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

KEYS komutunu kullanarak tüm tuşları listeleyin:

$ redis-cli KEYS '*'

0

Redis sunucusunda mevcut olan tüm anahtarları elde etmek için redis-cli'yi açmalı ve yazmalısınız: KEYS * Daha fazla yardım almak için lütfen bu sayfayı ziyaret et: Bu Bağlantı



0

Laravel Framework kullanıyorsanız, bunu kullanabilirsiniz:

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

print_r($allKeyList);

Çekirdek PHP'de:

$redis = new Redis();

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

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

print_r($allKeyList);

0

Redis-cli kullanarak redis sunucunuza bağlanabilir, veritabanınızı seçebilir ve KEYS * yazabilirsiniz, lütfen seçilen redis veritabanında bulunan tüm anahtarları vereceğini unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.