- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Redis 锁来保护重复项目的创建。 (我知道我可以通过许多其他方式做到这一点,但它是我遇到的更复杂问题的一个更简单的测试用例,我想了解为什么 redis/python-redis 失败了)
def redisTester():
for i in range(300):
for j in range(300):
lockKey = "foo_%d_%d" % (i,j)
lock = redis.Redis().lock(lockKey, timeout=60, sleep=1)
lock.acquire()
try:
bf = Foo.objects.get(a=i, b=j)
except Foo.DoesNotExist:
bf = Foo(a=i, b=j)
bf.save()
lock.release()
用这个模型:
class Foo(models.Model):
a = models.IntegerField(db_index=True)
b = models.IntegerField(db_index=True)
我在命令行中启动了这个脚本的两个实例。不知何故,一些记录是重复的:
SELECT COUNT(*) , a, b FROM `redistest_foo` GROUP BY `a`, `b` HAVING COUNT(*) > 1;
+----------+-----+-----+
| COUNT(*) | a | b |
+----------+-----+-----+
| 2 | 2 | 184 |
| 2 | 5 | 92 |
| 2 | 8 | 3 |
| 2 | 10 | 219 |
| 2 | 13 | 127 |
| 2 | 16 | 7 |
| 2 | 18 | 196 |
| 2 | 21 | 85 |
| 2 | 23 | 288 |
...
这可能意味着锁没有正常工作,或者orm的保存没有阻塞。
我错过了什么?这与 django orm 的工作方式有关吗?
最佳答案
原来是和mysql事务管理有关。
innodb默认的事务隔离级别“repeatable read”,所以save不会立即被其他人看到。应该将级别设置为“已提交阅读”
关于redis - python redis setnx lock功能在django orm中创建唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20660719/
Redis 有 SETNX命令。 我阅读了文档。但是,它没有明确说明它是否是原子的。 我读到不建议用于分布式锁。但是,我的情况稍微简单一些。我只需要确保先来的人(第一个调用者)设置值,第二个调用者收到
1 前言 在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁. 目前其他比较常见
使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法。 SETNX命令简介 命令格式 ?
目录 1、通过setnx实现 1、setnx key value 2、get key 3、getset key value
在野外捕捉到这个随机异常: System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnha
我正在使用 Redis 锁来保护重复项目的创建。 (我知道我可以通过许多其他方式做到这一点,但它是我遇到的更复杂问题的一个更简单的测试用例,我想了解为什么 redis/python-redis 失败了
我需要从应用程序客户端连接到单个 Redis 实例。 由于客户端将在 Kubernetes 中进行复制,我正在研究有关锁的 Redis 文档以防止客户端副本之间的竞争。 在谷歌搜索和阅读之后,我将注意
我正在编写这个应用程序,我将在其中使用 Redis 作为某种数据库来存储聊天消息。每当我需要设置任何给定的 key 时,我都会考虑使用 SETNX 以确保它不存在。 但是应用程序需要非常灵敏,因为它是
我有一个简短的问题要问那些更熟悉 Redis 内部并可能知道答案的人。 我使用 socket.io 并存储了 sessionID 映射 - 套接字。除此之外,我使用 SET 命令存储空值以指示用户已连
我是一名优秀的程序员,十分优秀!