2016-05-12 18 views
6

私はZopeユーティリティとネットワークプロセスを実行するメソッドを持っています。 theの結果はしばらくの間有効ですが、私はplone.memoize.ramを使用して結果をキャッシュしています。plone.memoize.ramを使ってメモを無効にする/防止する

MyClass(object): 

    @cache(cache_key) 
    def do_auth(self, adapter, data): 
     # performing expensive network process here 

...とキャッシュ機能:

def cache_key(method, utility, data): 
    return time() // 60 * 60)) 

しかし、私はdo_auth呼び出しが空の結果を返すときに行わ(またはネットワークエラーを発生させる)ためにメモ化を防ぎたいです。

plone.memoizeコードを見ると、私はraise ram.DontCache()例外が必要なようですが、これを行う前に古いキャッシュされた値を調べる方法が必要です。

どのようにキャッシュされたデータをキャッシュストレージから取得できますか?

答えて

3

私はこのコードをいくつか書きましたが、書きました... テストされていませんが、お手伝いが必要です。

ICacheChooserユーティリティを使用してキャッシュデータにアクセスすることができます。 それの呼び出し方法は、あなたが必要とするすべてに関する情報があるはずですcached_infosでは、あなたのケース自体

key = '{0}.{1}'.format(__name__, method.__name__) 
cache = getUtility(ICacheChooser)(key) 
storage = cache.ramcache._getStorage()._data 
cached_infos = storage.get(key) 

に、あなたがキャッシュされた関数に点線の名前を必要とします。

関連する問題