LoginSignup
8
1

はじめに

こんにちは、京セラコミュニケーションシステム林(@kccs_koki-hayashi)と申します。 

私が5か月前に業務でぶつかった問題に対する解決策を、備忘録がてら本記事で共有いたします。同様の問題でお困りの方のお役に立てれば幸いです。

実際に困っていたこと 

PythonでRedisへのデータ登録作業を行うにあたって、事前に工数見積もり調査を行う必要がありました。しかし、登録方法を手軽に理解できる記事が見当たらず、私自身未経験の作業だったということもあり、タスクの難易度をはかることができず、困りはてておりました。

この記事の目的

本記事ではかつての私のようにRedisに苦戦しておられる読者の方々に向けて、Redisへのデータ登録の方法をできるだけわかりやすく説明いたします。

本記事を読んでいただければ、 最短5分間でRedisへのデータ登録を理解することが可能です!

それではやっていきましょう!

本記事の対象者

  • macOSの方
  • Pythonについてある程度知識・経験がある方
  • 実際に手を動かしてPythonからRedisへのデータ登録を体験したい方

前提条件

  • pip3がインストールされていること
  • Homebrewがインストールされていること

今回の開発環境
pip 23.2.1
Homebrew 4.1.25
python 3.9.6

ここから、5分でPythonからRedisへのデータ登録が体験できます。

事前準備

ターミナルを開く

ターミナルを3つ開きます。

私はターミナルをVisual Studio Codeで以下のように開きました。
VScode.png 

1つ目のターミナル(ターミナル1)

Pythonライブラリのインストール、ローカルへのRedisインストール、およびPythonの実行に使います。

2つ目のターミナル(ターミナル2)

Redisの起動に使います。

3つ目のターミナル(ターミナル3)

Redisに登録したデータの確認に使います。

Python用のライブラリをインストール

PythonからRedisを使うために、Redis-pyをpip3 installコマンドでインストールします。  

ターミナル1で実行
% pip3 install redis

Redisをローカルにインストール

brew installコマンドでRedisをローカルにインストールします。  

ターミナル1で実行
% brew install redis

Redisを起動

redis-serverコマンドを実行します。

指定されたポート(デフォルトでは6379)でRedis接続の受け付けを行います。  

ターミナル2で実行
% redis-server

以下のような画面が出れば成功です。
redis.png

Redisに接続

今回は下記の情報でRedisに接続します。

名前 備考
ホスト 127.0.0.1 ローカルにRedisをインストールしたため
ポート 6379 デフォルトの設定
DB 1 0から15の間で設定(デフォルトは0)

redis-cli -h[IPアドレス]-p[ポート番号]-n[db番号]に当てはめて接続を行います。

文字化け
中身のデータが文字化けしている場合
-- rawを付け足して確認してみてください。
redis-cli -h[IPアドレス]-p[ポート番号]-n[db番号]--raw

 

ターミナル3で実行
% redis-cli -h 127.0.0.1 -p 6379 -n 1 --raw

Redisの中にデータが入っていないことを確認します。

ターミナル3で実行
127.0.0.1:6379[1]> keys *

empty.png

PythonからRedisへのデータ登録

sample_redis.pyのファイルを作成します。

以下のコードでRedisへのデータ登録を行います。

Redisに接続

redis.Redis(host,port,db)でRedisに接続します。

必要な情報は事前準備の「Redisに接続」に記しています。

sample_redis.py
import redis
# redisに接続する
r = redis.Redis(host='127.0.0.1', port=6379, db=1)

Redisに登録

hmset(key,field)でRedisにデータを登録します。

下記のコードをsample_redis.pyに追加します。

sample_redis.py
input_data = [('りんご', '120円', '青森', '10度'),('オレンジ', '50円', '愛媛', '8度')]

def convert_data(input_data):
    datas = {}
    for r in input_data:
        d = {}
        d["果物"] = r[0]
        d["値段"] = r[1]
        d["生産地"] = r[2]
        d["糖度"] = r[3]
        datas[r[0]] = d
    return datas
    
hash_data = convert_data(input_data)
# hash_dataの中身
# {'りんご': {'果物': 'りんご', '値段': '120円', '生産地': '青森', '糖度': '10度'}, 'オレンジ': {'果物': 'オレンジ', '値段': '50円', '生産地': '愛媛', '糖度': '8度'}}

# データ登録
for k, v in hash_data.items():
    r.hmset(k, v)

sample_redis.py書いたコードを実行します。  

ターミナル1で実行
% python3 sample_redis.py

登録したデータの確認

登録されているキーを確認します。 

ターミナル3で実行
127.0.0.1:6379[1]> keys *
りんご
オレンジ

りんごとオレンジのキーが登録されていることがわかりました。 

次に登録されているキーのうち、りんごのデータをすべて確認します。

ターミナル3で実行
127.0.0.1:6379[1]> hgetall りんご
果物
りんご
値段
120円
生産地
青森
糖度
10度

キー(りんご)に紐づく値をすべて出力できました。
以上で、本記事の目的であるPythonからRedisへのデータ登録を行うことができました。

次に、Redisに登録したデータの消去とRedisの停止を行います。
そのままでも、データは大丈夫だよという方は、Redisの停止のみを行ってください。

Redisからデータを削除

ここでは、特定のキーを指定してデータを削除する方法と、すべてのデータを一括で削除する方法、これら2つを紹介します。

特定のキーを指定したデータ削除

delete(key)でキーを指定してRedisからデータを削除します。

下記のコードをsample_redis.pyに追加します。

sample_redis.py
# データ削除
r.delete('りんご')

sample_redis.pyのコードを実行します。  

ターミナル1で実行
% python3 sample_redis.py

登録されているキーを確認します。  

ターミナル3で実行
127.0.0.1:6379[1]> keys *
オレンジ

りんごのキーが削除されていることが確認できました。

すべてのデータを一括削除

flushdb()で接続時に選択したRedisのdbのデータをすべて削除します。
下記のコードをsample_redis.pyに追加します。

sample_redis.py
# 一括削除
r.flushdb()

sample_redis.pyのコードを実行します。  

ターミナル1で実行
% python3 sample_redis.py

登録されているキーを確認します。  

ターミナル3で実行
127.0.0.1:6379[1]> keys *

登録されているデータがすべて削除されたことが確認できました。

Redisの停止

shutdownでRedisを停止します。  

ターミナル3で実行
127.0.0.1:6379[1]> shutdown
not connected> 

まとめ

今回はPythonを使ったRedisへのデータ登録を体験していただきました。
思ったより簡単だな、と思っていただけたのではないでしょうか。

皆さんは何分で理解できましたか?  
もしよければコメントで教えてください。

終わりに

次回は「5分でわかるGoogle CloudのMemorystore for Redisへのデータ登録」を作成予定です。  

続編もお楽しみに!!

宣伝 

弊社のXでは、Qiita投稿に関する情報や各種セミナー情報をお届けしております! 

情報収集や学びの場を求める方々にぜひフォローしていただき、最新情報を手に入れてください!

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1