泉州网站建设科技公司,seo优化轻松seo优化排名,手游折扣平台app哪个好,申请注册公司流程Hi I’m Shendi Nodejs专栏 Nodejs操作缓存数据库-Redis 在服务端开发中#xff0c;缓存数据库也是不可或缺的#xff0c;可以提高程序并发以及方便后续扩展#xff0c;而目前最常用的莫过于Redis了 安装依赖
和之前的mysql一样#xff0c;redis的依赖最常用的就是redis
…Hi I’m Shendi Nodejs专栏 Nodejs操作缓存数据库-Redis 在服务端开发中缓存数据库也是不可或缺的可以提高程序并发以及方便后续扩展而目前最常用的莫过于Redis了 安装依赖
和之前的mysql一样redis的依赖最常用的就是redis
npm install redis依赖对应的github地址https://github.com/redis/node-redis
这是Redis官方给的NodeJS连接指南 https://redis.io/docs/clients/nodejs/
关于 Redis 的安装使用等操作可以看这篇文章https://sdpro.top/blog/html/article/1023.html 连接示例
下面是官方的示例代码
import { createClient } from redis;const client createClient();client.on(error, err console.log(Redis Client Error, err));await client.connect();await client.set(key, value);
const value await client.get(key);
await client.disconnect();上面的代码连接到 localhost:6379要连接到其他地址使用以下格式
redis[s]://[[username][:password]][host][:port][/db-number]例如
createClient({url: redis://alice:foobaredawesome.redis.server:6380/0
});其中 username 账号password 密码host主机地址port端口db-number使用的数据库下标默认0
有关更多信息参考文档 client configuration guide 要检查客户端是否已连接并准备好发送命令请使用client. isReady它返回一个布尔值。client. isOpen也可用。当客户端的底层套接字打开时此函数返回true当它不打开时例如当客户端在网络错误后仍在连接或重新连接时此函数返回false。 库的操作基本上都是异步的上面使用到 await那么就需要将当前函数设置为 async 异步例如
async function test() {await client.connect();
}因为是异步就需要我们自行控制错误的处理 这里提一嘴这里的异步全是返回的Promise所以可以使用Promise的方式 比起解构赋值我更喜欢以下方式
var redis require(redis);
const client redis.createClient();client.on(error, err console.log(Redis Client Error, err));await client.connect();await client.set(key, value);
const value await client.get(key);
await client.disconnect();无需关心连接及连接池
Node_redis自动管理连接因此无需等待连接或回调。由于Node.js和Redis实际上都是单线程的除了少数例外不需要使用多个客户端实例或任何池机制最常见的例外是如果您使用Pub/Sub订阅或者使用流或列表进行阻塞那么您需要有专门的客户端来接收这些长时间运行的命令。
例如连接一个错误的Redis地址将会一直进行重连 使用
该库对所有开箱即用的Redis命令都提供了内置支持。这些命令使用原始的Redis命令名HSET、HGETALL等和一个更友好的驼峰式版本hSet、hGetAll等进行暴露
// 原始redis命令
await client.HSET(key, field, value);
await client.HGETALL(key);// 友好的js命令
await client.hSet(key, field, value);
await client.hGetAll(key);要指定命令的修饰符可以使用一个JavaScript对象
await client.set(key, value, {EX: 10,NX: true
});上面的EX是过期时间单位秒NX为true时当键不存在才会进行设置更多的参数查阅Redis的使用可以参考https://sdpro.top/blog/html/article/1023.html 获取的内容将被转换为有用的结构
await client.hGetAll(key); // { field1: value1, field2: value2 }
await client.hVals(key); // [value1, value2]该库也支持 Buffer
await client.hSet(key, field, Buffer.from(value)); // OK
await client.hGetAll(commandOptions({ returnBuffers: true }),key
); // { field: Buffer 76 61 6c 75 65 }如果您想运行Node Redis还不支持的命令还请使用.sendCommand()
await client.sendCommand([SET, key, value, NX]); // OK
await client.sendCommand([HGETALL, key]); // [key1, field1, key2, field2]事务Multi/Exec
通过调用.multi()开始一个事务然后将您的命令串联起来。完成后调用.exec()您将获得一个包含您的结果的数组
await client.set(another-key, another-value);const [setKeyReply, otherKeyValue] await client.multi().set(key, value).get(another-key).exec(); // [OK, another-value]您也可以通过调用.watch()来监视键。如果任何监视的键发生更改事务将中止。 要深入了解事务请查看Isolated Execution Guide. 事件
Node Redis客户端类是一个Nodejs EventEmitter每次网络状态发生变化时它都会发出一个事件
名称何时发生监听参数connect启动与服务器的连接No argumentsready客户端已准备好使用No argumentsend连接已关闭通过.quit或.disconnectNo argumentserror出现错误——通常是网络问题如 “Socket closed unexpectedly”(error: Error)reconnecting客户端正在尝试重新连接到服务器No argumentssharded-channel-movedSee hereSee here 支持的版本
版本是否支持7.0.z✔️6.2.z✔️6.0.z✔️5.0.z✔️ 5.0❌ Node Redis应该可以与旧版本的Redis一起使用但它还没有经过完全测试我们无法提供支持。 我使用的 windows 版本的 redis目前版本为 3.0.504暂时没有什么问题 错误解决
连接报错 ErrorReply: ERR wrong number of arguments for ‘auth’ command
这个错误是通过调用 createClient({url : “”}) 出现的因为redis没有设置账号只设置了密码而上面给出的url用户密码都有我于是去搜索了redis的默认账号搜到为 default… 但没有设置账户账号处应该留空
链接设置如下解决
redis://:passwordlocalhost:6379END