session/lib/redis-store.js

69 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-09-18 18:25:56 +08:00
/**
* redis版会话管理
* @author yutent<yutent.io@gmail.com>
* @date 2020/09/18 16:35:26
*/
2020-09-24 19:56:01 +08:00
import Ioredis from 'ioredis'
2020-09-18 18:25:56 +08:00
export default class Session {
2020-09-24 19:56:01 +08:00
constructor(opt) {
2021-01-26 13:59:54 +08:00
this.store = new Ioredis({
2020-09-24 19:56:01 +08:00
host: opt.db.host || '127.0.0.1',
port: opt.db.port || 6379,
db: opt.db.db || 0
})
this.ttl = opt.ttl
2020-09-18 18:25:56 +08:00
}
2020-09-24 19:56:01 +08:00
start(ssid) {
2020-09-18 18:25:56 +08:00
// 设置session有效期
2020-09-24 19:56:01 +08:00
this.store.expire(ssid, this.ttl)
2020-09-18 18:25:56 +08:00
}
// 获取session字段值, 需要await指令
2020-09-25 18:32:00 +08:00
get(ssid, key) {
2020-09-18 18:25:56 +08:00
var defer = Promise.defer()
2020-09-25 18:32:00 +08:00
this.store.hgetall(ssid, (err, obj) => {
2020-09-18 18:25:56 +08:00
if (err) {
return defer.reject(err)
}
for (let i in obj) {
2020-09-24 19:56:01 +08:00
if (obj[i]) {
obj[i] = Number.parse(obj[i])
2020-09-18 18:25:56 +08:00
}
}
//不传key时,直接返回全部字段
2020-09-24 19:56:01 +08:00
if (key) {
2020-09-18 18:25:56 +08:00
defer.resolve(obj.hasOwnProperty(key) ? obj[key] : null)
2020-09-24 19:56:01 +08:00
} else {
defer.resolve(obj)
2020-09-18 18:25:56 +08:00
}
})
return defer.promise
}
//设置session字段值
2020-09-25 18:32:00 +08:00
set(ssid, key, val) {
2020-09-18 18:25:56 +08:00
if (typeof key === 'object') {
for (let i in key) {
2020-09-25 18:32:00 +08:00
this.store.hset(ssid, i, key[i])
2020-09-18 18:25:56 +08:00
}
} else {
2020-09-25 18:32:00 +08:00
this.store.hset(ssid, key, val)
2020-09-18 18:25:56 +08:00
}
}
//删除单个字段
2020-09-25 18:32:00 +08:00
unset(ssid, key) {
this.store.hdel(ssid, key)
2020-09-18 18:25:56 +08:00
}
//清除个人session
2020-09-25 18:32:00 +08:00
clear(ssid) {
this.store.del(ssid)
2020-09-18 18:25:56 +08:00
}
}