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