PHP 8.6.0 RC2 available for testing

Yac::delete

(PECL yac >= 1.0.0)

Yac::delete从缓存中删除条目

说明

public function Yac::delete(string|array $key, int $delay = 0): bool

从缓存中删除一个或多个条目。

注意:

注意,Yac 并不会真正把条目从缓存中移除:删除只是把条目标记为过期——delay0 时立即过期——只有当后续的写入恰好复用了这个哈希槽时,该条目才会被覆盖:要么是同一个键被重新写入,要么是另一个键的插入恰好落在了这个槽上。在那之前,槽位一直被占用,所以 Yac::info() 报告的 slots_used 计数不会减少, Yac::dump() 也仍会列出这些已删除的条目;检视 dump 输出时,需要自己检查 ttl 值把它们过滤掉。

参数

key

string 类型的键,或者由待删除的键组成的 array

delay

条目变为失效前等待的秒数。省略或为 0 时,条目立即失效。正数值表示条目在这段时间内仍可读,到期后才失效。

返回值

成功时返回 true;键不在缓存中时返回 false。由于删除只是把条目标记为过期,一个已删除但尚未被覆盖的键仍然算作存在:再次删除同一个键会返回 true

传入键的 array 时,只有当每个键都存在才返回 true;只要有任何一个键缺失,就返回 false

示例

示例 #1 Yac::delete() 示例

<?php
$yac = new Yac();
$yac->set("foo", "bar");

var_dump($yac->delete("foo"));      // bool(true):标记为过期
var_dump($yac->get("foo"));         // bool(false):从此读取都是未命中
var_dump($yac->delete("foo"));      // bool(true):槽位还没被覆盖,所以又成功
var_dump($yac->delete("never"));    // bool(false):从未存储过

// 删除不会释放槽位:slots_used 不减少,
// 已过期的条目仍然出现在 dump 里
var_dump($yac->info()["slots_used"]); // int(1)
print_r($yac->dump());                // "foo" 仍在列表中;其 ttl 已过期
?>

示例 #2 延迟删除

<?php
$yac = new Yac();

// 条目在过期前再保持可读 60 秒
$yac->set("tmp", "value");
var_dump($yac->delete("tmp", 60));    // bool(true)
?>

示例 #3 一次删除多个键

<?php
$yac = new Yac();
$yac->set("tmp", "value");

// 只有当每个键都存在才返回 true
var_dump($yac->delete(array("tmp", "nope"))); // bool(false):"nope" 不存在
?>

参见

添加备注

用户贡献的备注

此页面尚无用户贡献的备注。
To Top