考虑一个应用程序,例如(Ticket Master或BookMyShow或任何其他座位预订应用程序)。
容量估算:每月60亿次页面浏览,每月售出1500万张预订机票。
屏幕大小可能在1000到10万个座位之间。
在保留用户选择的座位后,它们为用户提供5分钟的时间来完成付款。如果用户未能在指定的时间内完成付款,则该席位将被释放回免费池中。
在将用户重定向到付款页面之前,我们将用户选择的SEATS的状态更改为DB中的“保留”,并在高速缓存中为该特定SHOWID(高速缓存中的键)输入一个条目。
让我们说我们已经缓存了所有“预订和保留”的座位,以便在REDIS中更快地访问每个节目,而不是如下查询数据库。
{SHOWID : [{SEAT_ID, TimeInterval}, {SEAT_ID, TimeInterval}......]}
如果在任何时间点用户未能在5分钟的间隔内付款。我们需要做以下2件事,才能将座位释放回免费池中。
现在的问题是容量估算,如果用户未能在5分钟的时间内为所有城市的每次演出支付5分钟的费用,我们如何有效地将所有RESERVED座位撤回免费游泳池。这样其他用户可以立即看到这些座位的状态为可预订。
由于REDIS CACHE中所有城市的每个SHOW都有大量的RESERVED / BOOKED席位数据。
P.S:我已经阅读了有关REDIS激活钥匙有效方式的信息。但是它会随机选择密钥以检查是否过期,如果过期,它将删除该条目。但这可能导致某些座位状态仍显示为RESERVED,即使预订过期时间已经超过REDIS随机选择为止。