Đối sánh quét của Redis chỉ hỗ trợ đối sánh kiểu toàn cầu. Nó không thể thực hiện đối sánh regex. Để đạt được mục tiêu của mình, bạn có hai lựa chọn:
- Quét tất cả các khóa và khớp ở phía máy khách.
- Sử dụng tập lệnh Lua để quét và đối sánh. Bạn có thể thử một lớp lót sau làm ví dụ:
redis-cli eval 'local res = redis.call("scan", ARGV[1]); local matches = {}; for i,v in ipairs(res[2]) do if v == string.match(v, ARGV[2]) then matches[#matches+1] = v end end res[2] = matches; return res' 0 cursor-starting-from-0 'Person:[^:]*'
Một lớp lót này trả về kết quả chính xác như lệnh quét được tích hợp sẵn. Tôi không phải là chuyên gia về Lua và mã này chưa được kiểm tra đầy đủ.
Ngoài ra, đối sánh của Lua KHÔNG phải là đối sánh regex, mặc dù nó có thể giải quyết hầu hết các vấn đề. Bạn cần lấy tham chiếu của Lua để kiểm tra xem nó có phù hợp với trường hợp của bạn không.