仕事で使用しているRedisの処理速度を測りたかったのでサクッと作成
最低限のことしかしていないので後でカスタマイズする
忘れないように備忘として残す。
スクリプト
# coding:utf-8
#==========================
# インポートモジュール
#==========================
import redis
from concurrent import futures
import time
#==========================
# グローバル変数
#==========================
IPADDR = '127.0.0.1'
PORT = 6379
DB = 1
KEY = 'test_key'
#==========================
# 関数
#==========================
## Redisへのキー登録、参照の実施
def redis_tester(_datastr):
start_at = time.time()
r = redis.Redis(host=IPADDR, port=PORT, db=DB)
r.set(KEY, _datastr)
data = r.get(KEY)
end_at = time.time()
delta_at = end_at - start_at
print(_datastr, ':', delta_at)
#==========================
# MAIN関数
#==========================
def main():
print("------- [test start] -------")
future_list = []
with futures.ThreadPoolExecutor(max_workers=4) as executor:
for i in range(10000):
future = executor.submit(fn=redis_tester, _datastr='test' + str(i))
future_list.append(future)
_ = futures.as_completed(fs=future_list)
if __name__ == "__main__":
main()
備忘
まずはredisモジュールが必要なのでpipでインストールしておく
$ pip install redis
futuresで並列処理をする。
max_workersの値がCPUのスレッド数を超えないようにする(超えたら一気にパフォーマンス落ちたので)
無限ループにしても良かったが、止め忘れたときに悲惨なことになりそうなのでrangeを設けて有限ループ。
redisで行う処理は
- データの登録
- 参照
- 削除
だけのシンプルなもの。
出力結果
test9994 : 0.0032379627227783203
test9995 : 0.0025110244750976562
test9996 : 0.0031316280364990234
test9997 : 0.0036094188690185547
test9998 : 0.0030736923217773438
test9999 : 0.0026302337646484375
こんな感じ。
0.003secぐらいで処理できている。
注意点としては、このスクリプトはRedisに負荷をかける目的はないため、
負荷試験的なことがしたければほかのツールで負荷をかける必要がある。
幸いにもRedisにはredis-benchmarkという優秀な性能検証ツールがあるので、
それを使って負荷をかけつつ、レスポンスにかかる時間がどうなっているのかを確認するように作成した。
コメント