use base store for cache data in base cache adapter

This commit is contained in:
welefen 2015-07-25 07:47:42 +08:00
parent 49399755cb
commit e4d8b69fd9
3 changed files with 33 additions and 26 deletions

View File

@ -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];
}
}
}
})
}
}

View File

@ -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 []

View File

@ -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) {