2012-01-10 23 views

Trả lời

33

Đây không phải là tính năng ngay bây giờ để có thể thực hiện trong một lần chụp (xem các nhận xét trong số DEL documentation). Thật không may, bạn chỉ còn lại bằng cách sử dụng KEYS, lặp qua các kết quả và sau đó sử dụng DEL để xóa từng kết quả.

Làm thế nào để sử dụng bash một chút để trợ giúp?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'` 
do echo DEL $key 
done | redis-cli 

Để bước qua nó:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' - nhận được tất cả các phím và loại bỏ các văn bản thêm bạn không muốn với awk.
  2. echo DEL $key - cho mỗi người, tạo một câu lệnh echo để xóa nó.
  3. | redis-cli - lấy các câu lệnh DEL và chuyển chúng trở lại cli.

Không đề xuất đây là phương pháp tốt nhất (bạn có thể gặp một số vấn đề nếu một số tên người dùng của bạn có dấu cách trong đó, nhưng hy vọng bạn nhận được điểm).

2

Câu trả lời tiếp theo của camoctopus, bạn không cần echo và đường ống, bạn có thể chuyển lệnh dưới dạng đối số thành redis-cli. Điều này có nghĩa bạn có thể làm

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'` 
do redis-cli "DEL" "$key" 
done 
43

Một compact one-liner tôi sử dụng để làm những gì bạn muốn là:

redis-cli KEYS "user*" | xargs redis-cli DEL 
+1

Điều này thật tuyệt, cảm ơn. Thật đáng buồn là Redis không có chức năng này một cách tự nhiên. – snapfractalpop

+3

Nếu bạn có cơ sở dữ liệu đa dạng (không gian chính) thì đây là mẹo: Cho phép nói rằng bạn cần xóa các khóa trong db3: tiền tố «redis-cli -n 3 KEYS»: * "| xargs redis-cli -n 3 DEL' – Christoffer

+0

có một lớp lót nếu bạn cần cung cấp AUTH (tức là đăng nhập) trước khi thực hiện lệnh xóa không? – thames

0

Tôi biết điều này là cũ, nhưng đối với những bạn đến đây hình của Google:

Tôi vừa xuất bản tiện ích giao diện dòng lệnh tới npm và github cho phép bạn xóa các khóa khớp với mẫu nhất định (thậm chí hoặc khi bạn yêu cầu người dùng) từ cơ sở dữ liệu Redis.

Bạn có thể tìm thấy những tiện ích ở đây:

https://www.npmjs.com/package/redis-utils-cli

1

Sử dụng awk, tất cả các phím phù hợp với từ redis sử dụng redis-cli KEYS lệnh và ống để redis-cli DEL lệnh.

redis-cli KEYS "user*" | awk '{ system("redis-cli DEL " $1) }' 
0

Khi sử dụng chế độ oneliner, bạn có thể chỉnh sửa mẫu trong trường hợp nó thoát các ký tự cụ thể. Ví dụ, để xóa các mẫu như '\ test b \ b' sử dụng:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del 
0

Sử dụng này để loại bỏ những khóa redis có gạch chéo ngược, dấu ngoặc kép, dấu ngoặc kép hoặc không gian:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL

Các vấn đề liên quan