分享一个nodejs中koa操作redis的工具类 基于 ioredis

分享一个node 操作redis的工具类 基于ioredis

redis.js

const config = require(':config/server.base.config');
const { getUCMd5 } = require(':lib/Utils'); //getUCMd5 的实现       MD5(`${str}${config.saltMD5}`).toUpperCase();
const Redis = require('ioredis');
const rediskey = {	//这个常量文件可以单独放一个js里,再导入,我这里只是方便演示
    GET_WEB_TYPES: 'GET_WEB_TYPES', //'获取分类列表
};
class RedisStore {
    constructor() {
		  /**
            redisConfig: {
                prefix: 'DATASESS', //redis前缀
                dataPrefix: 'DATAPREFIX',   //redis数据存储前缀
                port: 6379, //端口
                host: '0.0.0.0',    //你的redisIP
                password: 'xxxxxx', //你的redis密码 无密码可以为空
                db: 0,  //默认存储库
                ttl: 60 * 60 * 24, //过期时间
                options: {} //其它配置
            },
         */
        this.redis = new Redis(config.redisConfig);
        this.key = rediskey;
    }
    /**
     * 设置redis data
     * @param {*} key
     * @param {*} data
     * @param {*} maxAge
     * @param {*} ex
     */
    async setData(key, data, maxAge = 60 * 60 * 24, ex = 'EX') {
        let status = null;
        try {
            const KEY = getUCMd5(key); //转成大写的MD5作为key
            if (data && typeof data === 'object') {
                status = await this.redis.set(`${config.redisConfig.dataPrefix}:${KEY}`, JSON.stringify(data), ex, maxAge);
            } else {
                status = await this.redis.set(`${config.redisConfig.dataPrefix}:${KEY}`, data, ex, maxAge);
            }
        } catch (error) {
            console.error(`设置data出错:`, error);
        }
        return status === 'OK';
    }

    /**
     * 获取redis的data
     * @param {*} key
     */
    async getData(key) {
        try {
            const KEY = getUCMd5(key); //转成大写的MD5作为key
            const data = await this.redis.get(`${config.redisConfig.dataPrefix}:${KEY}`);
            if (data && typeof data === 'string') {
                return JSON.parse(data);
            } else {
                return data;
            }
        } catch (error) {
            console.error(`设置data出错:`, error);
        }
    }

    /**
     * 删除redis的data
     * @param {*} key
     */
    async delData(key) {
        let status = null;
        try {
            const KEY = getUCMd5(key); //转成大写的MD5作为key
            status = await this.redis.del(`${config.redisConfig.dataPrefix}:${KEY}`);
        } catch (error) {
            console.error(`删除data出错:`, error);
        }
        return status > 0;
    }
}

module.exports = new RedisStore();

使用方法

假设在某个服务类中使用redis
service.js

const redis = require(':lib/redis'); // 导入封装redis工具类

  async getCode({ size = 4, w = 100, h = 30 }) {
        try {
        	const data = {
        		text: 135478,
        		ex: 12456
        	}
            //设置验证码   data可以为任意js数据类型  存储到redis
            await redis.setData(`redis的key最好用一个变量或者常量来代替字符`, data, 60 * 5); //设置有效期 单位是 秒(s) 返回Boolean值 
			const rd = await redis.getData(`redis的key 和存储时的一样`);//存在返回存储的原对象,不存在或者过期后返回null
			const delRD = redis.delData(`redis的key 和存储时的一样`);	//删除redis的缓存 返回Boolean 值
            return result.success(null, { img: data });
        } catch (error) {
            return result.failed(error);
        }
  }

实际项目中的截图
在这里插入图片描述
以上是简单的操作,如果需要其它功能的应用,请自行扩展.

发布了70 篇原创文章 · 获赞 44 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览