设置会话不会自动过期

时间:2015-12-30 13:40:17

标签: python caching cherrypy

我正在使用cherrypy将存储数据处理到缓存中。我使用下面的代码将数据放入缓存:

import cherrypy
import datetime
import sys
from cherrypy.lib.caching import MemoryCache
cache = MemoryCache()

def putDataIntoCache(self, *args, **kwargs):
    data = cache.get()
    if not data:
        obj = kwargs
        size = sys.getsizeof(obj)
        cache.put(obj, size)
        data = obj
return 'obj: %s, id: %s' % (cache.get(), id(cache.get()))

但问题是缓存数据在10秒后自动清除。 我发现在cache.py类中设置了delay = 600。因此,数据在10秒后被清除。

我只想在重新启动cherrypy服务器时清除缓存数据。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您不应该直接使用缓存。特别是当您不想真正想要更好地控制缓存失效时。

您可以这样做:

import cherrypy as cp                                                                                                                                                           
from cherrypy.process.plugins import SimplePlugin                                                                                                                               

class CachePlugin(SimplePlugin):                                                                                                                                                      

    def start(self):                                                                                                                                                            
        self.bus.log('Initializing cache')                                                                                                                                      
        cp.cache = {}                                                                                                                                                           

    def stop(self):                                                                                                                                                             
        self.bus.log('Clearing cache')                                                                                                                                          
        cp.cache = {}                                                                                                                                                           

class Root:                                                                                                                                                                     

    @cp.expose                                                                                                                                                                  
    def default(self, user=None):                                                                                                                                               
        if user is not None:                                                                                                                                                    
            cp.cache['user'] = user                                                                                                                                             
        return cp.cache.get('user', 'No user')                                                                                                                                  


CachePlugin(cp.engine).subscribe()                                                                                                                                                    
cp.quickstart(Root())  

尝试使用://?user=test//?user=new_user

你可以在插件中包含缓存并发布通道来修改它,但一般来说这个想法是你不需要缓存工具,只是在服务器启动和停止时监听(我假设你正在使用自动重载器。

这只是在cherrypy模块上修补的字典猴子。这很快捷。在墨西哥已经很晚了...我希望这会有所帮助。

有关插件的更多信息:http://cherrypy.readthedocs.org/en/latest/extend.html#server-wide-functions