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 31 NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
Sep 18 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
超级退弹代码
2008/07/07 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
总结Python中逻辑运算符的使用
2015/05/13 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
电信专业毕业生推荐信
2013/11/18 职场文书
义和团口号
2014/06/17 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
个人合伙协议书范本
2014/10/14 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书