如何从PHP调用KeyDB的EXPIREMEMBER方法

2wnc66cl  于 2023-03-11  发布在  PHP
关注(0)|答案(1)|浏览(142)

我正在我的应用程序中用KeyDB替换Redis,以便使用KeyDB EXPIREMEMBER特性。然而,这个方法不包含在PHPREdis中。
有没有一个KeyDB插件替代PHPRedis来添加这个函数?或者,在PHPRedis中有没有一种方法来调用这个函数,尽管它没有内置这个函数?

2admgd59

2admgd591#

我找不到任何现成的PHP客户端库实现了KeyDB 'EXPIREMEMBER'函数,所以我最终使用Redis对Lua脚本的支持来解决这个问题。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 1);

// Add a Sorted Set member that we want to expire
$redis->zAdd('key', 1, 'val1');

// Prepare our Lua script to expire the member added above
$script = "return redis.call('EXPIREMEMBER', KEYS[1], ARGV[1], ARGV[2])";
$sha = sha1($script);

// Assume script is already cached in Redis server, but load it if first attempt fails
$result = $redis->evalSha($sha, ['key', 'val1', 60]);
if ($result === false) {
    $redis->script('load', $script);
    $result = $redis->evalSha($sha, ['key', 'val1', 60]);
}

注意,在Redis 7中,使用函数而不是临时脚本会更好,但是PHPRedis还没有提供这种支持(尽管PHPRedis已经添加了这种支持)。
有关使用脚本的详细信息,请访问:https://github.com/phpredis/phpredis#script和此处:https://redis.io/docs/manual/programmability/

相关问题