【发布时间】:2021-10-24 03:35:18
【问题描述】:
我有一个在旧版 appengine 2.7 中运行的游戏服务器。我已将服务器迁移到 py3/flask 和所有各种位。我已将新服务器连接到 Redis 实例,而旧服务器正在使用 py2.7 的内存缓存。
我正在考虑将我的服务器的 2.7 版本连接到 Redis 内存缓存,因为我已将它作为分阶段迁移运行。这样我就可以在 py3 服务器和 py2 服务器之间拆分流量,它们将使用与我测试等相同的 memcache 服务器。我可以让一些 beta 用户与新服务器交谈并与当前服务器共存。
我的 py2.7 服务器版本与 redis 通信。但我发现使用 Redis 的文档对于存储 ndb 模型有点混乱。看来我不能像使用旧的遗留 memcache 那样直接在 Redis 中填充 ndb 模型类。
在迁移文档中,它说您可以使用 appengine 将 redis 设置为“全局缓存”,示例如下:
client = ndb.Client()
global_cache = ndb.RedisCache.from_environment()
with client.context(global_cache=global_cache):
books = Book.query()
for book in books:
print(book.to_dict())
我不太清楚这意味着什么。我是否需要以我想要缓存的方式构建所有查询,或者是否有一次性设置,然后模型将自动缓存?如果存在,上面的示例会自动从缓存中提取吗?
目前在旧版 memcache 服务器中,我将一堆模型实例(或在我的情况下是特定用户所属的游戏)收集到 python 列表中,并使用类似的键缓存它们
cacheKey = userskey.urlsafe()+"_gamesList"
每当此用户的游戏以某种方式发生更改(更新、删除、添加..等)时,我都会删除 cacheKey.. 下次该用户查询他们的游戏列表时,我会重建缓存。看起来我不能在 Redis 中简单地存储这样的数据。此外,由于该用户可能会与服务器交互,因此我只希望缓存代表该用户的模型。每次该用户与我的服务器交谈时,我都需要使用密钥调用他们的用户帐户
我想我只是对全局缓存以及这一切与旧版 memcache 有何不同感到困惑。目前,我使用旧版 memcache 获得了接近 90% 的缓存命中率,因此尝试使用 Redis 复制它当然是值得的。甚至可能只是一个指向实际示例应用程序的指针也会有所帮助。令人惊讶的是,我没有找到。
【问题讨论】:
标签: python google-app-engine google-app-engine-python