我想用客户端Javascript和后端服务器(Python)编写Web应用程序.客户端需要经常以AJAX方式从服务器获取数据.数据库中的数据,并且每个请求的加载费用都很高.
但是,在桌面应用程序中,我只需将数据从DB加载一次到内存然后访问它.在Web应用程序中 - 服务器代码每次都会运行请求,所以我不能这样做(每次运行都必须再次从DB加载到内存).这怎么办?一个进程可以在服务器上运行,还是我必须在这里使用不同的东西?
一个例子就像在标签的stackoverflow上自动完成一样 - 如何在服务器中实现快速缓存/加载?
我想知道像memcached这样的数据存储是否真的是自动完成的好方法?你如何表示部分匹配的关键?
使用memcache或类似工具
缓存中的每个项目都有一个密钥和一个到期日期和时间
您需要使密钥对您的应用程序有用.一种典型的键模型图案是Security.Domain.Query.QueryValue对于套,或Security.Domain.ID为单个对象
例如
ALL.Product.Q.Red是Products域中的一个集合,使用查询Red表示所有用户
Admin.Product.Q.Blu是Products域中的一个集合,使用查询Blu仅适用于Admin用户
ALL.Customer.O.12345是来自客户域ID 12345的所有用户的单个对象图
如果需要,您还可以向密钥添加格式.
因此,当您的Web应用程序请求自动完成框的数据时,处理该调用的Web服务首先从memcache请求数据,如果没有找到或过期,它只会执行昂贵的数据库查询
例如,自动完成以查找产品
请求:http://server.com/product? q = gre& format = json
服务器生成memcache密钥ALL.Product.Name.gre.json
Memcache查询失败
生成SQL查询从名为"gre%"的名称选择产品ID,名称,价格
将结果格式化为Json
将结果保存到memcache中
将结果返回给浏览器
还有下一次
请求:http://server.com/product? q = gre& format = json
服务器生成memcache密钥ALL.Product.Name.gre.json
Memcache查询成功
将结果返回给浏览器
秘诀在于有一个关键模型适用于所有出现的memcache,并且不会为不同的关注点生成重复的键.请记住在查询参数中编码分隔符(在示例中为".")