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开发环境配置与使用
Nov 17 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
Nodejs 识别图片类型的方法
Aug 15 NodeJs
nodejs制作小爬虫功能示例
Feb 24 NodeJs
Nodejs实现WebSocket代码实例
May 19 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
一个程序下载的管理程序(一)
2006/10/09 PHP
php at(@)符号的用法简介
2009/07/11 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
php文件缓存方法总结
2016/03/16 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
python使用Tesseract库识别验证
2018/03/21 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python如何输出百分比
2020/07/31 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
护士自荐信范文
2013/12/15 职场文书
会计主管岗位职责
2014/01/03 职场文书
2014年转正工作总结
2014/11/08 职场文书
警示教育片观后感
2015/06/17 职场文书
餐厅开业活动方案
2019/07/08 职场文书