我正在我的应用程序中用KeyDB替换Redis,以便使用KeyDB EXPIREMEMBER特性。然而,这个方法不包含在PHPREdis中。有没有一个KeyDB插件替代PHPRedis来添加这个函数?或者,在PHPRedis中有没有一种方法来调用这个函数,尽管它没有内置这个函数?
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 = 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);
}
注意,在Redis 7中,使用函数而不是临时脚本会更好,但是PHPRedis还没有提供这种支持(尽管PHPRedis已经添加了这种支持)。有关使用脚本的详细信息,请访问:https://github.com/phpredis/phpredis#script和此处:https://redis.io/docs/manual/programmability/
1条答案
按热度按时间2admgd591#
我找不到任何现成的PHP客户端库实现了KeyDB 'EXPIREMEMBER'函数,所以我最终使用Redis对Lua脚本的支持来解决这个问题。
注意,在Redis 7中,使用函数而不是临时脚本会更好,但是PHPRedis还没有提供这种支持(尽管PHPRedis已经添加了这种支持)。
有关使用脚本的详细信息,请访问:https://github.com/phpredis/phpredis#script和此处:https://redis.io/docs/manual/programmability/