Pythonを用いてDockerコンテナにインストールしたRedisサーバー上に登録した値を取得する

スポンサーリンク

Pythonを用いてDockerコンテナにインストールしたRedisサーバー上に登録した値を取得してみます。

今回はPythonのライブラリ「redis」を用います。このライブラリ・モジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■環境

Windows10(DockerDesktopインストール済み)

docker version

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■登録したkeyの中の値を確認する

以前、「起動したredis-cliでsetコマンドを用いて値を登録しgetコマンドで値を取得する」という記事を公開し、myvalというkeyを設定し、文字列(value)である”abcd1234”を保持しました。

Pythonを用いてDockerコンテナにインストールしたRedisサーバー上に登録した値を取得してみますが、その前にこのkeyが存在していることを確認します。

確認するために、DockerDesktopを起動し、開きます。開くとウインドウ内の左メニューの「Containers/Apps」をクリックします。クリックすると、以前作成した「test-redis」のコンテナーがありますので、このコンテナーの右側に「START」ボタンがあるので、このボタンをクリックします。

クリックすると、「EXITED(255)」から「RUNNING」と表示が切り替わります。これでコンテナーの稼働が開始されました。

開始後、Windows10のコマンドプロンプトを起動します。

>docker exec -it test-redis bash

起動後、コンテナー上でコマンドを実行するために、上記のコマンドを入力し、Enterキーを押します。このコマンドでコンテナー内に新しい Bash セッションが作成し、コンテナーと対話します。

>root@*****:/data#

Enterキーを押すと、上記のメッセージが出力されます。

>root@*****:/data# redis-cli

出力後続けて上記のコマンドを入力し、Enterキーを押します。これでRedisコマンドライン インタフェースを起動することができます。

127.0.0.1:6379>

Enterキーを押すと、上記のようなメッセージが出力されます。これが表示されれば、redis-cliの起動は完了となります。

127.0.0.1:6379> keys *

完了後、上記のコマンドを入力し、Enterキーを押します。

1) "mykey_test"
2) "myval"

Enterキーを押すと、以前設定したKeyが出力されました。

127.0.0.1:6379> get myval

出力後、上記のコマンドを入力し、Enterキーを押します。今回は「myval」というkeyの値(value)を出力してみます。

"abcd1234"

Enterキーを押すと、「myval」というkeyには、「”abcd1234″」という値(value)が保持されていることが確認できました。

■Pythonを用いてDockerコンテナにインストールしたRedisサーバー上に登録した値を取得する

確認後、Pythonを用いてDockerコンテナにインストールしたRedisサーバー上に登録した値を取得するスクリプトを書いていきます。

■コード

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
sr = redis.Redis(connection_pool=pool)

print(sr.get('myval'))

今回用いた「redis-py」ライブラリは、接続プール(データベース接続のキャッシュであり、キャッシュすることで接続を再利用できるようにしているもの)を使用してRedisサーバーへの接続を管理しているので、poolという変数を定義し、その中で「redis.ConnectionPool(host=’localhost’, port=6379, db=0)」を用いて、独自の接続プールを作成します。作成後、srという変数を定義し、その中でredis.Redis()を用います。括弧内には、引数,パラメータとして、先程作った独自の接続プールを渡します。これで接続プールを使用しRedis サーバーへ接続します。

接続後、get()を用います。括弧内には引数,パラメータとして、先程確認したkeyである「myval」を渡します。これでkey内に保持されている値(value)が返されます。返されたものをprint()で出力させます。

■実行・検証

このスクリプトを「red_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、Pythonでredis-pyを用いて、DockerコンテナにインストールしたRedisサーバー上に登録した値を出力させることができました。

なお、「pool = redis.ConnectionPool(host=’redis’, port=6379, db=0)」という独自の接続プールを作成し、Redis サーバーへ接続を試みると、下記のエラーが出力されます。

Traceback (most recent call last):
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\connection.py", line 559, in connect
    sock = self._connect()
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\connection.py", line 584, in _connect
    for res in socket.getaddrinfo(self.host, self.port, self.socket_type,
  File "C:\Program Files\Python38\lib\socket.py", line 918, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "red_test.py", line 6, in 
    print(sr.get('myval'))
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\client.py", line 1606, in get
    return self.execute_command('GET', name)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\client.py", line 898, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\connection.py", line 1192, in get_connection
    connection.connect()
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\redis\connection.py", line 563, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 11001 connecting to redis:6379. getaddrinfo failed.

コメント

タイトルとURLをコピーしました