redis 03. 连接koa-session和redis nodejs

Posted 空船

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 03. 连接koa-session和redis nodejs相关的知识,希望对你有一定的参考价值。

安装koa-session

yarn add koa-session  

配置koa-session redis

const session = require(‘koa-session‘);
const Redis = require(‘ioredis‘);
const redis = new Redis();


// 配置koa-session
  server.keys = [‘dev secret key‘];
  const CONFIG = {
    key: ‘ig‘,
    store: new RedisSessionStore(redis)
  };
  server.use(session(CONFIG, server));
// 设置session
  router.get(‘/set/user‘, async ctx => {
    ctx.session.user = {
      name: ‘js‘,
      age: 29
    };
    ctx.body = ‘success‘;
  });
  server.use(router.routes());  

  

koa-session store的配置

// 连接redis的一些方法

/**
 * 返回实际使用的redis模块名
 * @param {*} sid key
 */
function getSessionId(sid) {
  return `ssid:${sid}`;
}

class RedisSessionStore {
  constructor(client) {
    // 传入一个redis实例
    this.client = client;
  }

  /**
   * 从redis获取session数据
   * @param {*} sid key
   */
  async get(sid) {
      console.log(‘get sid‘,sid)
    const id = getSessionId(sid);
    const data = await this.client.get(id);
    if (!data) {
      return null;
    }
    try {
      const result = JSON.parse(data);
      return result;
    } catch (err) {
      console.error(err);
    }
  }

  /**
   * 存入session数据到redis
   * @param {*} sid key
   * @param {*} sess value
   * @param {*} ttl 过期时间
   */
  async set(sid, sess, ttl) {
    console.log(‘set sid‘,sid)
    const id = getSessionId(sid);
    if (typeof ttl === ‘number‘) {
      ttl = Math.ceil(ttl / 1000);
    }
    try {
      const sessStr = JSON.stringify(sess);
      if (ttl) {
        await this.client.setex(id, ttl, sessStr);
      } else {
        await this.client.set(id, sessStr);
      }
    } catch (err) {
      console.error(err);
    }
  }

  /**
   * 从redis删除session数据
   * @param {*} sid key
   */
  async destroy(sid) {
      const id= getSessionId(sid);
      await this.client.del(id)
  }
}

module.exports = RedisSessionStore

 

以上。  

 

以上是关于redis 03. 连接koa-session和redis nodejs的主要内容,如果未能解决你的问题,请参考以下文章

koa2--07.koa-session的使用

python与redis交互

redis的连接方法|连接池|操作

koa-session源码学习——session处理流程

从koa-session源码解读session原理

从koa-session源码解读session本质