From e4d8b69fd918cfdaa5ea7afcb83dac71fb674be2 Mon Sep 17 00:00:00 2001 From: welefen Date: Sat, 25 Jul 2015 07:47:42 +0800 Subject: [PATCH] use base store for cache data in base cache adapter --- src/adapter/cache/base.js | 52 ++++++++++++++++++++++---------------- src/adapter/store/file.js | 4 +-- test/adapter/cache/base.js | 3 ++- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/adapter/cache/base.js b/src/adapter/cache/base.js index 8ca0de18..67d6c320 100644 --- a/src/adapter/cache/base.js +++ b/src/adapter/cache/base.js @@ -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]; + } } - } + }) } } diff --git a/src/adapter/store/file.js b/src/adapter/store/file.js index 0b22b091..3e254960 100644 --- a/src/adapter/store/file.js +++ b/src/adapter/store/file.js @@ -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 [] diff --git a/test/adapter/cache/base.js b/test/adapter/cache/base.js index 4480333f..97788fc7 100644 --- a/test/adapter/cache/base.js +++ b/test/adapter/cache/base.js @@ -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) {