python - Django cache.set() 导致重复键错误

标签 python django postgresql caching

我的 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/

相关文章:

python - 在heroku上使用带有django的站点地图包

sql - PostgreSQL:运算符不存在:无时区的时间戳==无时区的时间戳

sql - 在 bash 中循环遍历 PostgreSQL 表

python - Tensorflow 图形编辑器重新路由复杂网络

Python:用遗传算法解决背包优化问题?

python - 使用 python unittest 抽象测试用例

python - 如何将元素添加到 OrderedDict 的开头?

python - 获取一个 QuerySet 并按相关表的值之和对其进行排序

python - Django 或 python 与 Mercurial 一起使用时如何处理 pyc 文件?

postgresql - 更新语句到函数 PostgreSQL