我正在开发一个计算密集型的django应用程序。使用芹菜,执行耗时的任务,使用Redis作为代理,并用于缓存发布。
Redis缓存用于跨芹菜任务共享大型字典结构。
我有一个rest api,可以频繁地在Redis缓存中编写/更新python字典(在1秒后)。每次api调用都会启动一个新任务。
在localhost上,一切都运行得很好。但在Aws上,elastic-beanstalk应用程序在运行一段时间后会崩溃。
当字典结构为空时,它不会崩溃。下面是我如何更新缓存的代码。
r = redis.StrictRedis(host=Constants.REDIS_CACHE_ADDRESS, port=6379, db=0)
mydict_obj = r.get("mydict")
if mydict_obj:
mydict = eval(str(mydict_obj))
else:
mydict = {}
for hash_instance in all_hashes:
if hash_instance[1] in mydict:
mydict[hash_instance[1]].append((str(hash_instance[0]), str(data.recordId)))
else:
mydict[hash_instance[1]] = [(str(hash_instance[0]), str(data.recordId))]
r.set("mydict", mydict)找不到解决方案,为什么elastic-beanstalk应用程序在aws上崩溃。它在本地主机上工作得很好。
发布于 2016-08-12 05:12:08
从文档中:
使用的内存不要超过指定的字节数。当达到内存限制时,Redis会根据选择的驱逐策略尝试删除密钥(参见maxmemory- policy )。
如果Redis不能根据策略删除密钥,或者如果策略设置为'noeviction',Redis将开始对使用更多内存的命令回复错误,如SET、LPUSH等,并将继续回复只读命令,如GET。
当使用Redis作为LRU缓存,或者设置实例的硬内存限制(使用'noeviction‘策略)时,此选项通常很有用。
https://stackoverflow.com/questions/38891893
复制相似问题