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

RUST actix-web连接有密码的Redis数据库的更多相关文章

  1. devilbox(三):在docker中启动带密码的redis数据库

    背景概述: 之前是使用docker搭建了一套集成的开发环境devilbox,也说了这个环境可以自定义.其实搭建这个环境一是为了练习docker使用,二是搭建我们测试环境,主要用到各种数据库,然而安装教 ...

  2. C++使用hiredis连接带密码的redis服务

    c = redisConnect((char*)redis_host, redis_port); if (c->err) { /* Error flags, 0 when there is no ...

  3. ServiceStack.Redis 连接有密码的Redis问题解决

    在ip:port前面加上@用来表示密码,比如password@ip:port <add key="RedisServer" value="123456@127.0. ...

  4. 连接带密码的access数据库

    在网上找了很多都不靠谱,稀里哗啦的弄一堆连接字符串,很不优雅. 这个方法很简单: 1.在“连接”这页中,下方有“输入登录数据库的信息”用户名:admin,并在下面选择“空白密码” 2.在“所有”这页的 ...

  5. Rust语言Actix-web框架连接Redis数据库

    Rust语言Actix-web框架连接Redis数据库 actix-web2.0终于发布了,不再是测试版本,基于actor系统再加上异步支持,使得actix-web成为了目前响应速度最快的服务器框架, ...

  6. 【Redis数据库】命令学习笔记——发布订阅、事务、脚本、连接等命令汇总

    本篇基于redis 4.0.11版本,学习发布订阅.事务.脚本.连接的相关命令. Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 序号 ...

  7. Web框架之Django-20-基于mysql数据库的连接

    Web框架之Django-20-基于mysql数据库的连接   想要连接mysql首先需要安装pymysql这个驱动     然后在app的init文件中引入驱动 import pymysql pym ...

  8. [经验] SpringBoot 远程连接 Linux 上的 Redis

    开发环境: ---------- springboot 2.X ---------- Linux Ubuntu 18.0.04 关于怎么在 Ubuntu 上安装 Linux , 网上的教程一大堆, 这 ...

  9. scrapy 如何链接有密码的redis scrapy-redis 设置redis 密码 scrapy-redis如何为redis配置密码

    # 使用scrapy_redis的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 使用scrapy_redis的去重机制DUP ...

随机推荐

  1. Vue+Vant+Vuex实现本地购物车功能

    通常,我们做移动端商城的时候,通常会有购物车模块,那购物车模块有两种实现方式,一是储存在后台通过接口获取到购物车信息,二是存在用户手机本地,第一种方法只要调用接口获取比较简单,这里介绍的是第二种方法, ...

  2. (一)Django项目架构介绍

    项目的架构为: 1.虚拟环境virtualenv 安装Django==2.1.3 安装pymysql 安装mysqlclient 安装其他等 2.项目结构为: 应用APP: blog -- 管理博客 ...

  3. NetCore 启动地址配置详解

    背景 程序在发布部署时候,设置环境ASPNETCORE_URLS不生效,也没在代码里使用UseUrls("xxxx"),启动一直是http://localhost:5000.最后测 ...

  4. Keil uVision4的简单使用

    1. 项目创建 打开安装好的Keil uVision4可以看到如下界面 选择New uVision Project来创建一个新项目 选择项目存放的位置并为项目文件命名 选择要进行模拟仿真的设备(此处以 ...

  5. HashMap 源码赏析 JDK8

    一.简介 HashMap源码看过无数遍了,但是总是忘,好记性不如烂笔头. 本文HashMap源码基于JDK8. 文章将全面介绍HashMap的源码及HashMap存在的诸多问题. 开局一张图,先来看看 ...

  6. No property andp found for type String! Traversed path: CmsPage.siteId.

    Respository没有找到该参数 1)由该参数,函数名写错,不符合JPA规范 2)实体类没有该参数

  7. 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇

    前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...

  8. C++ 链式继承下的虚函数列表

    目录 1.虚函数列表的位置 2.虚函数列表的内容 3.链式继承中虚函数列表的内容   注: 虚函数列表 又称为虚表, vtbl , 指向它的指针称为vptr, vs2019中称为__vfptr 操作系 ...

  9. python3复习

    一.基础11.运行python代码cmd->python 文件路径/文件名称2.解释器针对linux/uinux系统3.注释单行注释    #多行注释    三个单引号或三个双引号4.变量法律规 ...

  10. selenium之窗口滚动

    在这里和大家分享一下,selenium里面常用于处理窗口滚动的方法. location_once_scrolled_into_view 一般用于定位窗口底部元素.将窗口拉到最底部. window.sc ...