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

làm thế nào để lấy tất cả các khóa và giá trị trong redis trong javascript?

Trước hết, vấn đề trong câu hỏi của bạn là bên trong for loop, client.get được gọi bằng không đồng bộ gọi lại trong đó đồng bộ for vòng lặp sẽ không đợi lệnh gọi lại không đồng bộ và do đó dòng tiếp theo res.json({data:jobs}); được gọi ngay sau for vòng lặp trước các lệnh gọi lại không đồng bộ. Tại thời điểm của dòng res.json({data:jobs}); đang được gọi, mảng jobs vẫn trống [] và nhận được phản hồi.

Để giảm thiểu điều này, bạn nên sử dụng bất kỳ mô-đun hứa hẹn nào như async , bluebird , ES6 Promise vv

Đã sửa đổi mã sử dụng mô-đun không đồng bộ,

app.get('/jobs', function (req, res) {
    var jobs = [];
    client.keys('*', function (err, keys) {
        if (err) return console.log(err);
        if(keys){
            async.map(keys, function(key, cb) {
               client.get(key, function (error, value) {
                    if (error) return cb(error);
                    var job = {};
                    job['jobId']=key;
                    job['data']=value;
                    cb(null, job);
                }); 
            }, function (error, results) {
               if (error) return console.log(error);
               console.log(results);
               res.json({data:results});
            });
        }
    });
});

Nhưng từ Redis tài liệu hướng dẫn, có thể thấy rằng việc sử dụng Keys nhằm gỡ lỗi và các hoạt động đặc biệt, chẳng hạn như thay đổi bố cục không gian phím của bạn và không khuyến khích sử dụng các môi trường sản xuất.

Do đó, tôi khuyên bạn nên sử dụng một mô-đun khác có tên là redisscan như bên dưới sử dụng SCAN thay vì KEYS như được đề xuất trong Redis tài liệu.

Một cái gì đó như,

var redisScan = require('redisscan');
var redis     = require('redis').createClient();


redisScan({
        redis: redis,
        each_callback: function (type, key, subkey, value, cb) {
            console.log(type, key, subkey, value);
            cb();
        },
        done_callback: function (err) {
            console.log("-=-=-=-=-=--=-=-=-");
            redis.quit();
        }
    });


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Đặt đường dẫn động trong redis.conf bằng cách sử dụng biến Môi trường

  2. docker -omp:kết nối bị từ chối giữa các vùng chứa, nhưng dịch vụ có thể truy cập được từ máy chủ

  3. Điều kiện làm việc của Sidekiq

  4. xử lý các tình huống tối đa của redis với đường ray khi sử dụng bộ nhớ đệm đường ray

  5. Kết nối với cụm Redis không thành công