1. ホーム
  2. スクリプト・コラム
  3. ルア

LUAスクリプトを実行するためのphpredisサンプルコード

2022-01-06 07:21:21

プリアンブル

この記事では、LUAスクリプトのphpredis実行について紹介します。参考と勉強のために共有してください。

コード例

$lua = <<<EOT
 local kws = {}
 local lrkws = {}
  local nkws = {}
  local kw_ids = {}
  local lr_ids = {}
  local n_ids = {}

  for kw in string.gmatch(KEYS[1], "[^|]+") do
   table.insert(kws, "kw:". .kws)
  end
  for kw in string.gmatch(KEYS[2], "[^|]+") do
   table.insert(lrkws, "lrkw:". .kw)
  end
  for kw in string.gmatch(KEYS[3], "[^|]+") do
   table.insert(nkws, "nkw:". .kw)
  end

  if #kws > 0 then
   kw_ids = redis.call('sinter', unpack(kws))
  end
  if #lrkws > 0 then
   lr_ids = redis.call('sinter', unpack(lrkws))
  end
  if #nkws > 0 then
   n_ids = redis.call('sinter', unpack(nkws))
  end
  local cache_key = ARGV[1]

  for _, v in ipairs(kw_ids) do
   redis.call('sadd', cache_key, v)
  end
  for _, v in ipairs(lr_ids) do
   redis.call('sadd', cache_key, v)
  end
  for _, v in ipairs(n_ids) do
   redis.call('sadd', cache_key, v)
  end
  redis.call('expire', cache_key, 600)
  return redis.call('scard', cache_key)
EOT;

 $ret = $redis->eval($lua, array("hello|thank you", "", "hello", "cache_key"), 3);
 echo $ret;

この例では、3つのKEYSパラメータと1つのARGVパラメータを渡しています。KEYSパラメータは文字列で、単語と単語の間は|で区切られています。

最後にluaスクリプトは、ARGVパラメータで指定されたキーにクエリ結果を格納し、結果のセットのメンバー数を返します。

ここで重要なのは eval関数の第3引数はKEYSの数です。phpredisはこの値を元にKEYSとARGVを区別しています。

参考ページ:https://github.com/phpredis/phpredis/blob/develop/tests/RedisTest.php

概要

上記は、この記事のすべての内容であり、私はあなたの勉強や仕事のためのこの記事の内容は、特定の参照学習価値を持って願って、あなたが交換するメッセージを残すことができる質問がある場合は、スクリプトハウスのあなたのサポートをありがとうございました。