redis-py体験レポート No.3

redis-py体験レポート第三弾をお送りします。

いつものように、Redisサーバーを起動します。

$ sudo redis-server /etc/redis.conf

そして、Python対話モードを起動しRedisサーバーに接続します。

>>> import redis
>>> conn = redis.Redis(host='localhost', port=6379, db=0)

Redis Lists

Listsデータ構造は、Pythonで言うところのリストとほぼ同じ機能を実装しています。
ただし、Pythonのリストが配列なのに対し、RedisのListsは連結リストです。
詳細は、入門:Redis のデータ構造と概念のRedis Listsをご覧ください。

リストの作成。

>>> conn.lpush('lang', 'Python') # リストlangの先頭に文字列'Python'を追加
1 現在のリスト中の項目数は1
>>> conn.lpush('lang', 'Ruby', 'PHP', 'JavaScript') # 複数の値をまとめてセット
4 現在のリスト中の項目数は4
>>> conn.rpush('lang', 'C++') # 末尾に追加
5 現在のリスト中の項目数は5

redis-cliで実行すると、

> lpush lang Python
(integer) 1
> lpush lang Ruby PHP JavaScript
(integer) 4
> rpush lang C++
(integer) 5

以上で、リストlangにデータが格納されました。
このリストを使って、いろいろな操作を行ってまいりましょう。

範囲指定してデータを抜き出す

lrange関数を使う。

>>> conn.lrange('lang', 0, 1) # 0番目と1番目の要素を取得する。
[b'JavaScript', b'PHP']
>>> conn.lrange('lang', -3, -1) # 最後の3個を取得する。インデックスがマイナスのときは末尾から数える。
[b'Ruby', b'Python', b'C++']
>>> conn.lrange('lang', 0, -1) # すべての要素を取得する。
[b'JavaScript', b'PHP', b'Ruby', b'Python', b'C++']

redis-cliで実行すると、

> lrange lang 0 1
1) "JavaScript"
2) "PHP"
> lrange lang -3 -1
1) "Ruby"
2) "Python"
3) "C++"
> lrange lang 0 -1
1) "JavaScript"
2) "PHP"
3) "Ruby"
4) "Python"
5) "C++"

先頭または末尾のデータを取り出す

lpop/rpopを使う。

>>> conn.lpop('lang') #先頭の要素を取り出す。
b'JavaScript'
>>> conn.lrange('lang', 0, -1) #先頭の要素は消える。
[b'PHP', b'Ruby', b'Python', b'C++']
>>> conn.rpop('lang') #末尾の要素を取り出す。
b'C++'
>>> conn.lrange('lang', 0, -1)
[b'PHP', b'Ruby', b'Python'] #末尾の要素は消える。

redis-cliで実行すると、

> lpop lang
"JavaScript"
> lrange lang 0 -1
1) "PHP"
2) "Ruby"
3) "Python"
4) "C++"
> rpop lang
"C++"
> lrange lang 0 -1
1) "PHP"
2) "Ruby"
3) "Python"

常にリスト中の項目数を一定に保つ

ltrim関数を使う。

>>> conn.flushall() # まっさらの状態で実験開始。
True
>>> conn.lpush('lang', 'Python', 'Ruby', 'JavaScript')
3
>>> conn.lpush('lang', 'Java')
4
>>> conn.ltrim('lang', 0, 2) # 先頭の3個だけを残す。
True
>>> conn.lrange('lang', 0, -1)
[b'Java', b'JavaScript', b'Ruby'] 確かに3個だけが残っている。

redis-cliで実行すると、

> flushall
OK
> lpush lang Python Ruby JavaScript
(integer) 3
> lpush lang Java
(integer) 4
> ltrim lang 0 2
OK
> lrange lang 0 -1
1) "Java"
2) "JavaScript"
3) "Ruby"

では、また。

Redisプログラミング物語 © 2016 Frontier Theme