【Express.js】集成Redis

news/2024/7/19 10:24:10 标签: javascript, express, redis, 后端, 教程

集成Redis

本节我们介绍在 express.js 中集成 redis.

Redis是一个高性能的key-value内存数据库,支持事务、队列、持久化等特性,常用于高并发性能场景。

准备工作

npm i redis

创建代理

正常的项目都是分层的,为了避免循环依赖,本文采用代理类构造单例的方式来创建redis连接。

redisProxy.js:
在构造器内创建redis连接,并监听个别事件,最后把连接赋给client成员变量。再定义一个静态的获取实例方法,调用时实例若为空,就构建实例:

const Redis = require('redis');
const logger = require('./logger');

class RedisProxy {
  /**
  * @type {RedisProxy}
  */
  _instance = null;
  constructor() {
    const client = Redis.createClient({
      url: `redis://127.0.0.1:6379`,
    });
  
    client.on('connect', () => {
      logger.info('Redis connected!');
    });
    
    client.on('error', err => {
      logger.error('Redis Client Error!', err);
      process.exit(1);
    });

    client.connect();
    this.client = client
  }

  static instance() {
    if(!this._instance) {
      this._instance = new RedisProxy();
    }
    return this._instance;
  }
}

然后把redis导出来:

async function init() {
  return RedisProxy.instance();
}

module.exports = {
  init,
  instance: RedisProxy.instance(),
};

然后在任意其它地方调用 redisProxy.instance 即可获取单例,在从单例中获取client即可操作redis.

const RedisProxy = require('../utils/redisProxy');
const redisProxy = RedisProxy.instance;
const redis = redisProxy.client;

redis.set("name", "evpantchouli");  //设置键
console.log(await redis.get("name"); //取键

你可以自己手动配置一遍,也可以使用evp-express-cli作为手脚架创建项目并选择redis模板。

关于redis.js的详细用法请见官方文档: http://npmjs.com/package/redis

下一节-集成RabbitMQ


http://www.niftyadmin.cn/n/4926786.html

相关文章

elasticsearch简单入门语法

基本操作 创建不同的分词器 ik_smart: 极简分词 ; ik_max_word: 最细力再度分词 基本的rest命令 methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)POSTlocalhost:9200/索引名称/类型名称创建文…

Java整合Selenium录制视频

捕捉视频 有时候我们未必能够分析故障只需用日志文件或截图的帮助。有时捕获完整的执行视频帮助。让我们了解如何捕捉视频。 我们将利用Monte媒体库的执行相同。 配置 第1步:导航到URL下载屏幕记录JAR,如下图所示。 http://www.randelshofer.ch/monte…

【kubernetes】Pod进阶

目录 资源限制 官网示例: Pod 和 容器 的资源请求和限制: CPU 资源单位 内存 资源单位 示例1: 示例2: 重启策略(restartPolicy) 1、Always 2、OnFailure 3、Never 示例 容器进入error状态不会…

python的gui界面程序爬虫,python的gui界面怎么打开

大家好,小编来为大家解答以下问题,python的gui界面怎么打开,python的gui界面程序爬虫,今天让我们一起来看看吧! Python支持多种图形界面的第三方库,包括: wxWidgets Qt GTK Tkinter&#xf…

基础实验篇 | QGC实时调整控制器参数实验

PART 1 实验名称及目的 QGC实时调整控制器参数实验:在进行硬件在环仿真和真机实验时,常常需要在QGC地面站中观察飞行状态,并对控制器参数进行实时调整,以使得飞机达到最佳的控制效果,但是,在Simulink中设…

【数据结构与算法】多路查找树

多路查找树 二叉树的问题分析 二叉树的操作效率较高,但也存在问题。 二叉树需要加载到内存的,如果二叉树节点少,没什么问题,但是如果二叉树的节点很多(比如 1 亿),就存在如下问题&#xff1a…

[Vue] Vue2和Vue3的生命周期函数

vue2有11个生命周期钩子, vue3有8个生命周期钩子 从vue创建、运行、到销毁总是伴随着各种事件, 创建、挂载、更新到销毁。 1.vue2系列生命周期 ⑴【beforecreate】实例创建前。 vue完全创建之前,会自动执行这个函数。 ⑵【Created】实例创建后。 这也是个生命…

uniapp点击输入框时键盘不上推页面

adjust-position设置为false,然后监听键盘的高度赋值给输入框bottom 这里还一个非常重要的地方,在根元素设置touchmove.stop.prevent,这样在ios上页面就不会滚动,不影响其他组件内部滚动 onReady() {// 监听键盘高度变化&#x…