Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Nodejs, không đợi truy vấn Redis hoàn tất trước khi tiếp tục thực thi

Bạn nói rằng file2 / 3 là "nội dung giống nhau" nhưng chúng không nằm trong một khu vực quan trọng. Theo tài liệu của Bluebird cho promisifyAll (xem http://bluebirdjs.com/docs/api/promise.promisifyall.html), tính năng này tạo ra một ...Async phiên bản của từng chức năng cốt lõi trong ứng dụng khách Redis. Bạn gọi hmgetAsync trong trường hợp đầu tiên của bạn, nhưng bạn chỉ gọi hmget trong những người khác của bạn.

Điều này quan trọng vì bạn đang sử dụng mẫu không đồng bộ nhưng có cấu trúc mã không đồng bộ. Trong file2 / 3, bạn đặt result1 bên trong một lệnh gọi lại không đồng bộ, nhưng sau đó trả lại nó bên dưới mỗi cuộc gọi trước khi cuộc gọi có thể quay trở lại.

Bạn có hai lựa chọn:

1:Bạn có thể chuyển đổi file2 / 3 / etc thành một mẫu hoàn toàn truyền thống bằng cách truyền lệnh gọi lại bên cạnh ứng dụng khách redis:

module.exports = function(redisclient, callback){

Thay vì trả về result1 , sau đó bạn sẽ gọi lệnh gọi lại với giá trị này:

if(redisValue == 'test value'){
    callback(null, "success");
} else {
    callback("failed", null);
}

2:Bạn có thể chuyển đổi file2 / 3 / .. N thành dựa trên Promise, trong trường hợp đó, bạn không cần phải promisifyAll(require(...)) chúng - bạn có thể chỉ cần require() họ. Mẫu như vậy có thể trông giống như:

module.exports = function(redisclient){
    return redisclient.hmgetAsync("testdata", "text1");
};

Đây là một tùy chọn đơn giản và gọn gàng hơn nhiều, và nếu bạn tiếp tục với nó, bạn có thể thấy rằng bạn thậm chí có thể loại bỏ yêu cầu () và chỉ cần thực hiện hmgetAsync trong file1 với dữ liệu thích hợp do Cassandra trả về. Nhưng thật khó để biết nếu không nhìn thấy nhu cầu ứng dụng cụ thể của bạn. Trong mọi trường hợp, các mẫu dựa trên Promise thường ngắn hơn và rõ ràng hơn nhiều, nhưng không phải lúc nào cũng tốt hơn - có chi phí hiệu suất vừa phải để sử dụng chúng. Đó là cuộc gọi của bạn theo cách bạn đi - một trong hai cách sẽ hoạt động.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis Pub / Sub với độ tin cậy

  2. Cách sử dụng jackson thay vì JdkSerializationRedisSerializer trong mùa xuân

  3. Đang cố gắng bắt đầu redis và xếp lại lịch trình trong một nhiệm vụ cào

  4. Redis lọc theo phạm vi, sắp xếp và trả về 10 đầu tiên

  5. Khóa và Redis