『Redis開発と運行維持』---Pipeline(パイプライン、パイプライン)、事務とLua
2949 ワード
Pipeline Redisクライアントは、1回のコマンドを実行し、送信コマンド、コマンドキュー、コマンド実行、結果を返す4つのプロセスを経験する必要があります.4つのプロセスは、1回のRound Trip Time(RRT、往復時間) と総称される. Pipeline(パイプライン)機構は、一組のRedisコマンドを組み立てる、一度のRTTでRedisに転送し、その一連のRedisコマンドの実行結果をクライアント に順次返すことができる.性能テスト:実行速度は一般的に1つの実行よりも速く、クライアントとサービス側のネットワーク遅延が大きいほど、Pipelineの効果は明らかに である.オリジナルバッチコマンドとPipelineを比較します.原生ロットコマンドは原子で、Pipelineは非原子です.オリジナルバッチコマンドは、複数のキーに対応するコマンドであり、Pipelineは複数のコマンドをサポートします.オリジナルバッチコマンドはRedisサービス側が実装をサポートし、Pipelineはサービス側とクライアントの共同実装を必要とする. ベストプラクティスは、一度にPipelineデータを組み立てる量が大きすぎると、クライアントの待ち時間が増える一方で、一定のネットワークブロックをもたらし、一度に大量のコマンドを含むPipelineを複数回小さいPipelineに分割してPipelineを完成させるには1つのRedisインスタンスしか操作できないが、分散Redisシーンにおいても、一括操作の重要な最適化手段とすることができる.
事務とLua
取引
単純なトランザクション機能:multi(トランザクション開始)とexec(トランザクション終了)コマンドの間に、一緒に実行するコマンドのセットを配置し、原子順で実行できます.
トランザクションを停止するにはexecコマンドの代わりにdiscardを使用します.
watchコマンドは、トランザクションが実行される前に、トランザクションのkeyが他のクライアントによって変更されていないことを確認し、変更された場合はトランザクションを実行しません.楽観的なロックに似ています.
Redisのトランザクションは比較的簡単で、トランザクションのロールバックを保証できず、トランザクション内のコマンド間の論理演算を実現できない.
Lua構文
Luaチュートリアル:https://www.runoob.com/lua/lua-tutorial.html
RedisでLuaを使う eval実行luaスクリプト redis-cli--eval Luaスクリプトが長い場合は、redis-cli--evalを使用してファイルを直接実行することもできます.evalコマンドは–evalパラメータと本質的に同じです. evalsha
まず、LuaスクリプトをRedisサービス側にロードし、そのスクリプトのSHA 1チェックサムを取得します.evalshaコマンドは、パラメータとしてSHA 1を使用して、Luaスクリプトを送信するたびにオーバーヘッドを回避するために、対応するLuaスクリプトを直接実行できます.これにより、クライアントはスクリプトの内容を実行するたびにスクリプトを常駐させる必要がなくなり、スクリプト機能が多重化されます. を得る. を実行する. Luaは、 を実現することができる.
メリット LuaスクリプトはRedisで原子的に実行され、実行中に他のコマンド は挿入されません. Luaスクリプトは、コマンドをカスタマイズし、これらのコマンドをRedisメモリに常駐させ、多重化の効果を実現します. Luaスクリプトは、複数のコマンドを一度にパッケージ化し、ネットワークのオーバーヘッドを効果的に削減します.
Redis管理Luaスクリプト
事務とLua
取引
単純なトランザクション機能:multi(トランザクション開始)とexec(トランザクション終了)コマンドの間に、一緒に実行するコマンドのセットを配置し、原子順で実行できます.
トランザクションを停止するにはexecコマンドの代わりにdiscardを使用します.
watchコマンドは、トランザクションが実行される前に、トランザクションのkeyが他のクライアントによって変更されていないことを確認し、変更された場合はトランザクションを実行しません.楽観的なロックに似ています.
Redisのトランザクションは比較的簡単で、トランザクションのロールバックを保証できず、トランザクション内のコマンド間の論理演算を実現できない.
Lua構文
Luaチュートリアル:https://www.runoob.com/lua/lua-tutorial.html
RedisでLuaを使う
eval key key
まず、LuaスクリプトをRedisサービス側にロードし、そのスクリプトのSHA 1チェックサムを取得します.evalshaコマンドは、パラメータとしてSHA 1を使用して、Luaスクリプトを送信するたびにオーバーヘッドを回避するために、対応するLuaスクリプトを直接実行できます.これにより、クライアントはスクリプトの内容を実行するたびにスクリプトを常駐させる必要がなくなり、スクリプト機能が多重化されます.
script load
スクリプトのロード:スクリプトの内容をRedisメモリにロードし、SHA 1 evalsha SHA1 key key
実行スクリプト:入力パラメータSHA 1の値を、対応するLuaスクリプトredis.call
関数を使用して、Redisへのアクセスredis-cli -a password script load 'redis.call("set","hello","world") return redis.call("get","hello")'
# sha1: "317adb9b83d8b5df45f0bc67609674b0ae930a62"
127.0.0.1> evalsha f25d77be007f76dbce293d457128571799d159b9 0
メリット
Redis管理Luaスクリプト
script load # Lua Redis
scripts exists sha1 [sha1 …] # sha1 Redis
script flush # Redis Lua
script kill # Lua 。 lua redis , 。 ,script kill , shutdown save redis 。