Nodejs操作缓存数据库-Redis

news2024/11/25 7:11:05

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:foobared@awesome.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 arguments
ready客户端已准备好使用No arguments
end连接已关闭(通过.quit().disconnect()No arguments
error出现错误——通常是网络问题,如 “Socket closed unexpectedly”(error: Error)
reconnecting客户端正在尝试重新连接到服务器No arguments
sharded-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://:password@localhost:6379



END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创意无限:7大AI绘画软件揭示人工智能的绘画魅力!

本篇文章将为大家推荐7款2023年好用的AI绘画软件&#xff0c;为艺术家和设计师提供了创作灵感和效率的提升。 1、即时设计 即时设计是一款依托于浏览器运行的在线设计工具&#xff0c;可使用它进行UI设计、原型制作&#xff0c;以及团队项目管理等&#xff0c;功能十分强大&a…

el-table本地与线上的样式不一致出现错乱

使用el-table的时候有几个表头是循环出来的&#xff0c;出现在本地运行的时候&#xff0c;表头内el-input输入框样式正常&#xff0c;但是发布以后出现样式错乱问题 线上样式错乱&#xff1a;​ 本地正常&#xff1a; 出现这个问题的原因是我有几个表头是循环出来的&#xff0…

问题 D: 过山车(二分图)

首先&#xff0c;绘制二分图 核心思想&#xff1a; 对于每一个左边端点&#xff0c;查找每个右边端点&#xff0c; 若右边端点无对象&#xff0c;则暂时作为该左端点的对象 若右边端点有对象&#xff0c;递归查询其对象是否有其他选择 &#xff08;1.若有其他选择&#xf…

全网最全synchronized锁升级过程

一、前言 在面试题中经常会有这么一道面试题&#xff0c;谈一下synchronized锁升级过程&#xff1f; 之前背了一些&#xff0c;很多文章也说了&#xff0c;到底怎么什么条件才会触发升级&#xff0c;一直不太明白。 实践是检验真理的唯一标准&#xff0c;今天就和大家一起实…

uniapp+vite+vue3开发跨平台app,运行到安卓模拟器调试方法

因为没有使用hbuilder开发uniapp&#xff0c;而是使用了vscode和vite来开发的&#xff0c;所以怎么将这个程序运行到安卓模拟器调试开发呢&#xff1f;其实方法很简单&#xff0c;使用android studio创建一个模拟器或者其他mumu模拟器&#xff0c;然后将项目使用hbuilder打开&a…

空间数据结构笔记:层次包围盒树(Bounding Volume Hierarchy Based On Tree)

1 总览 层次包围盒树&#xff08;BVH树&#xff09;是一棵多叉树&#xff0c;用来存储包围盒形状。它的根节点代表一个最大的包围盒&#xff0c;其多个子节点则代表多个子包围盒。为了统一化层次包围盒树的形状&#xff0c;它只能存储同一种包围盒形状 2 AABB包围盒树&#x…

Web安全:Vulfocus 靶场搭建.(漏洞集成平台)

Web安全&#xff1a;Vulfocus 靶场搭建.&#xff08;漏洞集成平台&#xff09; Vulfocus 是一个包含了多种漏洞靶场的镜像。每个靶场都有具体的漏洞环境和攻击点。Vulfocus 的靶场包括了 Web 安全漏洞、系统安全漏洞、网络安全漏洞、密码学漏洞等多种类型。通关这个靶场我们可以…

日出日落的气象意义:探索日出日落查询API在天气预测中的应用

引言 当谈论气象意义时&#xff0c;日出和日落都是天文现象中的重要组成部分。它们不仅是自然界美妙的展示&#xff0c;更对天气预测有着深远的影响。而如今&#xff0c;随着科技的发展&#xff0c;日出日落查询API在天气预测中的应用正在变得越来越重要。 日出和日落的气象意…

Q learning

Q learning Q Learning是强化学习算法中的一个经典算法。在一个决策过程中&#xff0c;我们不知道完整的计算模型&#xff0c;所以需要我们去不停的尝试。 算法流程 整体流程如下&#xff1a; Q-table 初始化 第一步是创建 Q-table&#xff0c;作为跟踪每个状态下的每个动作…

linux 系统下文本编辑常用的命令

一、是什么 Vim是从 vi 发展出来的一个文本编辑器&#xff0c;代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 简单的来说&#xff0c; vi 是老式的字处理器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方 而…

苹果手机通话记录怎么恢复?这3个方法就足够!

通话记录是手机中的重要数据之一&#xff0c;它记录了用户与联系人的通话信息&#xff0c;包括通话时间、通话时长、通话号码等等。 有时候&#xff0c;我们可能不小心删除了通话记录&#xff0c;或者想找回之前的通话记录以此来回忆起一些事情。那么&#xff0c;苹果手机通话…

全自动内衣洗衣机什么牌子好?家用迷你洗衣机推荐

内衣洗衣机是一种专为内衣、丝绸和其他精细衣物设计的家电&#xff0c;它们能够温柔地清洁和保护这些特殊材质的衣物。代替了传统的手洗&#xff0c;能够大大节约我们不少的宝贵时间。但在市场上&#xff0c;有各种型号和功能的内衣洗衣机&#xff0c;如何挑选到一款适合自己的…

内衣洗衣机怎么选?小型洗衣机质量排名

现在大部分的家庭都拥有高质量、大品牌、大容量的洗烘套装来满足一家人的日常洗烘需要&#xff0c;像内衣这种贴身的衣物&#xff0c;需要手洗或者用专用的内衣洗衣机&#xff0c;这样才可以最大程度地减少细菌的交叉感染&#xff0c;提高我们贴身衣物的卫生&#xff0c;那么怎…

深入浅出理解Android开发框架中的MVC、MVP和MVVM模式

✍️作者简介&#xff1a;沫小北/码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a;沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&…

【React】Antd 组件基本使用

Antd 组件基本使用 第一步 安装并引入 antd 包 使用命令下载这个组件库 yarn add antd在我们需要使用的文件下引入&#xff0c;我这里是在 App.jsx 内引入 import { Button } from antd现在我们可以在 App 中使用 Button 组件 <div>App..<Button type"prima…

成都瀚网科技有限公司抖音带货的靠谱之选

随着电子商务的飞速发展&#xff0c;越来越多的商家开始利用网络平台进行产品销售。这其中&#xff0c;抖音作为一款广受欢迎的短视频平台&#xff0c;其带货能力不容小觑。然而&#xff0c;在选择抖音带货服务商时&#xff0c;很多商家会面临困惑&#xff1a;成都瀚网科技有限…

易基因:MeRIP-seq+ChIP-seq等揭示m6A甲基化在休眠期转录休眠调控中的潜在功能 | 发育研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 发育通常被认为是遗传程序的顺序展开&#xff0c;复杂程度不断提高&#xff0c;并按固定轨迹随时间进行。然而&#xff0c;调整发育时间可以提高在不利条件下的存活率。在哺乳动物中&…

Istio学习笔记-部署模型

参考&#xff1a;Istioldie 1.18 / 部署模型 当您将 Istio 用于生产环境部署时&#xff0c;需要确定一系列的问题。 网格将被限制在单个集群中还是分布在多个集群中&#xff1f; 是将所有服务都放置在单个完全连接的网络中&#xff0c;还是需要网关来跨多个网络连接服务&#…

开源会议通知H5页面邀请函制作源码系统+自动翻页 带完整的搭建教程

现如今&#xff0c;线上活动越来越频繁&#xff0c;而会议邀请函也成为了活动组织者不可或缺的工具。然而&#xff0c;传统的邮件、短信等方式发送邀请函已经无法满足现代人的需求。因此&#xff0c;开发一款现代化的、功能丰富的会议邀请函系统势在必行。下面源码小编将来给大…

检索搜索信息能力

&#xff08;一&#xff09;搜索工具的选择 谷歌 > 微信搜一搜 > 抖音等短视频 > 百度 &#xff08;二&#xff09;搜索方式 一&#xff0c;搜索内容的分类 信息类学习类工具类 二&#xff0c;谷歌浏览器的搜索技巧 1、“搜索内容” 限定完整出现的词 如下图搜…