Symfoware

Symfowareについての考察blog

Redis hashの値でソートする(luaスクリプト使用)

Redis 2.6以降でluaスクリプトが実行できました。
Redisでluaスクリプトを実行する(redis-py使用)

これを応用して、hashの値でソートしてみます。


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. # redis client準備
  4. r = redis.Redis(host='192.168.1.101', port=6379, db=0)
  5. # 適当に値を登録
  6. r.hmset('id:1', {'map_key':'value-1'})
  7. r.hmset('id:2', {'map_key':'value-2'})
  8. # luaスクリプト
  9. lua = """
  10. local value = redis.call('KEYS', KEYS[1])
  11. local t = {}
  12. for i,v in ipairs(value) do
  13.     local map = redis.call('HGETALL', v)
  14.     
  15.     local temp = {}
  16.     temp['key'] = v
  17.     
  18.     local k = ''
  19.     for j,jv in ipairs(map) do
  20.         if j % 2 == 0 then
  21.             temp[k] = jv
  22.         else
  23.             k = jv
  24.         end
  25.         
  26.     end
  27.     
  28.     table.insert(t, temp)
  29. end
  30. table.sort(t, function(a, b) return a.map_key > b.map_key end)
  31. local ret = {}
  32. for i,v in ipairs(t) do
  33.     local row = v.key .. ',' .. 'map_key:' .. v.map_key
  34.     table.insert(ret, row)
  35. end
  36. return ret
  37. """
  38. # luaスクリプトを登録
  39. multiply = r.register_script(lua)
  40. # スクリプト実行
  41. ret = multiply(keys=['id:*'])
  42. # 結果を表示
  43. print ret




うまく行ったみたいです。


$ python sample.py
['id:2,map_key:value-2', 'id:1,map_key:value-1']


関連記事

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

  1. 2014/07/31(木) 23:22:12|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Redis ハッシュ登録とjson形式での登録の速度差(redis-py) | ホーム | Redisでluaスクリプトを実行する(redis-py使用)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1445-5e39b9af
この記事にトラックバックする(FC2ブログユーザー)