基于nodejs的redis操作
驱动基于node-redis包,地址:https://github.com/NodeRedis/node-redis
安装:
npm install redis --save这玩意儿用起来,因为是在一个回调函数中,无法直接返回数据,所以稍微封装一下,命名:redis.js
const redis = require('redis') class Redis { /** * 单列 */ static getInstance() { if (!Redis.instance) { Redis.instance = new Redis(); } return Redis.instance; } /** * 构造函数,链接redis */ constructor(){ let options = { host:'127.0.0.1', port:'6379', //connect_timeout:'1000', //毫秒 //db:'', //password:'' } //其他根据配置加载,用if判断,比如超时时间,db,密码等等 //options.password = '' this.redisClient = redis.createClient(options) //连接失败回调 this.redisClient.on("error", function(error) { console.log(error) }) } /** * 设置,如果key 相同,覆盖,成功返回true * return bool * @param {*} key * @param {*} val * @param {*} expire 过期时间 秒 */ set(key, val, expire = '') { let res return new Promise((resolve, reject) => { res = this.redisClient.set(key,val,function(err,result){ if (err) { reject('redis_error') return } if( expire == '' ){ resolve(res) } }) if(expire !='' ){ //设置过期时间 res = this.redisClient.expire(key,expire,function(err,result){ if (err) { reject('redis_error') return } resolve(res) }) } }) } /** * 设置过期时间,单位秒,1 设置成功 ; 0 设置无效 * @param {*} key * @param {*} expire */ expire(key,expire) { let res return new Promise((resolve, reject) => { res = this.redisClient.expire(key,expire,function(err,result){ if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 设置某个点的过期时间戳,1 设置成功 ; 0 设置无效 * @param {*} key * @param {*} expire 时间戳 */ expireat(key,expire) { let res return new Promise((resolve, reject) => { res = this.redisClient.expireat(key,expire,function(err,result){ if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 获取某个key,key不存在 返回 null * @param {*} key */ get(key) { return new Promise((resolve, reject) => { this.redisClient.get(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 判断key是否存在,1:存在 ; 0:不存在 * @param {*} key */ exists(key) { return new Promise((resolve, reject) => { this.redisClient.exists(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 删除 key,成功返回 1,否则返回 0 * @param {*} key */ del(key) { return new Promise((resolve, reject) => { this.redisClient.del(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 查询 key 生命周期,不存在的key或已过期的key/不过期的key,都返回-1 ,否则返回秒数 * @param {*} key */ ttl(key) { return new Promise((resolve, reject) => { this.redisClient.ttl(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } /** * key的值做加加操作,递增,并返回新值,如果key不存在,设置key 同时赋予1 * @param {*} key */ incr(key) { return new Promise((resolve, reject) => { this.redisClient.incr(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } /** * 判断 key类型,不存在,返回 none * @param {*} key */ type(key) { return new Promise((resolve, reject) => { this.redisClient.type(key, (err, result) => { if (err) { reject('redis_error') return } resolve(result) }) }) } } module.exports = Redis.getInstance();用法:
const redis = require('redis'); //把我们封装的class搞进来 await redis.set('test', 'hello redis',5) //设置key test,varlue:hello redis 过期时间5秒 data = await redis.get('test'); //获取test,返回汗血宝马 ctx.body = data这里用class封装,只有用到的时候才实例化、连接redis,如果用其他方式封装,一定要注意这点,require的时候不能连接redis,用到才连接。命令不够可以扩展,更多命令参考redis!