mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-18 14:26:56 +00:00
use base store for cache data in base cache adapter
This commit is contained in:
parent
49399755cb
commit
e4d8b69fd9
52
src/adapter/cache/base.js
vendored
52
src/adapter/cache/base.js
vendored
@ -1,4 +1,9 @@
|
||||
'use strict';
|
||||
/**
|
||||
* base store
|
||||
* @type {Class}
|
||||
*/
|
||||
let BaseStore = think.adapter('store', 'base');
|
||||
/**
|
||||
* memory cache
|
||||
*/
|
||||
@ -18,8 +23,11 @@ export default class {
|
||||
*/
|
||||
init(options = {}){
|
||||
this.timeout = options.timeout;
|
||||
//all session data
|
||||
this.data = thinkCache(thinkCache.BASE);
|
||||
|
||||
this.store = new BaseStore({
|
||||
type: thinkCache.BASE
|
||||
});
|
||||
|
||||
//set gc type & start gc
|
||||
this.gcType = 'cache_base';
|
||||
think.gc(this);
|
||||
@ -30,17 +38,16 @@ export default class {
|
||||
* @return {Promise} []
|
||||
*/
|
||||
get(name){
|
||||
let data = this.data[name];
|
||||
if (!data) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
//data is expire
|
||||
if(data.expire && Date.now() > data.expire){
|
||||
delete this.data[name];
|
||||
return Promise.resolve();
|
||||
}
|
||||
let value = think.clone(data.data);
|
||||
return Promise.resolve(value);
|
||||
return this.store.get(name).then(data => {
|
||||
if(!data){
|
||||
return;
|
||||
}
|
||||
//data is expire
|
||||
if(data.expire && Date.now() > data.expire){
|
||||
return this.store.delete(name);
|
||||
}
|
||||
return think.clone(data.data);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* set session data
|
||||
@ -51,12 +58,12 @@ export default class {
|
||||
*/
|
||||
set(name, value, timeout = this.timeout){
|
||||
value = think.clone(value);
|
||||
this.data[name] = {
|
||||
let data = {
|
||||
expire: timeout > 0 ? (Date.now() + timeout * 1000) : null,
|
||||
timeout,
|
||||
data: value
|
||||
};
|
||||
return Promise.resolve();
|
||||
return this.store.set(name, data);
|
||||
}
|
||||
/**
|
||||
* delete session data
|
||||
@ -64,8 +71,7 @@ export default class {
|
||||
* @return {Promise} []
|
||||
*/
|
||||
delete(name){
|
||||
delete this.data[name];
|
||||
return Promise.resolve();
|
||||
return this.store.delete(name);
|
||||
}
|
||||
/**
|
||||
* gc
|
||||
@ -74,11 +80,13 @@ export default class {
|
||||
*/
|
||||
gc(){
|
||||
let now = Date.now();
|
||||
for(let key in this.data){
|
||||
let item = this.data[key];
|
||||
if(item && item.expire && now > item.expire){
|
||||
delete this.data[key];
|
||||
return this.store.list().then(list => {
|
||||
for(let key in list){
|
||||
let item = list[key];
|
||||
if(item && item.expire && now > item.expire){
|
||||
delete list[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,12 +3,10 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
let BaseStore = think.adapter('store', 'base');
|
||||
|
||||
/**
|
||||
* file store class
|
||||
*/
|
||||
export default class extends BaseStore {
|
||||
export default class extends think.adapter.store {
|
||||
/**
|
||||
* init
|
||||
* @param {Object} config []
|
||||
|
||||
3
test/adapter/cache/base.js
vendored
3
test/adapter/cache/base.js
vendored
@ -20,7 +20,8 @@ describe('adapter/cache/base.js', function() {
|
||||
});
|
||||
|
||||
it('new base cache instance', function() {
|
||||
assert.deepEqual(instance.data, {});
|
||||
assert.deepEqual(think.isObject(instance.store), true);
|
||||
assert.deepEqual(instance.gcType, 'cache_base');
|
||||
});
|
||||
|
||||
it('set cache data', function(done) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user