缓存在服务器上的内存中

zah*_*pov 5 web-applications server-side

我想用客户端Javascript和后端服务器(Python)编写Web应用程序.客户端需要经常以AJAX方式从服务器获取数据.数据库中的数据,并且每个请求的加载费用都很高.

但是,在桌面应用程序中,我只需将数据从DB加载一次到内存然后访问它.在Web应用程序中 - 服务器代码每次都会运行请求,所以我不能这样做(每次运行都必须再次从DB加载到内存).这怎么办?一个进程可以在服务器上运行,还是我必须在这里使用不同的东西?

一个例子就像在标签的stackoverflow上自动完成一样 - 如何在服务器中实现快速缓存/加载?


我想知道像memcached这样的数据存储是否真的是自动完成的好方法?你如何表示部分匹配的关键?

TFD*_*TFD 6

使用memcache或类似工具

缓存中的每个项目都有一个密钥和一个到期日期和时间

您需要使密钥对您的应用程序有用.一种典型的键模型图案是Security.Domain.Query.QueryValue对于套,或Security.Domain.ID为单个对象

例如

ALL.Product.Q.RedProducts域中的一个集合,使用查询Red表示所有用户

Admin.Product.Q.BluProducts域中的一个集合,使用查询Blu仅适用于Admin用户

ALL.Customer.O.12345是来自客户域ID 12345所有用户的单个对象图

如果需要,您还可以向密钥添加格式.

因此,当您的Web应用程序请求自动完成框的数据时,处理该调用的Web服务首先从memcache请求数据,如果没有找到或过期,它只会执行昂贵的数据库查询

例如,自动完成以查找产品

  1. 请求:http://server.com/product? q = gre& format = json
  2. 服务器生成memcache密钥ALL.Product.Name.gre.json
  3. Memcache查询失败
  4. 生成SQL查询从名为"gre%"的名称选择产品ID,名称,价格
  5. 将结果格式化为Json
  6. 将结果保存到memcache中
  7. 将结果返回给浏览器

还有下一次

  1. 请求:http://server.com/product? q = gre& format = json
  2. 服务器生成memcache密钥ALL.Product.Name.gre.json
  3. Memcache查询成功
  4. 将结果返回给浏览器

秘诀在于有一个关键模型适用于所有出现的memcache,并且不会为不同的关注点生成重复的键.请记住在查询参数中编码分隔符(在示例中为".")