我正在使用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服务器时清除缓存数据。
如何解决这个问题?
答案 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