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极简入门教程(二):定时器
Oct 25 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodeJS实现路由功能实例代码
Jun 08 NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 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
解析htaccess伪静态的规则
2013/06/18 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python随机读取文件实现实例
2017/05/25 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
甲方资料员岗位职责
2013/12/13 职场文书
魅力教师事迹材料
2014/01/10 职场文书
教师个人总结范文
2015/02/11 职场文书
科技馆观后感
2015/06/08 职场文书
朋友离别感言
2015/08/04 职场文书
python执行js代码的方法
2021/05/13 Python
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
python基础入门之字典和集合
2021/06/13 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS