Symfoware

Symfowareについての考察blog

Redis ハッシュ登録とjson形式での登録の速度差(redis-py)

Redisにハッシュ形式でデータ登録できますが、ふとjsonエンコードした文字列を
登録するのとどちらが有利かなと思ったので簡単にテスト。



hmsetでの登録



まず、hmsetでの登録。
pipelineを使用して、10000件一括で登録してみます。


  1. # -*- coding:utf-8 -*-
  2. import datetime
  3. import redis
  4. # 登録用のデータを適用に用意(10フィールド)
  5. map_value = {}
  6. for i in xrange(10):
  7.     map_value['value_%d' %i] = u'適当な文字列を設定しておく'
  8. start = datetime.datetime.now()
  9. # redis client準備
  10. r = redis.Redis(host='192.168.1.101', port=6379, db=0)
  11. pipe = r.pipeline()
  12. # 1000件登録
  13. for i in xrange(10000):
  14.     pipe.hmset('key:%d' % i, map_value)
  15. # 登録実行
  16. pipe.execute()
  17. stop = datetime.datetime.now()
  18. print(stop - start)





5回実行した結果は以下の通り。


0:00:00.733393
0:00:00.722198
0:00:00.734545
0:00:00.740826
0:00:00.731590







hgetallでデータ取得



すべてのデータを取得してみます。


  1. # -*- coding:utf-8 -*-
  2. import datetime
  3. import redis
  4. start = datetime.datetime.now()
  5. # redis client準備
  6. r = redis.Redis(host='192.168.1.101', port=6379, db=0)
  7. # 検索だけ実行
  8. for i in xrange(10000):
  9.     ret = r.hgetall('key:%d' % i)
  10. stop = datetime.datetime.now()
  11. print(stop - start)




実行結果


0:00:04.116560
0:00:04.142717
0:00:04.007236
0:00:04.099062
0:00:04.241744






jsonで登録



次はjsonで。


  1. # -*- coding:utf-8 -*-
  2. import datetime
  3. import json
  4. import redis
  5. # 登録用のデータを適用に用意(10フィールド)
  6. map_value = {}
  7. for i in xrange(10):
  8.     map_value['value_%d' %i] = u'適当な文字列を設定しておく'
  9. json_data = json.dumps(map_value)
  10. start = datetime.datetime.now()
  11. # redis client準備
  12. r = redis.Redis(host='192.168.1.101', port=6379, db=0)
  13. pipe = r.pipeline()
  14. # 1000件登録
  15. for i in xrange(10000):
  16.     pipe.set('key:%d' % i, json_data)
  17. # 登録実行
  18. pipe.execute()
  19. stop = datetime.datetime.now()
  20. print(stop - start)




実行結果


0:00:00.260260
0:00:00.272462
0:00:00.235066
0:00:00.415741
0:00:00.239506








jsonデータの取得



jsonの値を取得してエンコードします。


  1. # -*- coding:utf-8 -*-
  2. import datetime
  3. import json
  4. import redis
  5. start = datetime.datetime.now()
  6. # redis client準備
  7. r = redis.Redis(host='192.168.1.101', port=6379, db=0)
  8. # 検索だけ実行
  9. for i in xrange(10000):
  10.     ret = json.loads(r.get('key:%d' % i))
  11. stop = datetime.datetime.now()
  12. print(stop - start)





実行結果。


0:00:02.665833
0:00:02.780447
0:00:02.745389
0:00:02.860698
0:00:02.753706








まとめ



だたhashを登録したいだけなら、jsonデコードしたほうが良さそうな結果になりました。

パターンpipeline登録単件検索10,000回
hash0.73254.1214
json0.28462.7612
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/07/31(木) 23:51:25|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ