我的 Django 站点最近开始从我的缓存代码中抛出错误,我不知道为什么...
我打电话:
from django.core.cache import cache
cache.set('blogentry', some_value)
而Django抛出的错误是:
TransactionManagementError: This code isn't under transaction management
但是看PostgreSQL数据库日志,好像是源于这个错误:
STATEMENT: INSERT INTO cache_table (cache_key, value, expires) VALUES (E'blogentry', E'pickled_version_of_some_value', E'2009-07-27 11:10:26')
ERROR: duplicate key value violates unique constraint "cache_table_pkey"
对于我的生活,我无法弄清楚为什么 Django 试图执行 INSERT 而不是 UPDATE。有什么想法吗?
最佳答案
那是一场典型的比赛。它检查您插入的 key 是否存在;如果没有,它会插入,但其他人可以在计数和插入之间插入 key 。交易不会阻止这一点。
代码似乎预料到了这一点并尝试处理它,但是当我查看处理这种情况的代码时,我可以立即看到它被破坏了。此处报告:http://code.djangoproject.com/ticket/11569
我强烈建议坚持使用内存缓存后端。
关于python - Django cache.set() 导致重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189541/