项目页面: https: //github.com/NodeRedis/node_redis
可以通过以下方式设置密钥的过期时间:
client.set('key', 'value!', 'EX', 10);
Run Code Online (Sandbox Code Playgroud)
有没有办法获取(读取)现有密钥的过期时间?
我是 azure 中的 Redis 缓存新手。我试图在向客户端变量写入数据之前检查其连接。我怎样才能在 Nodejs 中实现这一点?
我尝试获取 client.connected 状态,但是当我进行负面测试时 - 例如关闭 redis 服务器, client.connected 变量没有收到任何内容,因此我的代码不会进一步从我的原始数据中获取数据服务器,通过缓存服务器。
我怎样才能在nodejs中做到这一点?
我正在尝试使用 Typescript 和 NodeRedis 连接到 Redis 服务器,但我不断收到此错误。
ReferenceError: queueMicrotask is not defined
at RedisClient._RedisClient_tick (/home/administrador/Documentos/node-api-skeleton/node_modules/redis/dist/lib/client.js:378:9)
at RedisSocket.socket_1.default.on.on.on.on (/home/administrador/Documentos/node-api-skeleton/node_modules/redis/dist/lib/client.js:301:86)
at RedisSocket.emit (events.js:198:13)
at RedisSocket.EventEmitter.emit (domain.js:448:20)
at RedisSocket._RedisSocket_connect (/home/administrador/Documentos/node-api-skeleton/node_modules/redis/dist/lib/socket.js:130:10)
at process._tickCallback (internal/process/next_tick.js:68:7)
Run Code Online (Sandbox Code Playgroud)
这是代码
const redisClient = createClient();
redisClient.on('error', (err: Error) => {
console.log('Error', err.name);
});
redisClient.on('connect', () =>
console.log('Ok'));
try {
await redisClient.connect();
await redisClient.set(token, email, {
EX: 40,
NX: true,
});
await redisClient.disconnect();
} catch (err) {
console.log('Error', err);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
如果尚未使用 Expire 命令的 NX 选项设置过期时间,我尝试在密钥上设置过期时间。
但我不断从 redis-cli 收到错误,当我尝试使用代码时,NX 选项会被忽略。
当我尝试使用 redis-cli 中的 Expire 命令时,出现以下错误
127.0.0.1:6379> expire ns1 500 NX
(error) ERR wrong number of arguments for 'expire' command
Redis 版本 - v=6.2.6
另外,如果我尝试以编程方式执行此操作,则会忽略过期命令。下面的代码 -
let res = await client.INCRBY('ns1', 5)
console.log('incr val ' + res)
res = await client.EXPIRE('ns1', 60, { 'NX': true }) // this should set expiry
res = await client.EXPIRE('ns1', 180, { 'NX': true }) //this should ignore setting expiry
res = await client.TTL('ns1')console.log('ttl expiry ' + …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用node_redis从node.js使用redis的ZINTERSTORE命令:
//node.js server code
var redis = require("redis");
var client = redis.createClient();
// ... omitted code ...
exports.searchImages = function(tags, page, callback){
//tags = ["red", "round"]
client.ZINTERSTORE("tmp", tags.length, tags.join(' '), function(err, replies){
//do something
});
}
Run Code Online (Sandbox Code Playgroud)
但是调用client.ZINTERSTORE会抛出错误:[错误:错误语法错误].将标记作为数组传递(而不是使用tags.join(''))会引发相同的错误.
我在哪里可以找到此命令的正确语法?node_redis的源代码将它隐藏在javascript解析器中,但是如果没有"单步执行"代码,看看会发生什么是很棘手的.是否有一种很好的方法可以通过node.js进行调试?
我试图使用connect-domain来处理错误.在大多数情况下它没问题,但它使用redis回调失败.如何解决这个问题?
这是我的应用程序
var http = require('http');
var express = require('express');
var connectDomain = require('connect-domain');
var redis = require("redis").createClient();
var app = express();
app.use(connectDomain());
app.get('/', function (req, res) {
throw new Error("Handler OK");
});
app.get('/error', function (req, res) {
redis.get("akey", function(err, reply) {
throw new Error("Handler error");
res.end("ok");
});
});
app.use(function (err, req, res, next) {
res.end(err.message);
});
http.createServer(app).listen(8989, function() {
console.log("Express server started ");
});
Run Code Online (Sandbox Code Playgroud)
我使用nodejs 0.8.16,所有模块都是最新的
我在Redis中有以下一组键值对
"690-product-Qwaf@#45" :"mens-clothing/shirts"
"690-product-Ywsg##67" :"womens-clothing/shirts"
"690-product-Wsrf@%59" : "boys-clothing/sweaters"
"690-brand-P2af@#45" : "Puma"
"690-brand-Z3af#" : "Free People"
"690-brand-Q4af%#49" : "True Religion"
Run Code Online (Sandbox Code Playgroud)
我只需要从上述集合中获取以“ 690-brand-”开头的密钥。如何在Redis中达到相同的效果?
我正在尝试redis在我的nodejs应用程序中使用。我能够完美地保存和检索价值。我正在使用哈希,这使我可以拥有单个唯一键以及子键。优惠ID是我的子密钥,优惠是密钥。
我正在保存如下的报价
let offer = {
offerId: req.query.id,
offerName: req.query.offerName,
offerVendor: req.query.offerVendor
}
client.hset('offer', offer.offerId, JSON.stringify(offer), redis.print);
Run Code Online (Sandbox Code Playgroud)
并检索如下的值
try {
console.log('ping response:', await client.ping());
const offerId = req.query.id;
client.hget('offer', offerId, function(err, reply){
let offer = JSON.parse(reply);
res.send(offer);
});
} catch(err) {
console.log('ping error:', err);
}
Run Code Online (Sandbox Code Playgroud)
我想删除基于ID的商品,例如保存或获取基于ID的商品。我已经浏览过文档https://github.com/NodeRedis/node_redis#usage-example,但是没有找到。
如何根据ID删除报价?
Redis 有主从配置。如果主节点宕机,从节点成为新的主节点。如何使用脚本重新启动以前的 Redis 主节点(作为新主节点的从节点,或者如果它再次成为主节点就好了)。我不想手动完成。
我曾经做过client.setex(key, 900, value)存储单个键值。
但是,我想存储一个有过期时间的对象。
我想出了function hmset,但是我不知道如何设置到期时间。
我想用它来存储对话中当前聊天的上下文和文本。
请帮忙