AWS ElastiCache - 添加 TTL

TTL 也称为生存时间。它用于利用延迟加载策略和直写策略。这两种策略在前面的章节中讨论过。直写可确保数据始终保持最新,但可能会因空节点而失败,并可能用多余的数据填充缓存。通过为每次写入添加生存时间 (TTL) 值,我们能够获得每种策略的优势,并在很大程度上避免用多余的数据弄乱缓存。

TTL 的工作原理

生存时间 (TTL) 是一个整数值,指定密钥过期前的秒数。当应用程序尝试读取过期的密钥时,它将被视为未找到密钥,这意味着将查询数据库以查找密钥并更新缓存。这并不能保证值不会过时,但它可以防止数据变得太过时,并且需要偶尔从数据库刷新缓存中的值。

TTL 示例

以下代码给出了如何使用函数实现 TTL 的示例。它借助了 Memcached 使用的 set 命令。

直写策略的代码

save_customer(customer_id, values)
   customer_record = db.query(""UPDATE Customers WHERE id = {0}"", customer_id, values)
   cache.set(customer_id, customer_record, 300)

   return success

延迟加载策略的代码

get_customer(customer_id)
   customer_record = cache.get(customer_id)
    
   if (customer_record != null)
      if (customer_record.TTL < 300)
         return customer_record        // 返回记录并退出函数
            
    // 仅当缓存中不存在该记录时才执行此操作 OR
    // TTL 为 >= 300,即缓存中的记录已过期。
    customer_record = db.query(""SELECT * FROM Customers WHERE id = {0}"", customer_id)
    cache.set(customer_id, customer_record, 300) // 更新缓存
    return customer_record