nodejs使用redis.js并进行封装,实现数据存取
环境准备:
1、redis服务已成功安装并可访问
2、nodejs工程安装redis.js包,执行npm install redis --save安装redis
npm install redis --save
不熟悉的小伙伴可以翻看下redis.js的官方文档API,看一下createClient的配置参数,set, get,rpush,del等api的说明;
下面是代码封装与实现:
const redis = require('redis');const host = "127.0.0.1"; // redis服务地址
const port = '6379' // redis服务端口class Redis {constructor() {this.redisClient = redis.createClient({url: `redis://${host}:${port}`,legacyMode: true});// 配置redis的监听事件this.redisClient.on('ready', function() {console.log('Redis Client: ready')})// 连接到redis-server回调事件this.redisClient.on('connect', function () {console.log(new Date(), 'redis is now connected!');});this.redisClient.on('reconnecting', function () {console.log(new Date(), 'redis reconnecting', arguments);});this.redisClient.on('end', function () {console.log('Redis Closed!');});this.redisClient.on('warning', function () {console.log('Redis client: warning', arguments);});this.redisClient.on('error', err => {console.log('Redis Error ' + err);});// 判断redis是否连接if (this.redisClient.isOpen) {console.log('rredis is now connected!')} else {this.redisClient.connect().catch(error => console.log(error));}}async contect() {await this.redisClient.connect().catch(error => console.log(error));}quit() {this.redisClient.quit();}async exists(key) {return new Promise((resolve, reject) => {this.redisClient.exists(key, (err, result) => {if (err) {console.log(err);reject(false);}resolve(result);})})}async set(key, value, exprires) {if (typeof value === 'object') {value = JSON.stringify(value)}return new Promise((resolve, reject) => {this.redisClient.set(key, value, (err, result) => {if (err) {reject(false);}if (!isNaN(exprires)) {this.redisClient.expire(key, exprires);}resolve(result);})})}async get(key) {return new Promise((resolve, reject) => {this.redisClient.get(key, (err, result) => {if (err) {reject(false);}resolve(result);})})}async remove(key) {return new Promise((resolve, reject) => {this.redisClient.del(key, (err, result) => {if (err) {reject(false);}resolve(result);})});}// push 将给定值推入列表的右端 返回值 当前列表长度async rPush(key, list, exprires) {return new Promise((resolve, reject) => {this.redisClient.rPush(key, list, (err, length) => {if (err) {reject(false);}if (!isNaN(exprires)) {this.redisClient.exports(key, exprires);}resolve(length);})})}// 查询list的值async lrange(key, startIndex = 0, stopIndex = -1) {return new Promise((resolve, reject) => {this.redisClient.lRange(key, startIndex, stopIndex, (err, result) => {if (err) {reject(false);}resolve(result)})})}// 清除list中n个值为value的项async lrem(key, n = 1, value) {return new Promise((resolve, reject) => {this.redisClient.lrem(key, n, value, (err, result) => {if (err) {return false}resolve(result);})});}}module.exports = new Redis();
上面已经对redis的能力进行了简单的封装,代码就不过多的进行解释了,一般都看得懂;
(err, result) => {
if (err) {
reject(false); 这里reject(false),reject(err),都可以,根据需要自己决定,建议reject(err),外面调用的时候惊醒一个异常捕捉,这样做更好一些,
}
resolve(result)
}
下面就是如何调用:这段是向微信服务器获取accesstoken,部分业务代码已经省略,只展示redis的操作
const redisClient = require('../../core/redisClient');
class wxService {static async getAccessToken() {// 判断是否存在const haKey = await redisClient.exists('access_token');let access_token = '';if (haKey) {access_token = await redisClient.get('access_token');}// 不存在去获取access_token,并存入到redis中if (!haKey || !access_token) {access_token = 'XXXXXXXXXXXXXXXX';await redisClient.set('access_token', access_token, 60*60*2) }}
}
nodejs使用redis.js并进行封装,实现数据存取相关推荐
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- nodejs 实现 redis 的消息发布及订阅
nodejs 实现 redis 的消息发布及订阅 业务需求 实现方法(koa) 流程 业务需求 大家好,我终于踩坑了哈哈哈哈--- 如果服务器是单线程的话 消息推送完全可以用websocket来实现, ...
- nodejs使用redis库
nodejs使用redis库 安装redis redis4.0语法 redis3.0语法 安装redis 注意:默认安装都是最新版本(截至2022.4.12)即 4.0.6 npm install r ...
- NodeJS 使用redis实现定时执行方法
NodeJS 使用redis实现定时执行任务 文章目录 NodeJS 使用redis实现定时执行任务 场景 使用Redis定时器解决 Redis定时器 Redis发布订阅 操作 nodejs代码 主意 ...
- Redis工具类的封装
Redis工具类的封装 <dependency><groupId>redis.clients</groupId><artifactId>jedis< ...
- nodejs使用redis数据库缓存数据
原文: i.jakeyu.top/2017/01/10/- 作者: Jake 运行redis Redis服务器默认使用6379端口 redis-server 自定义端口 redis-server -- ...
- JS类的封装及实现代码
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. ...
- NodeJS(express)连接、封装操作MySQL
最近要开发一个全栈项目.第一次上车,小本本记录一下,以免忘记. 1.目录结构 先来看一下项目目录: web文件夹:是放一些前端的代码: node_serve:服务端的一些文件: – server.js ...
- JS面向对象编程之封装
我们所熟知的面向对象语言如 C++.Java 都有类的的概念,类是实例的类型模板,比如Student表示学生这种类型,而不表示任何具体的某个学生,而实例就是根据这个类型创建的一个具体的对象,比如zha ...
最新文章
- WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
- 【c语言】蓝桥杯算法提高 3-2字符串输入输出函数
- Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
- 将一组数进行排序后,也输出他与之对应的序号
- LeetCode-46. Permutations
- cisco帧中继实验
- 嵌入式工具——smartmontools
- 存用部首查字典如何查_存的部首,存的偏旁部首,存的拼音,存的笔画数,存的组词,存的意思...
- 笔记本计算机信号不强,增强笔记本WiFi无线信号的方法
- H264码流处理详解
- 四、HTTP协议Header介绍
- kafka系列4:消息幂等性
- 「需求工程」需求工程-介绍(第1部分)
- 4种Java引用浅解
- Brave浏览器 1.0正式面世, 为用户提供无与伦比的隐私保护和奖励
- 关于kernel2.6中USB host controller driver 的问题
- Vue:获取当前定位城市名
- 高中信息技术真题(2022下)
- 【QtScrcpy】开源的投屏控制软件 - 安利
- 基于JAVA的远程屏幕监控系统
热门文章
- 中兴路由器查看时间_1.1.1_老化时间设置说明中兴路由器
- Can't create database 'xxx' (errno: 28)
- 计算机关闭了休眠还是休眠了,电脑关机还是休眠?Win10关闭方式查看命令
- 坏人好当,好人难做!
- 【020】基于51单片机智能路灯系统Proteus仿真与实物设计
- SIMATIC WINCC与PLC进行以太网通信的具体组态方法和步骤
- 300行代码带你实现一个Linux文件系统
- ORACLE 字符串替换函数 REPLACE()
- 蓝牙ibeacon技术实现低成本、高精度室内定位
- FFmpeg环境安装及使用命令实现音视频转码