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 win7下安装方法
May 24 NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
Nodejs中自定义事件实例
Jun 20 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Nodejs极简入门教程(三):进程
Oct 27 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
浅谈Python中的私有变量
2018/02/28 Python
python hash每次调用结果不同的原因
2019/11/21 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
对python中list的五种查找方法说明
2020/07/13 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
大学毕业通用个人的求职信
2013/12/08 职场文书
在校学生职业规划范文
2014/01/08 职场文书
单位在职证明范本
2014/01/09 职场文书
成考报名单位证明范本
2014/01/16 职场文书
世界遗产的导游词
2015/02/13 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL