Tôi đang chơi xung quanh với Node.js và redis và cài đặt thư viện hiredis qua lệnh nàyNode.js, (Hi) Redis và lệnh đa
npm install hiredis redis
tôi nhìn vào ví dụ đa ở đây:
https://github.com/mranney/node_redis/blob/master/examples/multi2.js
Tại dòng 17 nó nói
// you can re-run the same transaction if you like
mà ngụ ý rằng int Đối tượng ernal multi.queue không bao giờ bị xóa khi các lệnh đã hoàn thành thực thi.
Câu hỏi của tôi là: Bạn xử lý tình huống trong môi trường http như thế nào? Ví dụ, theo dõi người sử dụng kết nối cuối cùng (điều này không thực sự cần điều khiển nhiều vì nó chỉ thực thi một lệnh nhưng rất dễ dàng để làm theo)
var http = require('http');
redis = require('redis');
client = redis.createClient()
multi = client.multi();
http.createServer(function (request, response) {
multi.set('lastconnected', request.ip); // won't work, just an example
multi.exec(function(err, replies) {
console.log(replies);
});
});
Trong trường hợp này, multi.exec sẽ thực hiện 1 giao dịch cho người đầu tiên kết nối người dùng và 100 giao dịch cho người dùng thứ 100 (vì đối tượng multi.queue nội bộ sẽ không bao giờ bị xóa).
Tùy chọn 1: Tôi có nên tạo đối tượng đa bên trong hàm gọi lại http.createServer, điều này có hiệu quả sẽ giết nó khi kết thúc quá trình thực thi của hàm không? Làm thế nào đắt tiền về chu kỳ CPU sẽ tạo ra và phá hủy của đối tượng này được?
Phương án 2: Các tùy chọn khác sẽ là để tạo ra một phiên bản mới của multi.exec(), một cái gì đó giống như multi.execAndClear() mà sẽ xóa hàng đợi redis thời điểm thực hiện rằng loạt các lệnh.
Bạn sẽ chọn tùy chọn nào? Tôi cho rằng tùy chọn 1 là tốt hơn - chúng tôi đang giết chết một đối tượng thay vì chọn các phần của anh đào - tôi chỉ muốn chắc chắn rằng tôi là thương hiệu mới cho cả nút và javascript.
bạn có thể giải thích điều này bằng ví dụ không? –
Ditto về giải thích. Tài liệu nói rằng nó thoát hàng đợi. Cho rằng bạn có thể chạy lại các exec và có nó lặp lại các lệnh là rất khó hiểu. – maletor