python - 如何为具有许多不同查询变量的 Python Web 应用程序构建数据库缓存(memcached/Redis)?

标签 python database caching redis memcached

对于我的应用程序,我使用的是 Flask,但我提出的问题更为笼统,可以应用于任何 Python 网络框架。

我正在构建一个比较网站,我可以在其中更新数据库中有关产品的详细信息。我想构建我的应用程序,以便访问我网站的 99% 的用户永远不需要查询数据库,而是从缓存(memcached 或 Redis)中检索信息。

我要求我的应用程序是实时的,因此我对数据库所做的任何更新都必须立即可供网站的任何访问者使用。因此我不想缓存 View /路由/html。

我想缓存整个数据库。但是,因为在查询时有太多不同的变量,我不确定如何构建它。例如,如果我要缓存每个查询,然后需要更新数据库中的产品,我基本上需要刷新整个缓存,这对于大型 Web 应用程序来说并不理想。

我更喜欢在数据库中缓存单独的行。问题是,我如何构建它以便在对数据库进行更新时适本地刷新缓存?另外,如何从缓存中将所有这些映射到一起?

我希望这是有道理的。

最佳答案

虽然我自己有一个 PHP 项目,但我也有这个确切的问题。我的解决方案是使用 ElasticSearch 作为应用程序和数据库之间的中间缓存。

实现这一点的诀窍是 ORM。我设计它以便在调用 Entity.save() 时首先将其存储在数据库中,然后将完整的对象(包含所有引用)推送到 ElasticSearch,然后才提交事务并将流返回给调用者.

通过这种方式,我保持了关系数据库的全部功能(原子更改、事务、约束、触发器等),并且仍然缓存了所有实体及其所有引用(父子关系)以及使缓存的个体失效的能力对象。

希望这对您有所帮助。

关于python - 如何为具有许多不同查询变量的 Python Web 应用程序构建数据库缓存(memcached/Redis)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128100/

相关文章:

c# - 在 ASP.NET 中缓存异步方法的结果

php - 如何使用 Excel 更新 mySQL 数据库中的列

python - 如何解决 Django 中的 "TypeError at/post/new/"

python - PySpark 马尔可夫模型的算法/编码帮助

python - 重新编译正则表达式帮助(python、beautifulsoup)

c# - UWP 连接字符串

database - 以有意义的方式可视化出勤数据

python - 从 Django 缓存中删除所有匹配的键

java - 如何将泛型类型存储在缓存中以避免在检索时进行未经检查的强制转换?

Python:将原始字符串转换为字节字符串而不添加转义字符