Rust + redis 初級編 #Rust #redis
■ 概要:
前のRustの関連となり。
redisで、RDBより高速 noSQLらしいので。お試し編となります。
■ 環境
Rust
rustc 1.46.0
cargo 1.46.0
redis
ubuntu 18.04
■ Cargo.toml
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
[dependencies.redis]
version = "*"
■ 接続、書き込み, main.rs
https://gist.github.com/kuc-arc-f/8274c1b3fb12dd4793d4991a62eb7307
extern crate redis;
use std::env;
use std::fs::File;
use std::io::prelude::*;
use redis::{Commands};
use serde::{Deserialize, Serialize};
//
pub fn get_content(filename: String ) -> String{
// println!("In file {}", filename);
let mut f = File::open(filename).expect("file not found");
let mut contents = String::new();
f.read_to_string(&mut contents)
.expect("something went wrong reading the file");
// println!("With text:\n{}", contents);
return contents;
}
//
#[derive(Serialize, Deserialize , Debug)]
struct TaskItem {
id: i64,
title: String,
content: String,
}
//
fn test2(items: Vec<TaskItem>) -> redis::RedisResult<()>{
let client = redis::Client::open("redis://localhost/").expect("url error");
let mut connection = client.get_connection().expect("connect error");
let key3 = "list_3";
for row in &items {
let s_title = &row.title;
let s_content = &row.content;
let serialized = serde_json::to_string(&row ).unwrap();
// println!( "{}", &s_title );
let result2: u8 = connection.rpush(key3, &serialized ).unwrap();
}
Ok(())
}
//
fn main() {
println!("#start");
let fname = "/home/naka/work/node/express/app7/public/tasks.json";
let json = get_content( fname.to_string() );
let deserialized: Vec<TaskItem> = serde_json::from_str(&json).unwrap();
let r =test2(deserialized);
}
・処理は、
jsonファイルを、読み込み Vec変換
・Vecをシリアライズ、List型に rpush で追加
・取得する場合、jsonデコードし、列を取り出す方法
■ 速度は、
速度は、1,000件登録で、340msec 程でした。速いですね
■ 追記
・update : 2020/10/04, List 型 固定データの、登録を追記しました。
https://gist.github.com/kuc-arc-f/89daf8207ed82a87258cf7b02d988bd2
extern crate redis;
use redis::{Commands};
//
fn test1() -> redis::RedisResult<()>{
let client = redis::Client::open("redis://localhost/").expect("url error");
let mut connection = client.get_connection().expect("connect error");
let result2: u8 = connection.lpush("myList", vec!["v1", "v2", "v3", "v4"]).unwrap();
Ok(())
}
//
fn main() {
println!("#start ");
let r =test1();
}
ここから先は
0字
Rust WebAssembly 開発の事例、ノウハウに関する記事を集めました。第2回 ■ 免責事項 / 注記 , 内容について動作確…
この記事が気に入ったらチップで応援してみませんか?