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的模块写法入门(实例代码)
Mar 07 NodeJs
nodejs实现黑名单中间件设计
Jun 17 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
幼儿园教师岗位职责
2014/03/17 职场文书
自我鉴定书
2014/03/24 职场文书
文员岗位职责范本
2015/04/16 职场文书
硕士学位申请报告
2015/05/15 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
PHP 时间处理类Carbon
2022/05/20 PHP