diff --git a/Cargo.lock b/Cargo.lock index 10709bf5..f4c2c8b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/databases/redis/Cargo.toml b/databases/redis/Cargo.toml index 1f5c3fb2..079990d6 100644 --- a/databases/redis/Cargo.toml +++ b/databases/redis/Cargo.toml @@ -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"] } diff --git a/databases/redis/src/main.rs b/databases/redis/src/main.rs index da822cc3..57dc68e6 100644 --- a/databases/redis/src/main.rs +++ b/databases/redis/src/main.rs @@ -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, - redis: web::Data>, -) -> actix_web::Result { - 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` 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, + redis: web::Data, +) -> actix_web::Result { + let mut conn = redis + .get_tokio_connection_manager() .await - .map_err(error::ErrorInternalServerError)? - .into_iter() - .map(|item| item.map_err(error::ErrorInternalServerError)) - .collect::, _>>()?; + .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>) -> actix_web::Result { - let res = redis - .send(Command(resp_array![ - "DEL", - "mydomain:one", - "mydomain:two", - "mydomain:three" - ])) +async fn del_stuff(redis: web::Data) -> actix_web::Result { + 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 diff --git a/graphql/async-graphql/src/star_wars/model.rs b/graphql/async-graphql/src/star_wars/model.rs index d09312b5..836987cb 100644 --- a/graphql/async-graphql/src/star_wars/model.rs +++ b/graphql/async-graphql/src/star_wars/model.rs @@ -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)