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.
コメント