5分でわかるPythonからRedisへのデータ登録

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

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

## 実際に困っていたこと　

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

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

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

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

# 本記事の対象者
- macOSの方
- Pythonについてある程度知識・経験がある方
- 実際に手を動かしてPythonからRedisへのデータ登録を体験したい方

# 前提条件
- pip3がインストールされていること
- Homebrewがインストールされていること

:::note info
**今回の開発環境**
pip 23.2.1
Homebrew 4.1.25
python 3.9.6
:::

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

# 事前準備

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

私はターミナルをVisual Studio Codeで以下のように開きました。
![VScode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119199/2c29da98-fc43-1db1-df02-e47c6186cdea.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119199/686adf4e-6cd9-23bd-d2bb-db239c7622c2.png)

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

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


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

:::note warn
**文字化け**
中身のデータが文字化けしている場合
-- 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119199/c5a12089-fcc7-5183-ed43-22cb69211310.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投稿に関する情報や各種セミナー情報をお届けしております！　

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

https://x.com/kccs_digital