[Python] Redisデータベースに接続して使い方


Devlopment note / Python    作成日付 : 2022/02/21 18:23:49   修正日付 : 2022/02/21 18:24:37

こんにちは。明月です。


この投稿はPythonでRedisデータベースに接続して使い方に関する説明です。


RedisデータベースはRDB種類ではなく、NoSQL種類のKey-Valueタイプのデータベースです。簡単に共有メモリのデータベースです。以前の投稿でLinux環境にインストール及び使い方に関して説明したことがあります。

リンク - [CentOS] Redisデータベースをインストールする方法とコマンドを使い方


そのRedisデータベースをPythonで使ってみましょう。

PythonでRedisデータベースを使うためにはRedisライブラリをインストールするべきです。

pip3 install redis


私はもうインストールされているのでインストール済みで表示しますね。インストールをしてない方は上のコマンドでインストールしたら良いでしょう。


インストールしたらPythonソースでRedisを使ってみましょう。

# redisライブラリ宣言
import redis

# ホストとポート設定、データベースを設定してconnectionを取得
with redis.StrictRedis(host='192.168.0.201', port=6379, db=0) as conn:
  # testをキーでhello world値を入力
  conn.set('test', 'hello world')
  # testをキーでデータを取得する。
  data = conn.get('test')
  # コンソール出力
  print(data)

# ホストとポート設定、データベースを設定してpoolを設定
redis_pool = redis.ConnectionPool(host='192.168.0.201', port=6379, db=0, max_connections=4)
# poolからconnectionを取得する
with redis.StrictRedis(connection_pool=redis_pool) as conn:
  # test1をキーでhello world1値を入力
  conn.set('test1', 'hello world1')
  # testをキーでデータを取得する。
  data = conn.get('test1')
  # コンソール出力
  print(data)



基本的な使い方はkeyを利用してデータを入力して取得する関数です。

接続方法にはStrictRedis関数を利用して直接にconnectionを取得する方法があるし、poolをまず生成してpoolからconnectionを取得する方法があります。

どっちらかが良いか言うことは難しいですが、poolがコネクションを管理するので、リソース管理ではpoolの方が良いでしょう。上の例はシングルプロセスで動いているのでpoolを使わなくても特にコネクション管理が必要ないですが、マルチスレッド環境ならconnection管理が必要なのでpoolを使う方が良いということです。

# redisライブラリ宣言
import redis

# ホストとポート設定、データベースを設定してconnectionを取得
with redis.StrictRedis(host='192.168.0.201', port=6379, db=0) as conn:
  # testをキーでhello world値を入力する、500秒の満了時間
  conn.set('test', 'hello world', 500)
  # testキーの満了時間を出力
  print(conn.ttl('test'))
  # 満了時間設定、100秒
  conn.expire('test', 100)
  # testキーの満了時間を出力
  print(conn.ttl('test'))
  # testをキーでデータを出力
  data = conn.get('test')
  # コンソール出力
  print(data)
  # すべてキーを削除
  #conn.flushall()



上のソースはキーの満了時間設定です。単位は秒単位で設定できます。


次はRedisで使うListとMap、Set、SortedSetのデータタイプです。

# redisライブラリ宣言
import redis

# ホストとポート設定、データベースを設定してconnectionを取得
with redis.StrictRedis(host='192.168.0.201', port=6379, db=0) as conn:
  # リストの左から入力する。
  conn.rpush("list", "1");
  # リストの右から入力する。
  conn.lpush("list", "2");
  # リストデータを出力 - 2, 1
  for i in conn.lrange('list',0 ,10):
    # コンソール出力
    print(i)
  # コンソール出力
  print('lpop list')
  # リストの左をpop - 2
  print(conn.lpop('list'))
  # コンソール出力
  print('list')
  # リストデータを出力 - 1
  for i in conn.lrange('list',0 ,10):
    # コンソール出力
    print(i)
  # 改行
  print()
  # Hashタイプのkey-value値を入力
  conn.hset("map", "a", "1")
  conn.hset("map", "b", "2")
  conn.hset("map", "c", "3")
  # Hashタイプのすべてデータを出力
  print(conn.hgetall('map'))
  # Hashタイプのa keyのデータ出力
  print(conn.hget('map', 'a'))
  # 改行
  print()
  # Setタイプの値を入力
  conn.sadd('set', 'C')
  conn.sadd('set', 'B')
  conn.sadd('set', 'A')
  # 重複は入力されない
  conn.sadd('set', 'A')
  conn.sadd('set', 'A')
  # Setタイプの出力
  print(conn.smembers('set'))
  # Setタイプの値を入力 - 変数名 set1
  conn.sadd('set1', 'A')
  conn.sadd('set1', 'D')
  # setとset1の積集合
  print(conn.sinter('set', 'set1'))
  # setとset1の和集合
  print(conn.sunion('set', 'set1'))
  # 改行
  print()
  # SortedSetタイプの値を入力
  conn.zadd('sortedset', {'B': 1})
  conn.zadd('sortedset', {'A': 3})
  conn.zadd('sortedset', {'C': 0})
  # 10個のデータ出力
  print(conn.zrange('sortedset',0 , 9))
  # 10個のデータ出力 - 降順
  print(conn.zrange('sortedset',0 , 9, desc=True))
  # 2個のデータ出力 - 降順
  print(conn.zrange('sortedset',0 , 1, desc=True))
  # すべてキーを削除
  #conn.flushall()



Pythonは使う人により実装する仕方が違いますが、私はPythonでプログラムを作ることよりプロジェクトの補助手段としてバッチスクリプトなどを作成して使うことでよく活用します。

その状況で様々なローカルでデータを共有するかJavaやC#でRedisを使うならその値を確認してテストする目的でよく使います。


ここまでPythonでRedisデータベースに接続して使い方に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿