RUSTactixweb连接有密码的Redis数据库

替换成另一连接池,deadpool-redis
使用到的库
库 版本 
deadpool-redis
0.5.2
redis
0.15.1
actix-web
2
actix-rt
1
dotenv
0.15.0
设置环境变量
REDIS_URL=redis://:password@localhost可以将此链接写入与之形目录同级的.env文件中,password替换成自己的密码,localhost替换成自己的链接地址.
dotenv库加载环境变量
#[actix_rt::main]async fn main() -> std::io::Result<()> {
    dotenv().ok(); //加载.env文件
}
如若不使用!!! dotenv可以手动在代码中设置环境变量
#[actix_rt::main]async fn main() -> std::io::Result<()> {
    std::env::set_var("REDIS_URL", "redis://:password@localhost");
}
配置链接池,并且加载进actix-web
 HttpServer::new(|| {        //初始化Redis线程池
        let cfg = Config::from_env("REDIS").unwrap();
        let pool = cfg.create_pool().unwrap();
        App::new()
            .data(pool)
            .configure(handler::main_config)
    })
    .bind("127.0.0.1:8088")?
    .run()
    .await
创建两个方法,一个读一个写,方便我们之后操作redis数据库
简化redis操作代码,如果之后操作库代码有变化,我们可以只修改这部分代码,对整体不会有影响,并且减少写代码的重复劳动.
use actix_web::web;use deadpool_redis::{cmd,  Pool};
use serde::{Deserialize,Serialize};
pub async fn get_str(redis: &web::Data<Pool>, name: &str) -> Option<String> {
    let mut r = redis.get().await.unwrap();
    let v = cmd("GET").arg(&[name]).query_async::<String>(&mut r).await;
    match v{
        Ok(s)=>{ Some(s)}
        Err(_e)=>{None}
    }
}
pub async fn set_str(redis: &web::Data<Pool>, name: &str, value: &str) {
    let mut r = redis.get().await.unwrap();
    cmd("SET").arg(&[name, value]).execute_async(&mut r).await.unwrap();
}
#[derive(Deserialize,Serialize)]
pub struct Success{
    code:i32,
    msg:String,
}
//制作一个返回,code这个参数虽然推荐使用http code,但是有些前端还是更喜欢从返回值里面取
//,所以就只能照顾一下
pub fn msg_response(code:i32,msg:&str)->Success{
    Success{
        code:code,
        msg:String::from(msg)
    }
}
在handler里面调用
async fn test_handler(    redis: web::Data<R_Pool>,
) -> Result<HttpResponse> {
    set_str(&redis,"name","value").await;
    match get_str(&redis,"name").await{
        Ok(result:String)=>{
            Ok(HttpResponse::Ok().json(msg_response(200,format!{"{}",result}).as_str()))
        }
        Erro(e:Erro)=>{
            Ok(HttpResponse::Ok().json(msg_response(200,format!{"{}",e}).as_str()))
        }
    }
}
具体在哪里配置handler这里就不再写出,详尽教程地址:actix-web
让项目更美观
通常我会把util存到其他地方,handler配置也远离初次配置app的地方
目录树├─.github
│  └─workflows
├─doc //存放文档
├─main.rs //入口文件
├─src
│  ├─handler
│  │  ├─mod.rs//统一配置handler的地方
│  │  ├─mobile.rs//分割handler
│  │  └─universal.rs
│  └─util
|  	  ├─db_util.rs //数据库工具
|	  ├─redis_util.rs//redis工具
|	  └─http_util.rs//http工具
以上是 RUSTactixweb连接有密码的Redis数据库 的全部内容, 来源链接: utcz.com/z/513495.html

