PlatoPHP

缓存与锁

Cache

use plato\cache\cache;

cache::set('user:7', $user, 300);
$user = cache::get('user:7');
$exists = cache::has('user:7');

$user = cache::remember('user:7', 300, fn () => load_user(7));
cache::tags(['user', 'tenant:3'])->set('user:7', $user, 300);
cache::tags(['user'])->flush();

驱动包括 redisfilememcachedmemorymemory 只在当前进程内有效;文件驱动适合单机普通缓存;跨 worker 原子计数使用 Redis。

get() 的返回值不能单独说明 key 是否存在,因为 false0、空字符串和空数组都是合法值;需要区分时调用 has()

PSR-16

安装 psr/simple-cache 后,可把 plato\psr\cache 交给只接受 Psr\SimpleCache\CacheInterface 的库。

分布式锁

use plato\lock;

$result = lock::guard('invoice:42', function () {
    return issue_invoice(42);
}, timeout: 3, expire: 15);

plato\lock 只使用 Redis。锁值带持有者 token,解锁与续期通过原子脚本完成。锁服务器不能使用会任意淘汰锁 key 的 maxmemory policy。