Tôi sẽ trái ngược với câu trả lời được chấp nhận, bởi vì câu trả lời được chấp nhận là sai.
Mặc dù bạn không thể xác định rõ ràng các hàm được đặt tên, nhưng bạn có thể gọi bất kỳ tập lệnh nào mà bạn có thể gọi bằng EVALSHA
. Cụ thể hơn, tất cả các tập lệnh Lua mà bạn đã xác định rõ ràng qua SCRIPT LOAD
hoặc ngầm định qua EVAL
có sẵn trong không gian tên Lua chung tại f_<sha1 hash>
(cho đến khi / trừ khi bạn gọi SCRIPT FLUSH
), mà bạn có thể gọi bất kỳ lúc nào.
Vấn đề mà bạn gặp phải là các hàm được định nghĩa là không có đối số và KEYS
và ARGV
bảng thực sự là hình cầu. Vì vậy, nếu bạn muốn có thể giao tiếp giữa các tập lệnh Lua, bạn cần phải quản lý KEYS
của mình và ARGV
bảng hoặc bạn cần sử dụng không gian phím Redis tiêu chuẩn để giao tiếp giữa các chức năng của mình.
127.0.0.1:6379> script load "return {KEYS[1], ARGV[1]}" "d006f1a90249474274c76f5be725b8f5804a346b" 127.0.0.1:6379> eval "return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world" 1) "hello" 2) "world" 127.0.0.1:6379> eval "KEYS[1] = 'blah!'; return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world" 1) "blah!" 2) "world" 127.0.0.1:6379>
Tất cả những điều này cho thấy, điều này hoàn toàn vi phạm thông số kỹ thuật và hoàn toàn có thể ngừng hoạt động theo những cách kỳ lạ nếu bạn cố gắng chạy điều này trong một kịch bản cụm Redis.