Symfoware

Symfowareについての考察blog

Redis 1つのリストに登録できるデータ件数について

Redisのリストを一時キャッシュとして使ってみようと思います。
Redis リストデータの操作について(rpush, lrange, ltrim)

ふと、1つのリストにどの程度の件数登録できるか気になったので試してみます。


郵便番号データ



適当な大量データがなかったので、郵便番号と住所を使用することにしました。
読み仮名データの促音・拗音を小書きで表記するもの(zip形式)

1つのリストに

[郵便番号]:[住所]


という形式で登録してみます。


  1. # -*- coding:utf-8 -*-
  2. import codecs
  3. import redis
  4. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  5. with codecs.open('KEN_ALL.CSV', 'r', 'ms932') as f:
  6.     values = []
  7.     for line in f:
  8.         data = line.split(',')
  9.         zipcode = data[2].strip('"')
  10.         address = ''.join([s.strip('"') for s in data[6:9]])
  11.         values.append('%s:%s' % (zipcode, address))
  12.         
  13.         if len(values) == 100:
  14.             r.rpush('key', *values)
  15.             values = []
  16.             
  17.     if values:
  18.         r.rpush('key', *values)



実行すると、普通に登録が完了しました。

llenでリストの件数を取得してみます。
Redis Command - LLEN(リストの要素数を取得)


  1. # -*- coding:utf-8 -*-
  2. import redis
  3. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  4. print(r.llen('key'))



実行結果


$ python3 sample.py
124189



約12万件。全県登録できていますね。

ファイルに復元してデータを確認してみます。
データはバイトで登録されているので、decodeで文字列に戻してやります。


  1. # -*- coding:utf-8 -*-
  2. import codecs
  3. import redis
  4. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  5. with codecs.open('result.txt', 'w', 'utf-8') as f:
  6.     while True:
  7.         items = r.lrange('key', 0, 100)
  8.         if not items:
  9.             break
  10.         for item in items:
  11.             f.write('%s\n' % item.decode())
  12.         r.ltrim('key', len(items), -1)



バッチリ復元されました。



1アイテムのデータ容量を増加



リストの1項目の長さを約10倍にして登録してみます。


  1. # -*- coding:utf-8 -*-
  2. import codecs
  3. import redis
  4. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  5. with codecs.open('KEN_ALL.CSV', 'r', 'ms932') as f:
  6.     values = []
  7.     for line in f:
  8.         data = line.split(',')
  9.         zipcode = data[2].strip('"')
  10.         address = ''.join([s.strip('"') for s in data[6:9]])
  11.         # 住所の長さを10倍にする
  12.         values.append('%s:%s' % (zipcode, address * 10))
  13.         
  14.         if len(values) == 100:
  15.             r.rpush('key', *values)
  16.             values = []
  17.             
  18.     if values:
  19.         r.rpush('key', *values)



データを復元


  1. # -*- coding:utf-8 -*-
  2. import codecs
  3. import redis
  4. r = redis.StrictRedis(host='192.168.1.102', port=6379, db=0)
  5. with codecs.open('result.txt', 'w', 'utf-8') as f:
  6.     while True:
  7.         items = r.lrange('key', 0, 100)
  8.         if not items:
  9.             break
  10.         for item in items:
  11.             f.write('%s\n' % item.decode())
  12.         r.ltrim('key', len(items), -1)



復元したファイルの容量は約44MBになりましたが、全く問題ありませんでした。
安心してキャッシュ領域に使えそうです。

関連記事

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

  1. 2018/06/26(火) 21:59:41|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<FuelPHP 1.8 Redisに接続してデータの登録、取得、削除 | ホーム | Redis リストデータの操作について(rpush, lrange, ltrim)>>

コメント

コメントの投稿


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

トラックバック

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