Node.js中使用redis数据库的正确姿势

使用ioredis在Node.js中操作Redis数据结构的详细指南 这段代码展示了如何在Node.js应用程序中使用Redis来存储和管理代办任务。通过ioredis库,我们可以轻松地执行Redis命令,如hsethgetallkeysdel等,来操作哈希数据结构。此外,代码中使用了异步/等待()语法来简化异步操作的处理,使代码更加清晰和易于维护。 阅读详情

Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务,同时它也支持数据的持久化,有着比较广泛的应用场景。在Java中使用redis我们已经比较熟悉了,那么在node.js和koa.js框架中使用Redis的正确姿势是怎样的呢?

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
* Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
* Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
* Redis支持数据的备份,即master-slave模式的数据备份。

Redis常用命令可以参考http://www.runoob.com/redis/redis-keys.html

Node.js已经有很多redis相关的库,我在npm.org上搜了下大概有十几个吧,其中经常使用的redis,co-redis。 由于我用koa做web框架,因此就直接用了koa-redis。这篇文章涉及koa.js,yield生成器和Promise相关的知识,需要先对这些概念有一定的认识。

下面介绍下redis和koa.js相关的操作吧,我是在Mac下操作的。

1. 安装redis,并启动客户端和服务器端

brew install redis

  • 启动服务器端 redis-server

    29322:C 06 Sep 17:39:25.109 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    29322:M 06 Sep 17:39:25.111 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._
               _.-``__ ''-._
          _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._
     (    '      ,       .-`  | `,    )     Running in standalone mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
     |    `-._   `._    /     _.-'    |     PID: 29322
      `-._    `-._  `-./  _.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |           http://redis.io
      `-._    `-._`-.__.-'_.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |
      `-._    `-._`-.__.-'_.-'    _.-'
          `-._    `-.__.-'    _.-'
              `-._        _.-'
                  `-.__.-'
    
    29322:M 06 Sep 17:39:25.116 # Server started, Redis version 3.0.6
    29322:M 06 Sep 17:39:25.116 * The server is now ready to accept connections on port 6379
  • 启动客户端 redis-cli

    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379>

2. 安装node.js和koa.js,node的安装这里就不讲了,通过brew install就可以。

npm install koa redis koa-redis

可以看到koa-redis已经依赖了co-redis, es6-promisify等库

`-- koa-redis@2.1.2
+-- co-redis@2.1.1
| `-- es6-promisify@4.1.0
| `-- es6-promise@3.2.1
`-- hiredis@0.5.0
+-- bindings@1.2.1
`-- nan@2.4.0

3. koa.js操作redis数据

这块是本文重点,由于官方的文档和例子不太详细,不熟悉node的同学折腾起来会比较累,所以本文提供了一个比较完整的例子。具体代码里面注释已经写的比较清楚了。

var session = require('koa-generic-session');
var redisStore = require('koa-redis');
var koa = require('koa');
var redis = require('redis');
// 注意: client默认是异步callback方式调用;
// store.client是经过了co-redis包装,返回Promise, 在koa里面用yield异步编程比较方便
var client = redis.createClient(6379, "172.19.65.240");

var app = koa();
app.keys = ['keys', 'keykeys'];
// var option={host: "172.19.65.240", db:1};
var options = {client: client, db: 1};

var store = redisStore(options);
app.use(session({
  store: store
}));

app.use(function *() {
  switch (this.path) {
    case '/get':
      get.call(this);
      break;

    case '/testKV':
      // 保存key value
      if (this.query.adminId) {
        yield store.client.set("test1", this.query.adminId);
      }
      //同步读取key value
      this.body = yield store.client.get("test1");
      break;

    case '/testHM':
      //操作hashmap
      var result = yield store.client.hmset("hosts", "mjr", "123", "another", "23", "home", "1234");
      console.log(result);

      var obj = yield store.client.hgetall("hosts")
      console.dir(obj);
      //获取hashmap key的值
      this.body = yield store.client.hget("hosts", "home");

      //保存hashmap,使用默认的callback方式
      // client.hset("hash key", "hashtest 1", "some value", redis.print);
      // client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
      // client.hmset("hosts", "mjr", "1", "another", "23", "home", "1234");
      // client.hmset(["key", "test keys 1", "test val 1", "test keys 2", "test val 2"], function (err, res) {
      //   console.log(res);
      // });

      break;
    case '/testSet':
      //保存set
      var key = "key1";
      store.client.sadd("key1", "v1");
      store.client.sadd("key1", "v2");
      store.client.sadd("key1", "v3");

      //读取set
      store.client.multi()
        .sismember(key, 'v1')
        .smembers(key)
        .exec(function (err, replies) {
          console.log("MULTI got " + replies.length + " replies");
          replies.forEach(function (reply, index) {
            console.log("Reply " + index + ": " + reply.toString());
          });
        });

      //读取set
      this.body = yield store.client.smembers("key1");
      break;
    case '/testList':
      //保存list
      store.client.rpush("mylist", "bbb")
      store.client.rpush("mylist", "ccc")
      store.client.lpush("mylist", "aaa")

      this.body = yield store.client.rpop("mylist");
      break;
    case '/remove':
      remove.call(this);
      break;
    case '/regenerate':
      yield regenerate.call(this);
      break;
  }
});

function get() {
  var session = this.session;
  session.count = session.count || 0;
  session.count++;
  var test = store.client.get("test");
  console.log(test);
  this.body = session.count;
}

function remove() {
  this.session = null;
  this.body = 0;
}

function *regenerate() {
  get.call(this);
  yield this.regenerateSession();
  get.call(this);
}

app.listen(8080);

关于在koa框架中使用redis就写这么多吧,其实还有发布-订阅等的用法,这里就不说了。

Node.js中使用egg-redis插件操作Redis数据库 本文还有配套的精品资源,点击获取 简介:Node.js是一个高性能的JavaScript运行环境,适合构建网络应用。Egg.js是基于Koa.js的企业级Node.js应用框架,其强大的插件系统和中间件能够提升项目效率。Redis是一款开源的高性能键值存储系统,用途广泛。本教程将介绍如何在Egg.js框架中安装和配置 egg-redis 插件,实现对Redis... 阅读详情

相关推荐

Node.js Web应用构建:Express+MySQL+Redis+log4js

MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发,现属于甲骨文公司。它是基于客户端-服务器模型和SQL(结构化查询语言)的数据管理系统。由于其开源、高性能、可靠性和易用性,MySQL被广泛应用于互联网项目和企业级应用中。连接池是创建和管理数据库连接的一种技术,能够减少创建和关闭数据库连接的时间开销。使用连接池可以显著提升Web应用的性能和可伸缩性。在本章节中,我们探讨了MySQL数据库的基础知识,包括安装、创建数据库和表、以及数据操作。接着深入讨论了查询优化的重要性和实施策略。

weixin_42611310的博客 1099

nodejs中如何使用redis

本文当中简单介绍了redis的基础操作命令,在nodejs中如何使用redis,实际生产当中的redis操作更为复杂和多样,还是需要我们自己多进行摸索和实践;本文当中的操作只是常用的基础操作,如果想知道更多的redis操作,可以去查看redis的官方文档。

bjmsb79的博客 5943

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 125

nodeJS中redis的使用

redis缓存

weixin_43422861的博客 5282

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2405

【ESP32-IDF笔记】20-配置以太网网络(W5500)

基于ESP32IDF和官方的ethernet驱动,配置W5500以太网驱动芯片,实现ESP32的有线网络

别看了,就这些信息 3475

Node.js 中的缓存机制:Redis 的使用

Redis 是一个开源的高性能键值存储 (Key-Value Store),它将数据保存在内存中,以实现超高的读写速度。Redis 不仅支持字符串存储,还支持哈希、列表、集合、有序集合等数据结构,适合用于各种场景,比如缓存、消息队列、实时数据分析等。

有我更精彩的博客 2093

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 583

nodejs中使用Redis

应该是你npm install 默认安装的Redis client for Node.js为V4.0.0版本,一些接口已经改变了,所以导致报错。redis3.2版本后新增protected-mode配置,默认是yes,即开启。:Node.js 连接redis时报错:The client is closed。2、开启protected-mode保护模式,需配置bind ip或者设置访问密码。1、关闭protected-mode模式,此时外部网络可以直接访问。解决方法: 回退版本。

T3165919332的博客 2011

Windows下高效部署llama.cpp:从环境配置到模型量化的完整指南

本文提供了一份详尽的Windows系统下部署llama.cpp的完整指南。内容涵盖从Python环境配置、使用CMake与MinGW编译工具链的搭建,到编译llama.cpp项目、获取并转换模型为GGUF格式,以及执行模型量化和基础推理测试的全过程。指南旨在帮助开发者在普通Windows电脑上,无需高端显卡,仅凭CPU即可高效运行大语言模型,并重点解决了部署过程中常见的环境与编译错误。

weixin_28841265的博客 882

VH6501实战:手把手教你用CANoe脚本精准触发CAN总线干扰(附避坑点)

本文详细介绍了使用VH6501和CANoe脚本精准触发CAN总线干扰的实战技巧,包括触发位置控制、ValidityMask配置和干扰序列设置等关键步骤。通过具体代码示例和常见问题排查指南,帮助工程师避开实际应用中的常见陷阱,提升CAN总线干扰测试的准确性和效率。

weixin_33709219的博客 371

Redis数据库在Node.js中的使用

文章摘要:本文介绍了Node.js中使用redis模块的基本操作。首先说明如何安装redis模块,然后演示连接Redis服务器的方法。主要内容包括:1)字符串类型数据的增删改查操作,包括设置过期时间;2)列表数据的左右侧插入删除操作;3)集合数据的添加和查询;4)哈希类型数据的操作;5)发布/订阅模式的使用。文中提供了详细的代码示例,展示了各种Redis数据结构的操作方法,以及如何实现消息的发布和订阅功能。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 1409

【STK】手把手教你利用STK进行仿真-STK软件简介02 STK专业分析模块

STK/Astrogator是一个交互式轨道机动和深空探测计划工具,用于飞行器运行及任务分析,通过定义推力模型、目标星历、飞行器姿态,提供轨道机动的解决及优化方案。应用Astrogator分析轨道机动的可见性和地面站覆盖,用户可以快速、方便地进行全局分析。任务控制序列保存在STK场景中,用于任务运行、快速制定精确轨道机动方案。为在轨运行的飞行器制定或执行机动计划时,分析人员可以根据飞行过程数据,如发动机定标参数、实际初始轨道,计算出推进器点火和点火时机数据,用于发出指令及精炼机动计划。

weixin_44184852的博客 1866

node 使用 Redis 缓存

如果数据发生改变了,就保存的数据删掉,重新保存最新的。的数据都存储在内存中,这样它的读写速度就非常快。而且还会将内存中的数据写入本地硬盘,可以在服务器重启后,自动将数据恢复到内存中。在数据库上我们可以做很多优化,例如优化 SQL 语句,优化索引,如果数据量大了,还可以分库、分表等等。它的功能非常强大,在我们这节课中,只会用到Redis的缓存能力。这样做好封装好后,用起来就非常简单了,而且就算是数组或对象,也可以顺利的存取了。高并发下,一个项目最先出问题的,并不是程序本身,而是数据库最先承受不住。

IT_iosers的博客 1148

第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结

本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考

行知SLAM 803

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【node.js】数据库与存储

Node.js应用程序中的数据库存储是构建持久化、可扩展应用的关键组件。Node.js可以连接各种类型的数据库系统,从关系型到NoSQL,满足不同的应用需求。

Guiat的博客 2215

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用 Redis 增强 Node.js 应用的性能

在现代的 Web 开发中,用户期望迅速获得数据和响应。为了满足这种需求,开发者们常常需要寻找有效的解决方案来提高应用的性能。对此,使用 Redis 来提升 Node.js 应用的性能是一种行之有效的方法。Redis 是一个高性能的键值存储数据库,它利用内存操作数据,能够大幅度提升数据读取和写入的速度。

有我更精彩的博客 1124

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Node.js中使用node-redis库连接redis服务端并存储数据

本文介绍了在Node.js中使用node-redis库连接Redis服务端并存储数据的方法。主要内容包括:node-redis库的简介与安装方式(npm或docker),基本连接示例代码(包含错误处理和配置选项),以及一个完整的实用示例(连接本地Redis服务端并测试读写操作)。文章还提供了相关配置指南和参考资料的链接,帮助开发者快速上手使用node-redis客户端与Redis服务端进行交互。示例展示了如何设置键值对、读取数据以及验证连接状态,适用于Node.js项目中需要集成Redis的场景。

ccf19881030的专栏 736

Node.js redis client用什么? 需要使用redis连接池么?

Nodejs中,我们应该使用什么样的reids客户端呢? 什么样的redis client好用呢? Nodejs中应该使用redis pool?

sweetyi的专栏 2364

redis基本介绍以及在node中使用

redis中文网Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。前面我们验证redis是否安装成功时用到了一行命令这个命令的作用是通过Redis的命令行工具redis-cli来连接本机(IP地址为127.0.0.1。

jieyucx的博客 3492

基于node.js使用redis

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 redis在对数据的读写上速度非常快,被许多公司所使用。且支持许多语言,在node.js上也可以使用。 使用前的准备 熟悉node.js的人都知道操作数据库需要使用npm下载模块,redis也不例外。 下载命令 npm i redis 连接数据库 redis数据库在读写数据前需要进行连接操作,设置

corn78的博客 527

Node.js连接Redis数据库以及封装

很久没有写Node.js代码了,最近更新了自己的网站(www.wb233.cn),对之前的重新写了一遍升级了2.0版本。在网站中有这样一个功能,禁止一个IP频繁去发送留言,这里就用到了Redis,使用Redis存储IP和当前写入数据库的时间。这里直接上代码,不详细介绍Redis了。Redis的连接,插入,取出进行封装成module: var redisDb = {}; var log4js = r...

麦田de守望 6067

node使用redis

国际惯例,先简单介绍下redis。 redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序

小蜜蜂的专栏 6525

Node.js数据库集成终极指南:MongoDB、MySQL、Redis最佳实践

学习Node.js时,数据库集成是每个开发者必须掌握的核心技能。NodeJS-Learning项目为你提供了全面的数据库集成资源,帮助你快速掌握MongoDB、MySQL和Redis在Node.js中的最佳实践。本文将为你揭示如何高效地将这三种主流数据库集成到Node.js应用中,提升开发效率和系统性能。 ## 📊 为什么数据库集成如此重要? 在现代Web开发中,数据库是应用的基石。Node

gitblog_01162的博客 1049

使用Node.js存储数据到Redis的教程

通过本教程,您学习了如何使用Node.js将数据存储到Redis中。您了解了如何连接到Redis服务器并创建Redis客户端,以及如何使用客户端将数据存储到Redis中和从Redis中获取数据。在实际项目中,使用Redis可以提供高性能和灵活的数据存储解决方案。然而,需要注意以下几点:安全性:在生产环境中,确保适当地保护Redis服务器。设置密码来限制对Redis的访问,并使用防火墙规则限制从外部网络的访问。错误处理:在实际应用中,需要对与Redis服务器通信的各种错误进行适当的处理。

1816
上一篇: Redis 数据结构使用场景
下一篇: 给JavaScript 初心者的ES2015 实战
offbye
offbye 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄24年 1309粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

offbye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值