在请求之间共享全局词典

时间:2019-01-08 23:40:15

标签: python-3.x flask flask-sqlalchemy

我目前正在开发一个在线实时游戏,该游戏使用全局词典来存储所有游戏室。如果用户尝试进入游戏,则脚本将检查字典以查找空房间。如果未找到空房间,则将新的房间对象添加到字典中,以便其他登录的用户可以进入游戏室。

问题在于,使用Are global variables thread safe in flask? How do I share data between requests?Preserving global state in a flask application这些问题指出的全局字典不是一个好主意

在答案中,建议将请求共享的数据存储在数据库或memcached中。如果我想使用数据库方式进行存储,是否应在每次请求时将整个字典存储在数据库中?有没有更好,更安全的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

  

每次请求时,我都应将整个字典存储在数据库中

如果您使用数据库(如SQLite),则整个字典应该已经在数据库中。然后,只要需要有关游戏室的信息,就可以查询数据库。不要将包含共享数据的整个字典保存在内存中,不要将所有共享数据移动到数据库中,不要从内存中删除包含共享数据的字典,在需要共享数据时查询数据库,并在更改共享数据时更新数据库。

我建议您try it out。我认为您会发现数据库足够快(和安全)。

请注意,数据库还具有ACID属性,您可以使用和依赖这些属性。这些ACID属性的值目前可能尚不清楚,但这会随着您使用数据库的次数的增加而改变。