redis 当一个元素受到特定用户情况的影响时,我如何从缓存中获益

lf3rwulv  于 2023-01-08  发布在  Redis
关注(0)|答案(1)|浏览(98)

我们有一个为电子商务平台列出产品的页面,它每30分钟更新一次,我们缓存它30分钟,因为它获得了大量的浏览量。
然而,它上面有一个“购买”按钮,如果用户已经购买了,它需要从“购买”变成“已购买”,因此突然使缓存变得复杂。
正确的方法是什么?我们既可以从缓存中获益,又可以确保每个用户的每个产品的购买/已购买按钮是准确的。
有人有经验吗?

lmyy7pcs

lmyy7pcs1#

如果我对您的帖子理解正确的话,您要做的是缓存尽可能多的页面数据,而不是专门缓存“用户是否购买了此项目”部分。

简言之:

这里的解决方案是将可缓存的数据与不可缓存的数据分开,然后在页面加载时执行以下操作:
1.从缓存中读取可缓存数据
1.从存储不可缓存数据的位置读取该数据。
1.将它们组合到Web页面中以显示给最终用户
我认为这是优化高流量网页或移动的应用程序屏幕性能的一种非常常见的方法(至少我们公司经常这样做),其好处是通过尽可能多地缓存来缩短页面加载时间,同时确保业务逻辑按需运行(在您的情况下,使“buy/buy”按钮正常工作)。

现在,关于如何在实践中做到这一点:

第一步是了解数据以及需要如何缓存数据。有些数据可能根本无法缓存,有些数据可能有特定的缓存要求(例如,您的逻辑可能要求某些数据该高速缓存由于与其他数据不同的原因而失效),这意味着它必须与其他数据分开缓存。听起来您已经这样做了。正如您所描述的,您的数据福尔斯以下两类:

***不可缓存:**页面上每个项目的用户项目购买状态
***可缓存(30分钟):**页面上的所有其他内容

现在您已经了解了数据,您需要做的是根据您确定的规则设置应用程序缓存(或不缓存)数据,然后加载所有内容并在页面加载时将其组合在一起。
有几种方法可以进行缓存&然后根据您希望缓存可缓存数据的位置进行页面加载。

如果要在客户端缓存-可以在浏览器中缓存页面的可缓存部分(或原生应用)缓存。然后,在页面加载时,您可以通过使用页面的Javascript来获取用户购买数据(或本机代码)发出请求(s)到后端服务器。请求(或多个请求,取决于您决定如何执行此操作)可以获取在页面数据的缓存部分中找到的每个项目的用户项目购买状态。
如果你想缓存在服务器端-在这种情况下,你可以缓存页面数据的可缓存部分在Redis/Memcached/你的应用程序的内存/等-你有很多选择的特定技术。然后,当一个页面被请求时,你的后端应用程序可以从任何地方加载缓存的页面数据,然后获取用户项目购买状态的缓存页面数据中找到的每一个项目,最后将所有内容组合到发送给客户端的数据中以显示页面。

在我们公司的案例中,我们混合使用了这两种方法(顺便说一句,对我们来说,客户端通常是本地移动的而不是Web端-所以我们在客户端缓存方面有更大的灵活性)。

最后,作为旁注:

我猜在你的电子商务平台中,用户永远不能“取消购买”某些东西?在这种情况下,你可能能够缓存用户“确实购买”某些东西,即使你不能缓存用户“没有购买”某些东西。这是一个很好的例子,说明了同时使用客户端和服务器端缓存的好处。你可以在客户端缓存大部分页面,但是在服务器端高速缓存该特定信息以加速在页面加载时由客户端代码做出的“检查用户是否购买了这些物品”请求的响应。
然而,由于这将需要大量的缓存,因此我个人建议考虑复杂性/维护方面的缺点与缓存的性能优势(您可能希望进行性能测试,看看它到底有多大帮助)。

相关问题