当前位置: 首页 > 工具软件 > Mod_redis > 使用案例 >

java按密码连接redis_RUST actix-web连接有密码的Redis数据库

叶坚
2023-12-01

RUST actix-web连接有密码的Redis数据库

actix-web的example里面,使用了自己的actix-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, name: &str) -> Option {

let mut r = redis.get().await.unwrap();

let v = cmd("GET").arg(&[name]).query_async::(&mut r).await;

match v{

Ok(s)=>{ Some(s)}

Err(_e)=>{None}

}

}

pub async fn set_str(redis: &web::Data, 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,

) -> Result {

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工具

 类似资料: