我試圖找出如何如何在Rust中使用Redis存儲/獲取結構?
- programically實例化設定值的結構(其中之一可能是又一個嵌套的結構 - 或者不能) - 並將其保存在Redis。
- 把它抓回來到一個結構從Redis的
我知道的是,2個性狀ToRedisArgs
和FromRedisValue
要在這裏實現,但即使是我最簡單的2個結構我不知道該怎麼寫IMPL他們在Rust。我做了一個簡單的例子:
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
}
我需要保存不同的觀衆,他們的瀏覽行爲(持續時間,頁面訪問和其他交互等)和其他統計資料,而他們四處瀏覽我的網站 - 這就是爲什麼我在考慮使用Redis而不是MongoDB作爲我的outproc會話存儲。
在MongoDB中,我有一個用戶集合,交互集合等......但Redis中的等效方法是什麼?
作爲Redis和Rust的一名完全新手,我希望您至少能夠幫助我瞭解一些如何實現這樣的想法。
除了「如何使用Rust *將數據存儲在Redis中」之外,您似乎確實在問「如何在Redis中存儲*此類數據*」。 MongoDB,Redis和傳統的關係數據庫都有不同的優勢,它們不一定是相互替代的。我會說「我如何存儲這種類型的數據」對於Stack Overflow來說太寬泛**,所以我建議你從你的問題中刪除它。 – Shepmaster