Qlessに関する知識

5185 ワード

Qlessはredisに基づく分散型タスクアーキテクチャである.関連コードはhttps://github.com/seomoz/qlessです.
完全にluaが実現され、Redisのluaへのサポートにより、http://www.cnblogs.com/ghj1976/p/4298206.htmlはredisへの機能拡張を実現しています.
luaに関するいくつかの文法的基礎知識は、参照できる:http://www.cnblogs.com/ghj1976/p/4298178.html
https://github.com/seomoz/qless ここでは下のファイルが見られます.それぞれ以下の機能です.
base.lua--事前に声明した部分と一部の未分類の機能config.lua--すべての設定job.lua--タイミングjob類recurring.lua--重複のjob類queue.lua--キュー類appi.lua--クライアントがパッケージを呼び出して、ここで非常に軽いパッケージを作った.
私たちが使う時には、このファイルを使うためには、make qless.lua命令で作成します.
image
Qless.luaの最後に、次のコードが見られます.この部分のコードの説明は以下の通りです.
if落KEYS'0 then error('No Keys Shoul d be provided')end
local command_name=asset(table.remove(ARGV,1)、'Must provide a command'local command      = クラスメイト  QlessAPI[command uname],'Uniknown command'.command_name]
local now          = toumber local now          = クラスメイト  now,'Arg"now"missing or not a number:'.(now or'nil')
return command(now,unpack(ARGV))
外部からの呼び出しは、実際にはQlessAPIの下の対応方法に実行されています.外部呼び出しが伝えられた第1のパラメータはQlessAPIの下で対応するコマンド名で、第2はこのコマンドのnowパラメータで、他のパラメータです.
 
RedisでLuaを実行するパラメータ説明
Redisではluaを実行しています.以下の3つのコマンドはEVAL、EVALSHA、SCRIPT LOADです.
参考:http://www.cnblogs.com/ghj1976/p/4298206.html
evalを例にとって、そのパラメータは以下の通りです.他のいくつかのパラメータも同様です.
EVAL script numkeys key[key…]arg[arg...]
スクリプトパラメータはLua 5.1スクリプトプログラムで、Redisサーバのコンテキストで実行されます.このスクリプトはLua関数として定義される必要はありません.
numkeysパラメータは、キーパラメータの個数を指定します.
キーパラメータkey[key...]は、EVALの3番目のパラメータから計算し、シナリオに使用されるRedisキー(key)を表し、これらのキーパラメータはLuaでグローバル変数KEYS配列を通して、1をベースとした形でアクセスできます.
命令の最後に、キーパッドパラメータではない付加パラメータのarg[arg...]は、Luaでグローバル変数ARGV配列を介してアクセスできます.アクセスの形式はKEYS変数と類似しています.
上記の長い説明は簡単な例で要約できます.
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

1) "key1"

2) "key2"

3) "first"

4) "second"
「return{KEYS[1],KEYS[2],ARGV[1],ARGV[2]」は、求められたLuaスクリプトであり、数字2はキーパラメータの数を指定しており、key 1とkey 2はキーパラメータであり、それぞれKEYS[1]とKEYS[2]を使ってアクセスし、最後のfirstとsecondは、GARVと追加パラメータである.
参考:http://redis.readthedocs.org/en/latest/script/eval.html#eval
 
table.remove
テーブルのデフォルトの初期インデックスは、一般的に1で始まります.
table.remove(table,pos)
テーブル.remove()関数は削除して、テーブル配列部分がpos位置にある要素を返します.その後の要素は前に移動します.posパラメータはオプションで、デフォルトはテーブル長で、つまり最後の要素から削除します.
参考:http://dhq.me/lua-learning-notes-table
 
クラスメイト(v[、メッセージ])
機能:Cの断言に相当します.パラメータ:v:式vがnilまたはfalseであるとエラーが発生します.メッセージ:エラーが発生した時に戻る情報は、デフォルトは「astertion failed」です.
 
アンパック
関数unpackは複数の値を返します.arrayに入ってきて、arrayの各値に戻ります.
参考:http://blog.csdn.net/wzzfeitian/article/details/8653101
 
 
このGolangの実装バージョンは:https://github.com/kdar/goqless
コールロジックは以下のコードに実装されています.
github.com\kdar\goqless\client.go
func(c*Client)Do(name string,keys AndArgs...interface{}(interface{}error){
  return c.lua.Do(name, keysAndArgs...)
}
ここのnameはqlessのコマンドで、以下のgetに似ています.他はここのパラメータです.
--Return json for the job identified by the provided jid.If the job is not
-- present, then `nil` is returned
function QlessAPI.get(now, jid)
  local data = Qless.job(jid):data()
  if not data then
    return nil
  end
  return cjson.encode(data)
end