見出し画像

Redis_Pythonでデータを保存したり抽出したり_StrictRedis #350

本日から「#○○日目」という表記から「日目」を削除することにしました。
毎日更新がやり切れていないのと、業務でプログラミングには触れているので、実態とズレてきた感じがしているためです。

一応、どこまで続けるかというゴールは初めから自分の中で設定していますが、一流のエンジニアを目指して引き続き頑張っていきたいと思います。


さて、本日はRedisです。
この1-2週間、業務で初めて本格的に触ることができたのでやり方を少しメモしておきたいと思います。

DB自体はすでに設定されたものがあったため、そこにどうやってデータを保存するか、そこにあるデータをどうやって抽出するか、というコードが中心になります。

Redisとは?

RedisはインメモリのキーバリューデータストアDBです。インメモリとは、Redisがデータを主にメモリ(RAM)に格納することを指して呼ばれています。ディスク(HDD/SSD)への格納と対比で、以下のメリットデメリットがあります。

ディスクではなくメモリに保存するメリット
メモリはデータやプログラムを一時的に格納するためのデバイスで、非常に高速なデータの読み書きが可能です。速度が求められるアプリケーションで重宝されます。

ディスクではなくメモリに保存するデメリット
ディスクの方が容量が大きく、大量のデータを保存できます。また、メモリは一時的なストレージであるため、電源を切る(サーバーを再起動する)と全てのデータが失われます。ただしRedisはデータをディスクに書き込むための持続化オプションを提供しているため、再起動してもデータを保持できます。

キーバリューとはデータの持ち方で、RedisではPythonの辞書のようにキーバリュー形式でデータを保持します。加えてキーより上の階層で、キーバリューの集合を「ハッシュ」というデータ型で表現することも可能です。


StrictRedisとは?

PythonのRedisクライアントライブラリの1つで、Redisサーバーと通信するための簡単な方法を提供してくれます。StrictRedisではキーの設定、取得、削除など、Redis機能のほとんどをサポートしており、かつRedisサーバーとの通信を非同期に行うこともできます。

redisライブラリをインポートして、Redisの設定情報を引数に渡すことで接続を確立できます。hsetはRedisにハッシュ、キー、バリューの形式でデータを保存するコマンドです。

import redis

with redis.StrictRedis(host='telescope_redis', port=6379, db=10) as conn:
    conn.hset('hash01', 'key01', 'value01')
    conn.hset('hash01', 'key02', 'value02')
    conn.hset('hash01', 'key03', 'value03')

保存した内容を確認してみます。
hgetall()はハッシュを指定してその内容を全て取得できます。

import redis

with redis.StrictRedis(host='telescope_redis', port=6379, db=10) as conn:
    conn.hset('hash01', 'key01', 'value01')
    conn.hset('hash01', 'key02', 'value02')
    conn.hset('hash01', 'key03', 'value03')

    print(conn.hgetall('hash01'))


>>>
{b'key01': b'value01', b'key02': b'value02', b'key03': b'value03'} 

バリューを直接取得したい場合はキーを指定します。キーがencodeされて保存されているので、指定する際にencodeする必要があります。

conn.hgetall('hash02')['key01'.encode()]

 
>>>
b'value01'

bが何なのか知るためにtypeで型を見てみます。bytes型ということでした。

type(conn.hgetall('hash02')['key01'.encode()])
 
 
>>>
<class 'bytes'>

bが付いている状態だと文字化けしてしまうので、decode()してみます。

conn.hgetall('hash02')['key01'.encode()].decode()

>>>
value01

型はstrになりました。

type(conn.hgetall('hash02')['key01'.encode()].decode())

 
>>>
<class 'str'>


hget()はハッシュとキーを指定してバリューを取得できます。

import redis

with redis.StrictRedis(host='telescope_redis', port=6379, db=10) as conn:
    conn.hset('hash01', 'key01', 'value01')
    conn.hset('hash01', 'key02', 'value02')
    conn.hset('hash01', 'key03', 'value03')

    print(conn.hget('hash01', 'key01'))


>>>
b'value01'

bが付いている状態だと文字化けしてしまうので、decode()してみます。

conn.hget('hash01', 'key01').decode()
 

>>>
value01

strで抽出できました。


ここまでお読みいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?