我使用redis [内存缓存来过滤重复记录]运行一个Django服务器,集成到芹菜进程[将数据异步插入PostgreSQL数据库的任务]。 django服务器通过django-redis-cache
与redis集成,并启用了缓存。
CACHES = {
'default': {
'BACKEND': 'redis_cache.RedisCache',
'LOCATION': '/tmp/redis.sock',
},
}
如果我使用./manage.py runserver ip:8000
来运行我的服务器并开始发布数据,那么在redis中的GET / SET属性期间没有问题,因为它是一个应用程序,我的应用程序运行顺畅。
但是现在,我打算通过这个命令将django迁移到gunicorn
:
gunicorn myapp:wsgi_app -w 3 -b ip:8000
由于这为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>))
如果我检查redis-server日志[redis-cli monitor
],在我开始使用gunicorn之后,我会在其中获得空记录。
是否还有一个聪明的工作来保持redis活跃为gunicorn线程?
答案 0 :(得分:0)
当Redis Cache解开对象时,似乎发生了错误。
原因是Django无法找到模型(u'webapi', 'Reading')
,
检查是否已将webapi
应用添加到设置中。INSTALLED_APPS。