2017-02-13 9 views
0

Я делаю небольшой проект с использованием redis и узла js - redis client 'node_redis'. Проблема заключается в том, что для получения значения ключа существует другая функция get, например, для типа string и integer существует client.get, для типа массива есть client.lrange() и т. Д. Итак, как определить, какую функцию использовать для получить значение, если искомый тип значения неизвестен, существует ли способ идентифицировать тип значения.Как узнать тип значения заданного ключа в redis в узле js

ответ

2

Используйте команду TYPE.

обещаниями:

const Promise = require('bluebird') 
const redis = Promise.promisifyAll(require('redis')) 
const client = redis.createClient() 
client.on("error", err => console.log("Error " + err)) 

client.typeAsync('foo').then(res => { 
    console.log('type: "%s"', res) 
}) 
.finally(()=> { 
    client.quit() 
}) 

С обратных вызовов:

const redis = require('redis') 
const client = redis.createClient() 
client.on("error", err => console.log("Error: %s", err)) 

client.type('foo', (err, res) =>{ 
    if (err) return console.log('Error: %s', err) 
    console.log('type: "%s"', res) 
    client.quit() 
}) 
+0

есть способ сделать это с синхронизацией? например: var type = client.type ('foo'); –

+0

@MikeBrianOlivera Не знаю, что я знаю, существует несколько общих способов превратить асинхронный апикс в синхронизацию, но вы, как правило, не должны использовать методы синхронизации, поскольку они будут блокировать процесс при доступе к redis. – Matt

+0

Можете ли вы помочь мне с этим, пожалуйста, это для режима tesing. Я пробовал ваш код и возвращаю None :( –

0

Обычно ваше приложение должно заранее знать тип значения, к которому он обращается, используя заданное имя ключа. Тем не менее, есть Redis TYPE, который вы можете использовать для проверки типа данного ключа.