eli*_*n25 8 javascript redis node.js
我是 JS 世界的新手,我正在创建一个查询缓存,我决定使用它redis来缓存信息,但我想知道是否有办法在redis.
const redis = require('redis');
const redisUrl = 'redis://127.0.0.1:6379';
const client = redis.createClient(redisUrl);
client.set('colors',JSON.stringify({red: 'rojo'}))
client.get('colors', (err, value) => {
this.values = JSON.parse(value)
})
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在 get 函数中使用 await 关键字而不是回调函数。
Lui*_*uis 10
您可以使用 util node 包来保证客户端 redis 的 get 功能。
const util = require('util');
client.get = util.promisify(client.get);
const redis = require('redis');
const redisUrl = 'redis://127.0.0.1:6379';
const client = redis.createClient(redisUrl);
client.set('colors',JSON.stringify({red: 'rojo'}))
const value = await client.get('colors')
Run Code Online (Sandbox Code Playgroud)
使用 util 包,我修改了 get 函数以返回一个承诺。
这是来自redis包 npm 官方文档
Promises - 您还可以通过使用 bluebird 对 node_redis 进行 promisifying 来使用 node_redis 和 promises,如下所示:
var redis = require('redis');
bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);
Run Code Online (Sandbox Code Playgroud)
它将向所有 node_redis 函数添加一个 Async(例如返回 client.getAsync().then())
// We expect a value 'foo': 'bar' to be present
// So instead of writing client.get('foo', cb); you have to write:
return client.getAsync('foo').then(function(res) {
console.log(res); // => 'bar'
});
// Using multi with promises looks like:
return client.multi().get('foo').execAsync().then(function(res) {
console.log(res); // => 'bar'
});
Run Code Online (Sandbox Code Playgroud)
这个例子使用 bluebird promisify在这里阅读更多
因此,在您get向“getAsync”承诺 a 之后,您可以在 async await 中使用它,因此在您的情况下
const value = await client.getAsync('colors');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6868 次 |
| 最近记录: |