2016-08-10 3 views
0

は私がへRustのRedisで構造体を格納/フェッチする方法は? ( - あるいはされていないものの一つであるかもしれないさらに別のネストされた構造体) - <strong>をして<a href="https://github.com/mitsuhiko/redis-rs" rel="nofollow">Redis</a></strong>に保存

  1. がprogramically設定値を持つ構造体をインスタンス化する方法を把握しようとしています。
  2. 私は2つの特徴ToRedisArgsFromRedisValueはここで実装されることになるが、それでも私の非常にシンプルな2つの構造体のために、私はIMPLへの書き込みを何見当もつかないことを承知していますバックのRedis

から構造体にそれをフェッチ彼らは錆の中にいます。彼らは私の周りを閲覧しながら、私は別の訪問者、彼らの閲覧行動(所要時間、ページがなどを訪問し、他の相互作用)およびその他の統計情報を保存する必要が

extern crate redis; 
use redis::Commands; 

// fn fetch_an_integer() -> redis::RedisResult<isize> { 
//  // connect to redis 
//  let client = try!(redis::Client::open("redis://127.0.0.1/")); 
//  let con = try!(client.get_connection()); 
//  // throw away the result, just make sure it does not fail 
//  let _ :() = try!(con.set("my_key", 42)); 
//  // read back the key and return it. Because the return value 
//  // from the function is a result for integer this will automatically 
//  // convert into one. 
//  con.get("my_key") 
// } 

fn fetch_a_struct() -> redis::RedisResult<MyStruct> { 
    // connect to redis 
    let client = try!(redis::Client::open("redis://127.0.0.1/")); 
    let con = try!(client.get_connection()); 
    // throw away the result, just make sure it does not fail 

    let another_struct = AnotherStruct{x: "another_struct".to_string()}; 
    let mut my_vec: Vec<AnotherStruct> = Vec::new(); 
    my_vec.push(another_struct); 
    let my_struct = MyStruct{x: "my_struct".to_string(), y: 1, z: my_vec}; 

    let _ :() = try!(con.set("my_key_struct", my_struct)); 

    con.get("my_key_struct") 
} 

fn main() { 
    match fetch_a_struct() { 
     Err(err) => { 
      println!("{}", err) 
     }, 
     Ok(x) => { 
      println!("{}", x.x) 
     } 
    } 

} 

struct MyStruct { 
    x: String, 
    y: i64, 
    z: Vec<AnotherStruct>, 
} 

struct AnotherStruct { 
    x: String 
} 

Playground

:私は簡単な例を作りましたそのため私はoutprocセッションストアとして、MongoDBの代わりにRedisを使用することを考えていました。

MongoDBでは、私はユーザコレクション、インタラクションコレクションなどを持っていましたが、Redisのそれと同等の方法はありますか?

RedisとRustの両方で完全な初心者であることは、少なくともこのようなことを達成するためのいくつかのアイデアを得るために私を助けてくれることを願っています。

+0

「Rust *を使用してRedis *にデータを保存するにはどうすればよいですか」に加えて、「このタイプのデータ*をRedisに保存するにはどうすればよいですか? MongoDB、Redis、および伝統的なリレーショナルデータベースはすべて異なる強みを持ち、必ずしも相互に代わるものではありません。私は "このタイプのデータを保存するにはどうすればいいですか"というのは、スタックオーバーフローのための**広すぎる**だから、私はあなたの質問からそれを削除することをお勧めしたいと思います。 – Shepmaster

答えて

0

Serialize your data to a JSON stringを文字列として保存し、必要に応じて逆シリアル化します。

+0

訪問者のセッション状態データをリアルタイムで保存するために、mongodbにredisを使用するという全体の点がスピードアップしているので、これはうまく機能しないのではないかと恐れています。私はちょっと、sitecoreの共有セッションやプライベートセッションの仕組みと同様のものを構築しています。そこでは、ユーザーの動作に関するデータを収集し、セッションが終了するとこのデータをデータベースに転送します。だから、多くの読書や更新がセッションデータに起こります。それがjson文字列のシリアル化がオプションではない理由です。とにかくあなたの答えに感謝します。 :-) – Dac0d3r

関連する問題