RustでRedisに構造体のデータを格納する

2024年3月5日火曜日

Rust

t f B! P L

この記事では、Rustプログラミング言語を使用して、Redisデータベースに構造体を保存し、後で取得する方法について解説します。

スポンサーリンク

Rustの構造体をRedisへ保存する方法は?

Rustの構造体をRedisに保存する最も一般的な方法は、構造体をJSON形式の文字列にシリアライズ(変換)し、その文字列をRedisに保存することです。この方法を使用すると、構造体のデータを変更せずにRedisで直接保存・取得できます。さらに、serdeserde_jsonクレートを使用することで、Rustの構造体とJSONデータの間でシームレスに変換できます。

RedisとSerdeのクレートを設定

まず、プロジェクトでRedisを扱うために必要なクレートをCargo.tomlファイルに追加します。以下の依存関係をファイルに追加してください。

Cargo.tomlファイルにredisserdeserde_jsonクレートを追加して、プロジェクトで利用できるようにします。

[dependencies]
redis = "0.24.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

構造体をJSONに変換しRedisへ保存する

Rustの構造体をJSONに変換してRedisに保存するには、以下の手順に従います。

  1. Redisに保存したい構造体を定義します。
  2. 構造体のインスタンスを作成し、serde_json::to_string()関数を使用してJSON文字列に変換します。
  3. Redisサーバーに接続し、変換したJSON文字列をRedisに保存します。

以下のサンプルコードは、上記の手順を実装したものです。

// 必要なクレートをインポート
use redis::Commands;
use serde::{Serialize, Deserialize};

fn json_write_sample() -> redis::RedisResult<()> {

    // User構造体を作成
    let user: User = User { 
        id: 1, 
        name: String::from("山田 太郎"),
        address: Address { 
            post_code: String::from("123-1234"), 
            address: String::from("東京都")
        }
    };
    // JSON文字列に変換
    let json_str: String = serde_json::to_string(&user).unwrap();
    
    // Redisサーバーに接続
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_connection()?;

    // Redisにキー「users」でハッシュ型として追加
    con.hset("users", user.id, json_str)?;
    
    Ok(())
}

この関数は、User構造体をJSON文字列に変換し、Redisにキー「users」でハッシュ型として保存します。

JSONでRedisへ保存した構造体を復元する

保存されたJSON文字列を構造体に復元するプロセスも、シンプルです。まず、Redisから該当するキーでJSON文字列を取得します。次に、このJSON文字列をserde_jsonを使用して元の構造体にデシリアライズします。

{解説文を記載}


fn json_read_sample() -> redis::RedisResult<()> {

    // Redisサーバーに接続
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_connection()?;

    // Redisの「users」ハッシュからJSONを取得
    let json: Option<String> = con.hget("users", 1)?;
    
    //JSON文字列を構造体に復元
    let user: User = serde_json::from_str(&json.unwrap()).unwrap();
    println!("{:?}", user);
    
    Ok(())
}

まとめ

今回紹介した方法を用いることで、Rustの構造体を効率的にRedisに保存し、必要に応じて簡単に取り出すことができます

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ