Symfoware

Symfowareについての考察blog

Redis リストデータの操作について(rpush, lrange, ltrim)

Redisサーバーを一時的なキャッシュ領域として使いたい場合があります。
受け取ったデータをとりあえずリストに追加。
バックグラウンドでリストからまとめて10件程取得して処理するパターンを考えてみました。

redis-py



今回はPython(redis-py)で試してみます。
Python3からRedis Server 4へ接続する(redis-py使用)

rpushでリストの末尾にデータを登録
Redis Command - RPUSH(リストの末尾にデータを追加)

lrangeで登録したデータを取り出してみます。
Redis Command - LRANGE(リストの値を取得)


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  4. for i in range(1, 21):
  5.     r.rpush('key', 'value-%d' % i)
  6. result = r.lrange('key', 0, 10)
  7. for r in result:
  8.     print(r)



狙い通りの実行結果になりました。


$ python3 sample.py
b'value-1'
b'value-2'
b'value-3'
b'value-4'
b'value-5'
b'value-6'
b'value-7'
b'value-8'
b'value-9'
b'value-10'
b'value-11'





rpushで一括登録



rpushは第二引数以降に登録するデータを複数指定できます。


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  4. r.rpush('key', 'value-1', 'value-2', 'value-3', 'value-4')
  5. result = r.lrange('key', 0, 10)
  6. for r in result:
  7.     print(r)



実行結果


$ python3 sample.py
b'value-1'
b'value-2'
b'value-3'
b'value-4'



それなので、最初のコードは以下のように書き換えることができます。


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  4. values = ['value-%d' % i for i in range(1, 21)]
  5. r.rpush('key', *values)
  6. items = r.lrange('key', 0, 10)
  7. for item in items:
  8.     print(item)





キーの削除(ltrim)



取り出したリストの値をまとめて削除するには、ltrimを使用します。
Redis Command - LTRIM(指定した範囲以外の値を削除)

これらを踏まえ、登録したリストから値を取得。
取得済の値を削除しつつ、次の値を取得するプログラムはこうなりました。


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  4. values = ['value-%d' % i for i in range(1, 21)]
  5. r.rpush('key', *values)
  6. while True:
  7.     items = r.lrange('key', 0, 10)
  8.     if not items:
  9.         break
  10.     for item in items:
  11.         print(item)
  12.     
  13.     print('-' * 10)
  14.     r.ltrim('key', len(items), -1)



実行結果


$ python3 sample.py
b'value-1'
b'value-2'
b'value-3'
b'value-4'
b'value-5'
b'value-6'
b'value-7'
b'value-8'
b'value-9'
b'value-10'
b'value-11'
----------
b'value-12'
b'value-13'
b'value-14'
b'value-15'
b'value-16'
b'value-17'
b'value-18'
b'value-19'
b'value-20'
----------



いい感じです。
関連記事

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

  1. 2018/06/26(火) 21:36:45|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Redis 1つのリストに登録できるデータ件数について | ホーム | DynamoDB 条件付きでデータを更新する>>

コメント

コメントの投稿


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

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2211-4d371f59
この記事にトラックバックする(FC2ブログユーザー)