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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
详解python的数字类型变量与其方法
2016/11/20 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
python PyTorch预训练示例
2018/02/11 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
毕业大学生自荐信
2014/06/17 职场文书
汽车转让协议书
2015/01/29 职场文书
小学副班长竞选稿
2015/11/21 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Win11 BitLocker 驱动器加密
2022/04/19 数码科技