我有一个Java应用程序,负责为客户端应用程序提供各种(有时是大的)json响应。在应用层,它使用Redis(AWS ElastiCache)根据特定请求缓存具有30秒到5分钟的TTL的json。一些请求是一个相当长时间运行(5-15s),延伸到几个外部服务并返回大量数据。如果TTL是60s,那仍然意味着一些用户每分钟都会得到不可接受的响应时间。我不是在TTL启动时立即从缓存中驱逐数据,而是开始后台任务来获取数据并刷新缓存,同时继续提供数据的陈旧副本(如果存在)。这可以用Redis吗?
答案 0 :(得分:1)
您可以通过为要缓存的每个项目编写一对条目来手动实现此目的。
item
:将TTL设置为硬驱逐的实际商品item/fresh
:布尔值,其TTL设置为软驱逐(即标记为陈旧)。此TTL应该小于硬TTL。 查询时,总是要求输入两个键
方案1 -缓存未命中(item
不存在)
方案2 -缓存命中(两个键都存在)
方案3 -过时(item/fresh
不存在)