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']


関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ