如何从PHP调用KeyDB的EXPIREMEMBER方法

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

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

2admgd59

2admgd591#

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

  1. $redis = new Redis();
  2. $redis->connect('127.0.0.1', 6379, 1);
  3. // Add a Sorted Set member that we want to expire
  4. $redis->zAdd('key', 1, 'val1');
  5. // Prepare our Lua script to expire the member added above
  6. $script = "return redis.call('EXPIREMEMBER', KEYS[1], ARGV[1], ARGV[2])";
  7. $sha = sha1($script);
  8. // Assume script is already cached in Redis server, but load it if first attempt fails
  9. $result = $redis->evalSha($sha, ['key', 'val1', 60]);
  10. if ($result === false) {
  11. $redis->script('load', $script);
  12. $result = $redis->evalSha($sha, ['key', 'val1', 60]);
  13. }

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

展开查看全部

相关问题