mirror of
https://github.com/actix/examples
synced 2024-11-23 22:41:07 +01:00
update redis example to v0.22
This commit is contained in:
parent
99d0afde28
commit
fa323545e9
205
Cargo.lock
generated
205
Cargo.lock
generated
@ -29,30 +29,6 @@ dependencies = [
|
||||
"ureq",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3720d0064a0ce5c0de7bd93bdb0a6caebab2a9b5668746145d7b3b0c5da02914"
|
||||
dependencies = [
|
||||
"actix-rt",
|
||||
"actix_derive",
|
||||
"bitflags",
|
||||
"bytes 1.2.1",
|
||||
"crossbeam-channel",
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
"futures-util",
|
||||
"log",
|
||||
"once_cell",
|
||||
"parking_lot 0.11.2",
|
||||
"pin-project-lite 0.2.9",
|
||||
"smallvec",
|
||||
"tokio 1.21.0",
|
||||
"tokio-util 0.6.10",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix"
|
||||
version = "0.13.0"
|
||||
@ -83,7 +59,7 @@ version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e089b5c4d0cf02d72a9eca0b6c80aebff1ccd3d1e99c83d1f7b9baeff39dc5e9"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"ahash 0.7.6",
|
||||
"log",
|
||||
]
|
||||
@ -272,48 +248,22 @@ dependencies = [
|
||||
"prost",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-redis"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8e10d7a6b71f5bfbc47ccbff55d89387e15087fd9583bdfdc47e9f0c1d2a9a8"
|
||||
dependencies = [
|
||||
"actix 0.12.0",
|
||||
"actix-rt",
|
||||
"actix-service",
|
||||
"actix-session 0.5.0",
|
||||
"actix-tls",
|
||||
"actix-web",
|
||||
"backoff 0.2.1",
|
||||
"derive_more",
|
||||
"futures-core",
|
||||
"log",
|
||||
"rand 0.8.5",
|
||||
"redis 0.19.0",
|
||||
"redis-async 0.8.1",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"time 0.3.14",
|
||||
"tokio 1.21.0",
|
||||
"tokio-util 0.6.10",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-redis"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38446dc11c743f4f0023b1067c7cfb8f2548f24418e31a193b324e35fa059279"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-rt",
|
||||
"actix-service",
|
||||
"actix-tls",
|
||||
"actix-web",
|
||||
"backoff 0.4.0",
|
||||
"backoff",
|
||||
"derive_more",
|
||||
"futures-core",
|
||||
"log",
|
||||
"redis-async 0.13.0",
|
||||
"redis-async",
|
||||
"time 0.3.14",
|
||||
"tokio 1.21.0",
|
||||
"tokio-util 0.7.4",
|
||||
@ -373,31 +323,14 @@ dependencies = [
|
||||
"pin-project-lite 0.2.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-session"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53b253be4da7f0a778831d0c8b0c2de4ce8ea30f3b1d14d11843a296e53d21db"
|
||||
dependencies = [
|
||||
"actix-service",
|
||||
"actix-utils",
|
||||
"actix-web",
|
||||
"derive_more",
|
||||
"futures-util",
|
||||
"log",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"time 0.3.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-session"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d324d2a6e670f8746ae64f333c2c0fe856bdf624bcb72fb56e250e62a7e9a85f"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix-redis 0.12.0",
|
||||
"actix",
|
||||
"actix-redis",
|
||||
"actix-service",
|
||||
"actix-utils",
|
||||
"actix-web",
|
||||
@ -512,7 +445,7 @@ version = "4.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "31efe7896f3933ce03dd4710be560254272334bb321a18fd8ff62b1a557d9d19"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-codec",
|
||||
"actix-http",
|
||||
"actix-web",
|
||||
@ -659,20 +592,6 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix_redis"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.12.0",
|
||||
"actix-redis 0.10.0",
|
||||
"actix-web",
|
||||
"env_logger 0.9.0",
|
||||
"futures-util",
|
||||
"log",
|
||||
"redis-async 0.8.1",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
@ -926,7 +845,7 @@ version = "4.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "61249530b25e497aa9023f76afa13ecbdd0078be2504ea4f4748871ca789bd31"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-http",
|
||||
"actix-web",
|
||||
"actix-web-actors",
|
||||
@ -943,7 +862,7 @@ dependencies = [
|
||||
name = "async-graphql-demo"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-cors",
|
||||
"actix-web",
|
||||
"actix-web-lab 0.17.0",
|
||||
@ -1441,16 +1360,6 @@ dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backoff"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "721c249ab59cbc483ad4294c9ee2671835c1e43e9ffc277e6b4ecfef733cfdc5"
|
||||
dependencies = [
|
||||
"instant",
|
||||
"rand 0.7.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backoff"
|
||||
version = "0.4.0"
|
||||
@ -1479,7 +1388,7 @@ name = "basics"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix-files",
|
||||
"actix-session 0.7.1",
|
||||
"actix-session",
|
||||
"actix-web",
|
||||
"async-stream",
|
||||
"env_logger 0.9.0",
|
||||
@ -2002,7 +1911,7 @@ dependencies = [
|
||||
name = "cookie-session"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix-session 0.7.1",
|
||||
"actix-session",
|
||||
"actix-web",
|
||||
"env_logger 0.9.0",
|
||||
"log",
|
||||
@ -2194,6 +2103,18 @@ version = "2.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
|
||||
|
||||
[[package]]
|
||||
name = "db-redis"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix-web",
|
||||
"env_logger 0.9.0",
|
||||
"futures-util",
|
||||
"log",
|
||||
"redis 0.22.0",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deadpool"
|
||||
version = "0.9.5"
|
||||
@ -2396,12 +2317,6 @@ dependencies = [
|
||||
"dirs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dtoa"
|
||||
version = "0.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
|
||||
|
||||
[[package]]
|
||||
name = "dtoa"
|
||||
version = "1.0.3"
|
||||
@ -2778,6 +2693,7 @@ checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-executor",
|
||||
"futures-io",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
@ -2868,6 +2784,7 @@ version = "0.3.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-macro",
|
||||
@ -4943,28 +4860,6 @@ dependencies = [
|
||||
"rand_core 0.5.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redis"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a6ddfecac9391fed21cce10e83c65fa4abafd77df05c98b1c647c65374ce9b3"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"bytes 1.2.1",
|
||||
"combine 4.6.6",
|
||||
"dtoa 0.4.8",
|
||||
"futures-util",
|
||||
"itoa 0.4.8",
|
||||
"native-tls",
|
||||
"percent-encoding",
|
||||
"pin-project-lite 0.2.9",
|
||||
"sha1 0.6.1",
|
||||
"tokio 1.21.0",
|
||||
"tokio-native-tls",
|
||||
"tokio-util 0.6.10",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redis"
|
||||
version = "0.21.6"
|
||||
@ -4985,18 +4880,24 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redis-async"
|
||||
version = "0.8.1"
|
||||
name = "redis"
|
||||
version = "0.22.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8f5a920ab6d700f442cadd6006a2a43f7ec0a5223065f3eaa517fc3fca6d2b3"
|
||||
checksum = "2e5450e9add55de0ea728a964191669d3707fa20666c5f16753f3a6a51e96231"
|
||||
dependencies = [
|
||||
"arc-swap",
|
||||
"async-trait",
|
||||
"bytes 1.2.1",
|
||||
"futures-channel",
|
||||
"futures-sink",
|
||||
"combine 4.6.6",
|
||||
"futures",
|
||||
"futures-util",
|
||||
"log",
|
||||
"itoa 1.0.3",
|
||||
"percent-encoding",
|
||||
"pin-project-lite 0.2.9",
|
||||
"ryu",
|
||||
"tokio 1.21.0",
|
||||
"tokio-util 0.6.10",
|
||||
"tokio-util 0.7.4",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -5018,7 +4919,7 @@ dependencies = [
|
||||
name = "redis-session-example"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix-session 0.7.1",
|
||||
"actix-session",
|
||||
"actix-test",
|
||||
"actix-web",
|
||||
"env_logger 0.9.0",
|
||||
@ -6464,7 +6365,7 @@ name = "todo"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix-files",
|
||||
"actix-session 0.7.1",
|
||||
"actix-session",
|
||||
"actix-web",
|
||||
"actix-web-lab 0.17.0",
|
||||
"dotenv",
|
||||
@ -6649,20 +6550,6 @@ dependencies = [
|
||||
"tokio 0.2.25",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.6.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
|
||||
dependencies = [
|
||||
"bytes 1.2.1",
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"log",
|
||||
"pin-project-lite 0.2.9",
|
||||
"tokio 1.21.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.7.4"
|
||||
@ -7355,7 +7242,7 @@ dependencies = [
|
||||
name = "websocket"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-codec",
|
||||
"actix-files",
|
||||
"actix-rt",
|
||||
@ -7373,7 +7260,7 @@ dependencies = [
|
||||
name = "websocket-autobahn"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-web",
|
||||
"actix-web-actors",
|
||||
"env_logger 0.9.0",
|
||||
@ -7400,7 +7287,7 @@ dependencies = [
|
||||
name = "websocket-chat-broker"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-broker",
|
||||
"actix-files",
|
||||
"actix-web",
|
||||
@ -7428,7 +7315,7 @@ dependencies = [
|
||||
name = "websocket-example"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-files",
|
||||
"actix-web",
|
||||
"actix-web-actors",
|
||||
@ -7443,7 +7330,7 @@ dependencies = [
|
||||
name = "websocket-tcp-example"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"actix 0.13.0",
|
||||
"actix",
|
||||
"actix-codec",
|
||||
"actix-files",
|
||||
"actix-web",
|
||||
@ -7685,7 +7572,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8dfe1ef3558dde14b4be5387bdd41e3bd45746570743521470ec3e9cd0826679"
|
||||
dependencies = [
|
||||
"buf-min",
|
||||
"dtoa 1.0.3",
|
||||
"dtoa",
|
||||
"itoa 1.0.3",
|
||||
"prettyplease",
|
||||
"ryu",
|
||||
|
@ -1,15 +1,13 @@
|
||||
[package]
|
||||
name = "actix_redis"
|
||||
name = "db-redis"
|
||||
version = "1.0.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
actix = "0.12"
|
||||
actix-redis = "0.10"
|
||||
actix-web = "4"
|
||||
|
||||
env_logger = "0.9"
|
||||
futures-util = { version = "0.3.17", default-features = false, features = ["std"] }
|
||||
log = "0.4"
|
||||
redis-async = { version = "0.8", default_features = false, features = ["tokio10"] }
|
||||
redis = { version = "0.22", default-features = false, features = ["tokio-comp", "connection-manager"] }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
|
@ -1,8 +1,6 @@
|
||||
use actix::prelude::*;
|
||||
use actix_redis::{Command, RedisActor};
|
||||
use actix_web::{error, middleware, web, App, HttpResponse, HttpServer};
|
||||
use futures_util::future::try_join_all;
|
||||
use redis_async::{resp::RespValue, resp_array};
|
||||
use std::io;
|
||||
|
||||
use actix_web::{error, middleware, web, App, HttpResponse, HttpServer, Responder};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
@ -13,74 +11,62 @@ pub struct CacheInfo {
|
||||
}
|
||||
|
||||
async fn cache_stuff(
|
||||
info: web::Json<CacheInfo>,
|
||||
redis: web::Data<Addr<RedisActor>>,
|
||||
) -> actix_web::Result<HttpResponse> {
|
||||
let info = info.into_inner();
|
||||
|
||||
let one = redis.send(Command(resp_array!["SET", "mydomain:one", info.one]));
|
||||
let two = redis.send(Command(resp_array!["SET", "mydomain:two", info.two]));
|
||||
let three = redis.send(Command(resp_array!["SET", "mydomain:three", info.three]));
|
||||
|
||||
// Asynchronously collects the results of the futures given. The returned future will drive
|
||||
// execution for all of its underlying futures, collecting the results into a destination
|
||||
// `Vec<RespValue>` in the same order as they were provided. If any future returns an error then
|
||||
// all other futures will be canceled and an error will be returned immediately. If all futures
|
||||
// complete successfully, however, then the returned future will succeed with a `Vec` of all the
|
||||
// successful results.
|
||||
let res = try_join_all([one, two, three])
|
||||
web::Json(info): web::Json<CacheInfo>,
|
||||
redis: web::Data<redis::Client>,
|
||||
) -> actix_web::Result<impl Responder> {
|
||||
let mut conn = redis
|
||||
.get_tokio_connection_manager()
|
||||
.await
|
||||
.map_err(error::ErrorInternalServerError)?
|
||||
.into_iter()
|
||||
.map(|item| item.map_err(error::ErrorInternalServerError))
|
||||
.collect::<Result<Vec<_>, _>>()?;
|
||||
.map_err(error::ErrorInternalServerError)?;
|
||||
|
||||
// successful operations return "OK", so confirm that all returned as so
|
||||
if res
|
||||
.iter()
|
||||
.all(|res| matches!(res, RespValue::SimpleString(x) if x == "OK"))
|
||||
{
|
||||
let res = redis::Cmd::set_multiple(&[
|
||||
("my_domain:one", info.one),
|
||||
("my_domain:two", info.two),
|
||||
("my_domain:three", info.three),
|
||||
])
|
||||
.query_async::<_, String>(&mut conn)
|
||||
.await
|
||||
.map_err(error::ErrorInternalServerError)?;
|
||||
|
||||
// not strictly necessary, but successful SET operations return "OK"
|
||||
if res == "OK" {
|
||||
Ok(HttpResponse::Ok().body("successfully cached values"))
|
||||
} else {
|
||||
Ok(HttpResponse::InternalServerError().finish())
|
||||
}
|
||||
}
|
||||
|
||||
async fn del_stuff(redis: web::Data<Addr<RedisActor>>) -> actix_web::Result<HttpResponse> {
|
||||
let res = redis
|
||||
.send(Command(resp_array![
|
||||
"DEL",
|
||||
"mydomain:one",
|
||||
"mydomain:two",
|
||||
"mydomain:three"
|
||||
]))
|
||||
async fn del_stuff(redis: web::Data<redis::Client>) -> actix_web::Result<impl Responder> {
|
||||
let mut conn = redis
|
||||
.get_tokio_connection_manager()
|
||||
.await
|
||||
.map_err(error::ErrorInternalServerError)?
|
||||
.map_err(error::ErrorInternalServerError)?;
|
||||
|
||||
match res {
|
||||
RespValue::Integer(x) if x == 3 => {
|
||||
Ok(HttpResponse::Ok().body("successfully deleted values"))
|
||||
}
|
||||
let res = redis::Cmd::del(&["my_domain:one", "my_domain:two", "my_domain:three"])
|
||||
.query_async::<_, usize>(&mut conn)
|
||||
.await
|
||||
.map_err(error::ErrorInternalServerError)?;
|
||||
|
||||
_ => {
|
||||
log::error!("{res:?}");
|
||||
Ok(HttpResponse::InternalServerError().finish())
|
||||
}
|
||||
// not strictly necessary, but successful DEL operations return the number of keys deleted
|
||||
if res == 3 {
|
||||
Ok(HttpResponse::Ok().body("successfully deleted values"))
|
||||
} else {
|
||||
log::error!("deleted {res} keys");
|
||||
Ok(HttpResponse::InternalServerError().finish())
|
||||
}
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
async fn main() -> io::Result<()> {
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||
|
||||
log::info!("starting HTTP server at http://localhost:8080");
|
||||
|
||||
HttpServer::new(|| {
|
||||
let redis_addr = RedisActor::start("127.0.0.1:6379");
|
||||
let redis = redis::Client::open("redis://127.0.0.1:6379").unwrap();
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.app_data(web::Data::new(redis_addr))
|
||||
.app_data(web::Data::new(redis.clone()))
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(
|
||||
web::resource("/stuff")
|
||||
@ -88,6 +74,7 @@ async fn main() -> std::io::Result<()> {
|
||||
.route(web::delete().to(del_stuff)),
|
||||
)
|
||||
})
|
||||
.workers(2)
|
||||
.bind(("127.0.0.1", 8080))?
|
||||
.run()
|
||||
.await
|
||||
|
@ -231,7 +231,7 @@ where
|
||||
slice
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(idx, item)| Edge::new(start + idx, (map_to)(*item))),
|
||||
.map(|(idx, item)| Edge::new(start + idx, (map_to)(item))),
|
||||
);
|
||||
|
||||
Ok::<_, Error>(connection)
|
||||
|
Loading…
Reference in New Issue
Block a user