มีคำสั่ง Redis สำหรับดึงข้อมูลคีย์ทั้งหมดในฐานข้อมูลหรือไม่ ฉันเห็นห้องสมุดไพ ธ อน - แดงดึงข้อมูลพวกเขาอยู่ แต่สงสัยว่าเป็นไปได้จากลูกค้า Redis
มีคำสั่ง Redis สำหรับดึงข้อมูลคีย์ทั้งหมดในฐานข้อมูลหรือไม่ ฉันเห็นห้องสมุดไพ ธ อน - แดงดึงข้อมูลพวกเขาอยู่ แต่สงสัยว่าเป็นไปได้จากลูกค้า Redis
คำตอบ:
ลองดูKEYS
คำสั่ง KEYS *
จะแสดงรายการคีย์ทั้งหมดที่เก็บไว้ใน Redis
แก้ไข:โปรดทราบคำเตือนที่ด้านบนของKEYS
หน้าเอกสาร:
ความซับซ้อนของเวลา: O (N) โดยที่ N เป็นจำนวนคีย์ในฐานข้อมูลภายใต้สมมติฐานว่าชื่อคีย์ในฐานข้อมูลและรูปแบบที่กำหนดมีความยาว จำกัด
UPDATE (V2.8 หรือสูงกว่า): SCAN
เป็นทางเลือกที่เหนือกว่าKEYS
ในแง่ที่ว่ามันไม่ได้บล็อกเซิร์ฟเวอร์หรือไม่ใช้ทรัพยากรที่สำคัญ ชอบใช้มัน
KEYS
มีศักยภาพในการบล็อกเซิร์ฟเวอร์ได้นานขึ้นเมื่อทำการสืบค้นชุดข้อมูลขนาดใหญ่
อัพเดตสำหรับ Redis 2.8 และสูงกว่า
ดังที่ระบุไว้ในความคิดเห็นของคำตอบก่อนหน้าสำหรับคำถามKEYS
นี้เป็นคำสั่งที่อาจเป็นอันตรายเนื่องจากเซิร์ฟเวอร์ Redis ของคุณจะไม่สามารถทำการดำเนินการอื่น ๆ ในขณะที่ให้บริการ ความเสี่ยงอีกอย่างKEYS
คือมันสามารถใช้งานได้ (ขึ้นอยู่กับขนาดของพื้นที่คีย์ของคุณ) RAM จำนวนมากเพื่อเตรียมบัฟเฟอร์การตอบสนองซึ่งอาจทำให้หน่วยความจำของเซิร์ฟเวอร์ของคุณหมดลง
Redis เวอร์ชัน 2.8 ได้เปิดตัวคำสั่งตระกูลSCANที่มีความสุภาพมากกว่าและสามารถใช้เพื่อจุดประสงค์เดียวกันได้
CLI ยังเป็นวิธีที่ดีในการทำงานกับมัน:
$ redis-cli --scan --pattern '*'
อาจเกิดขึ้นได้โดยใช้ redis-cli คุณเชื่อมต่อกับเซิร์ฟเวอร์ redis ระยะไกลของคุณแล้วคำสั่ง:
KEYS *
ไม่แสดงอะไรเลยหรือดีกว่าแสดงว่า:
(empty list or set)
หากคุณแน่ใจอย่างแน่นอนว่าเซิร์ฟเวอร์ Redis ที่คุณใช้เป็นเซิร์ฟเวอร์ที่คุณมีข้อมูลบางที Redis-cli ของคุณอาจไม่ได้เชื่อมต่อกับอินสแตนซ์ฐานข้อมูล Redis ที่ถูกต้อง
ในฐานะที่เป็นที่กล่าวถึงในเอกสาร Redis, การเชื่อมต่อใหม่เชื่อมต่อเป็นค่าเริ่มต้นไปยังฐานข้อมูล 0
ในกรณีของKEYS
คำสั่งไม่ได้เรียกผลเนื่องจากฐานข้อมูลของฉันคือ 1. ในการสั่งซื้อเพื่อเลือกฐานข้อมูลที่คุณต้องการใช้SELECT
db ถูกระบุโดยจำนวนเต็ม
SELECT 1
KEYS *
ฉันโพสต์ข้อมูลนี้เพราะไม่มีคำตอบก่อนหน้านี้ที่แก้ไขปัญหาของฉัน
-> รับกุญแจทั้งหมดจาก redis-cli
-redis 127.0.0.1:6379> keys *
-> รับรายการรูปแบบ
-redis 127.0.0.1:6379> keys d??
สิ่งนี้จะสร้างคีย์ที่เริ่มต้นด้วย 'd' ด้วยอักขระสามตัว
-redis 127.0.0.1:6379> keys *t*
สิ่งนี้จะได้รับกุญแจที่มีตัวอักษร 't' ตรงกันในคีย์
-> นับกุญแจจากบรรทัดคำสั่งโดย
-redis-cli keys * |wc -l
-> หรือคุณสามารถใช้ dbsize
-redis-cli dbsize
key *t*
keys *t*
ลองดูที่ต่อไปนี้แผ่น Redis โกง ในการรับชุดย่อยของคีย์ redis ด้วย redis-cli i ให้ใช้คำสั่ง
KEYS "prefix:*"
ใช่คุณสามารถรับกุญแจทั้งหมดได้โดยใช้สิ่งนี้
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);
redisClient.keys('*example*', function (err, keys) {
})
SCAN ไม่ต้องการให้ไคลเอนต์โหลดคีย์ทั้งหมดลงในหน่วยความจำอย่างที่ KEYS ทำ SCAN ให้ตัววนซ้ำที่คุณสามารถใช้ได้ ฉันมีระเบียน 1B ใน redis ของฉันและฉันไม่สามารถได้รับหน่วยความจำเพียงพอที่จะคืนกุญแจทั้งหมดในครั้งเดียว
นี่คือตัวอย่างข้อมูลของไพ ธ อนเพื่อรับคีย์ทั้งหมดจากร้านค้าที่ตรงกับรูปแบบและลบทิ้ง:
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
print key
redis-cli -h <host> -p <port> keys *
โดยที่ * เป็นรูปแบบเพื่อแสดงรายการคีย์ทั้งหมด
redis-cli -h <host> -p <port> keys '*'
รูปแบบของ KEYS
มีให้ตั้งแต่ 1.0.0
ความซับซ้อนของเวลา: O (N) โดยที่ N เป็นจำนวนคีย์ในฐานข้อมูลภายใต้สมมติฐานว่าชื่อคีย์ในฐานข้อมูลและรูปแบบที่กำหนดมีความยาว จำกัด
ส่งคืนรูปแบบการจับคู่คีย์ทั้งหมด
คำเตือน:ไม่แนะนำให้ใช้คำสั่งนี้เนื่องจากอาจทำให้ประสิทธิภาพลดลงเมื่อดำเนินการกับฐานข้อมูลขนาดใหญ่แทน KEYS คุณสามารถใช้SCANหรือSETSชุด
ตัวอย่างคำสั่งของ KEYS ที่จะใช้:
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"
หาก Redis ของคุณเป็นคลัสเตอร์คุณสามารถใช้สคริปต์นี้
#!/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"
รับกุญแจทั้งหมดใน Redis
รับกุญแจทั้งหมดโดยใช้ตัวเลือก - สแกน:
$ redis-cli --scan --pattern '*'
แสดงรายการคีย์ทั้งหมดโดยใช้คำสั่ง KEYS:
$ redis-cli KEYS '*'
ในการรับคีย์ทั้งหมดที่มีอยู่ในเซิร์ฟเวอร์ redis คุณควรเปิด redis-cli และประเภท:
KEYS *
เพื่อรับความช่วยเหลือเพิ่มเติมโปรดไปที่หน้านี้:
ลิงค์นี้
เราควรใช้ - สแกน - รูปแบบด้วย redis 2.8 และใหม่กว่า
คุณสามารถลองใช้ wrapper นี้ที่ด้านบนของ redis-cli https://github.com/VijayantSoni/redis-helper
หากคุณใช้ Laravel Framework คุณก็สามารถใช้สิ่งนี้:
$allKeyList = Redis::KEYS("*");
print_r($allKeyList);
ใน Core PHP:
$redis = new Redis();
$redis->connect('hostname', 6379);
$allKeyList = $redis->keys('*');
print_r($allKeyList);
คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ redis ของคุณโดยใช้ redis-cli เลือกฐานข้อมูลของคุณและพิมพ์ KEYS * โปรดจำไว้ว่ามันจะให้คีย์ทั้งหมดที่มีอยู่ในฐานข้อมูล redis ที่เลือก
redis-cli keys "*"