以下代码将整个数组保存为redis列表中的单个值.但我想单独保存数组值.我该怎么做?
PS很抱歉英语不好.
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
Run Code Online (Sandbox Code Playgroud) 今天,我将Redis集成到我的node.js应用程序中,并将其用作会话存储。基本上,在身份验证成功后,我会将相应的用户对象存储在Redis中。
身份验证后收到HTTP请求时,我尝试使用哈希从Redis检索用户对象。如果检索成功,则意味着用户已登录并且可以满足请求。
将用户对象存储在Redis中和进行检索的操作发生在两个不同的文件中,因此每个文件中都有一个Redis客户端。
问题1:可以有两个Redis客户端,每个文件一个吗?还是应该仅实例化一个客户端,并在应用程序的所有区域中使用它?
问题2:node-redis库是否提供一种显示已连接客户端列表的方法?如果是这样,我将能够遍历该列表,并在服务器关闭时为它们中的每一个调用client.quit()。
顺便说一下,这就是我实现服务器“正常关机”的方式:
//Gracefully shutdown and perform clean-up when kill signal is received
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
function cleanup() {
server.stop(function() {
//todo: quit all connected redis clients
console.log('Server stopped.');
//exit the process
process.exit();
});
};
Run Code Online (Sandbox Code Playgroud) const express = require("express");
const redis = require("redis");
const app = express();
const client = redis.createClient({
url: "redis://admin123@ec2-35-182-15-126.ca-central-1.compute.amazonaws.com",
});
client.on("connect", function () {
console.log("redis connected");
console.log(`connected ${redisClient.connected}`);
});
client.on("error", (err) => {
console.log(err);
});
app.listen(process.env.PORT || 3000, () => {
console.log("Node server started");
});
Run Code Online (Sandbox Code Playgroud)
即使我已经通过使用 Redsmin 连接检查了 EC2 redis 实例,上面的代码也没有显示与 redis 服务器的任何连接。 Redsmin 中的托管详细信息
这是一件非常简单的事情,但我得到的错误无法通过谷歌搜索。
节点服务器已启动 C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:387 return Promise.reject(newErrors_1.ClientClosedError()); ^
ClientClosedError:客户端在 Commander._RedisClient_sendCommand (C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:387:31) 处关闭。 .commandsExecutor (C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\client\index.js:160:154) 位于 Commander.BaseClass。[设置] (C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\node_modules@node-redis\client\dist\lib\commander.js:8:29) 在对象处。(C:\Users\Sithira_105661\Desktop\Projects\Learning\Redis\redis.js:19:8) 在 Module._compile (node:internal/modules/cjs/loader:1101:14) 在 Object.Module._extensions。 .js(节点:内部/模块/cjs/loader:1153:10)在Module.load(节点:内部/模块/cjs/loader:981:32)在Function.Module._load(节点:内部/模块/cjs) /loader:822:12) 在 Function.executeUserEntryPoint [作为 …
如何获取List Redis中最新元素的索引?例如,在List存储的消息 ID 中,我需要获取last ID消息并返回index此元素。
我有像["aaa","bbb","ccc"]这样的键数组,所以我想使用一个命令从redis中删除所有这些键.我不想使用循环迭代.我读了关于redis命令DEL和在终端redis-client上它可以工作但是使用nodejs它不起作用
Redisclient.del(tokenKeys,function(err,count){
Logger.info("count is ",count)
Logger.error("err is ",err)
})
Run Code Online (Sandbox Code Playgroud)
其中tokenKeys = ["aaa","bbb","ccc"],如果我发送一个像tokenKeys ="aaa"这样的密钥,这个代码就可以工作了
我正在开发一个从 API 提供程序接收数据的网络应用程序。现在我需要一种方法来缓存数据,以防止再次为相同的数据调用提供程序。
然后我偶然发现了 Redis,它似乎符合我的目的,但我不是 100% 清楚使用 Redis 缓存的概念。我检查了他们的文档,但我并没有真正遵循他们所说的。
假设我刚刚部署了我的网站,我的第一个访问者叫做 A。由于 A 是第一个访问的人,我的网站将通过 API 提供者请求一组新数据,几秒钟后,页面将加载了 A 想要的数据。
我的网站将此数据缓存到 Redis 以服务将来访问同一页面的访问者。
现在我有我的第二个访客 B。
B 访问与 A 相同的页面 url,并且因为我的网站将此数据存储在缓存中,所以 B 是从缓存中提供的,并且加载时间将比 A 经历的加载时间快得多。
我的理解是否符合网络缓存的概念?
我一直认为根据用户进行缓存,因此我在网站上的交互对其他人没有影响或没有任何影响,但 Redis 似乎在每个应用程序的基础上工作。
无法从NodeJS连接到Redis,出现以下错误。
Redis connection to redis.abc.abc failed - write EPIPE
使用v0.10.35
NodeJS 版本的node_redis模块0.12.1和Redis DB版本3.0.4
当前,NodeJS服务器每分钟处理大约5万个请求,每个请求在Redis(GET / SET)中至少进行2次操作。
它可以正常工作一段时间(大约30分钟),然后开始抛出该错误。有没有解决的办法?
我想在Centos 7上运行Redis的多个实例.任何人都可以指向我正确的链接或在此处发布步骤.
我用谷歌搜索信息,但我没有找到任何相关信息.
我正在尝试使用redis和jest运行集成测试.
它始终抛出"Jest检测到以下1个打开的句柄可能使Jest退出:"与--detectOpenHandles一起运行时出错.
它没有挂起,因此套接字正在关闭,但是如何编写它以便它不会抛出该警告?
我的代码
import redis from 'redis';
let red: redis.RedisClient;
beforeAll(() => {
red = redis.createClient();
});
afterAll((done) => {
red.quit(() => {
done();
});
});
test('redis', (done) => {
red.set('a', 'b', (err, data) => {
console.log(err);
red.get('a', (err, data) => {
console.log(data);
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
警告
Jest has detected the following 1 open handle potentially keeping Jest from exiting:
? TCPWRAP
3 |
4 | beforeAll(() => {
> 5 | red = redis.createClient();
| ^
6 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Typescript 创建多节点 Express/Socket.io 服务器,并且尝试从 redis 导入 RedisClient,但我无法让它工作,因为我收到错误
模块“redis”没有导出成员“RedisClient”
它似乎正在尝试检索它的形式
节点模块/redis/dist/索引
但实际上它在这里:
节点模块/@类型/redis"
我怎样才能让它从正确的地方导入?
node-redis ×10
redis ×9
node.js ×6
javascript ×2
caching ×1
express ×1
jestjs ×1
redis-server ×1
socket.io ×1
windows ×1