cur*_*gie 5 django caching redis gunicorn
我使用redis [内存缓存来过滤重复记录]运行一个Django服务器,集成到芹菜进程[将数据异步插入PostgreSQL数据库的任务].django服务器与redis via集成,django-redis-cache启用了缓存.
CACHES = {
'default': {
'BACKEND': 'redis_cache.RedisCache',
'LOCATION': '/tmp/redis.sock',
},
}
Run Code Online (Sandbox Code Playgroud)
如果我./manage.py runserver ip:8000用来运行我的服务器并开始发布数据,那么在redis中的GET/SET属性期间没有问题,因为它是一个应用程序,我的应用程序运行顺畅.
但是现在,我打算gunicorn通过这个命令将django迁移到:
gunicorn myapp:wsgi_app -w 3 -b ip:8000
Run Code Online (Sandbox Code Playgroud)
由于这为django进程创建了3个worker,我相信他们正在尝试访问相同的redis-server进行缓存.
如果我开始使用此设置发布数据,我收到此消息,
Internal Server Error: /post/data/
File "/path/to/app/views.py", line 94, in saveData
value = cache.get(key)
File "/usr/local/lib/python2.7/dist-packages/redis_cache/cache.py", line 186, in get
result = self.unpickle(value)
File "/usr/local/lib/python2.7/dist-packages/redis_cache/cache.py", line 248, in unpickle
return pickle.loads(value)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 1035, in model_unpickle
return cls.__new__(cls)
TypeError: ('object.__new__(X): X is not a type object (NoneType)', <function model_unpickle at 0x1c49aa0>, ((u'webapi', 'Reading'), [], <function simple_class_factory at 0x1c49a28>))
Run Code Online (Sandbox Code Playgroud)
如果我检查redis-server log [ redis-cli monitor],在我开始使用gunicorn后,我会在其中获得空记录.
是否有一个聪明的工作来保持redis活跃为gunicorn线程?
小智 0
看起来 Redis 缓存取消拾取对象时发生错误。
原因是Django找不到模型(u'webapi', 'Reading'),
检查您是否已将webapi应用程序添加到settings.INSTALLED_APPS中。