django 多线程mysql脏行

2016-11-15  本文已影响0人  十三流

同一个项目下俩个线程,操作Model后,得到的数据不同。
场景:用户付款后保存付款状态到数据库,把单号通过websocket发给客户端,客户端确认订单后通过websocket返回单号和状态,此时在处理回传的单号时,抛出单号不存在。
原因:自己在ECS上搭建的数据库服务,默认的隔离级别为REPEATABLE-READ,修改为READ COMMITTED即可,也可以在django的settings中设置此选项而不用更改mysql配置文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS':{'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED'}
    }
}
上一篇 下一篇

猜你喜欢

热点阅读