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回 ■ 免責事項 / 注記 , 内容について動作確…

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