nodejs使用redis作为缓存介质实现的封装缓存类示例


Posted in NodeJs onFebruary 07, 2018

本文实例讲述了nodejs使用redis作为缓存介质实现的封装缓存类。分享给大家供大家参考,具体如下:

之前在node下使用redis作为缓存介质,对redis进行了一层封装

First: 安装npm包 redis

const redis = require('redis');

Second: 进行封装

// cache.js
const redis = require('redis');
const config = require('config');
const logger = require('winston');
const redisObj = {
  client: null,
  connect: function () {
    this.client = redis.createClient(config.redis);
    this.client.on('error', function (err) {
      logger.error('redisCache Error ' + err);
    });
    this.client.on('ready', function () {
      logger.info('redisCache connection succeed');
    });
  },
  init: function () {
    this.connect(); // 创建连接
    const instance = this.client;
    // 主要重写了一下三个方法。可以根据需要定义。
    const get = instance.get;
    const set = instance.set;
    const setex = instance.setex;
    instance.set = function (key, value, callback) {
      if (value !== undefined) {
        set.call(instance, key, JSON.stringify(value), callback);
      }
    };
    instance.get = function (key, callback) {
      get.call(instance, key, (err, val) => {
        if (err) {
          logger.warn('redis.get: ', key, err);
        }
        callback(null, JSON.parse(val));
      });
    };
    // 可以不用传递expires参数。在config文件里进行配置。
    instance.setex = function (key, value, callback) {
      if (value !== undefined) {
        setex.call(instance, key, config.cache.maxAge, JSON.stringify(value), callback);
      }
    };
    return instance;
  },
};
// 返回的是一个redis.client的实例
module.exports = redisObj.init();

How to use

const cache = require('./cache');
cache.get(key, (err, val) => {
  if (val) {
    // do something
  } else {
    // do otherthing
  }
});
cache.set(key, val, (err, res) => {
  // do something
});
cache.setex(key, val, (err, res) => {
  // do something
})

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
Jun 06 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 #NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 #NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 #NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 #NodeJs
使用npm安装最新版本nodejs
Jan 18 #NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 #NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 #NodeJs
You might like
php中对2个数组相加的函数
2011/06/24 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
python中的多重继承实例讲解
2014/09/28 Python
linux下python抓屏实现方法
2015/05/22 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python2随机数列生成器简单实例
2017/09/04 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
学生档案自我鉴定
2013/10/07 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
体育专业求职信
2014/07/16 职场文书
建筑管理专业求职信
2014/07/28 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2015年入党决心书
2015/02/05 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript