diff --git a/content/develop/use-cases/rate-limiter/rust/Cargo.lock b/content/develop/use-cases/rate-limiter/rust/Cargo.lock deleted file mode 100644 index 1d2fdfc0db..0000000000 --- a/content/develop/use-cases/rate-limiter/rust/Cargo.lock +++ /dev/null @@ -1,1006 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "axum" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower 0.5.3", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "bitflags" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - -[[package]] -name = "bytes" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "slab", -] - -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "bytes", - "http", - "http-body", - "hyper", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "libc" -version = "0.2.184" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" - -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mio" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rate-limiter-demo" -version = "0.1.0" -dependencies = [ - "axum", - "redis", - "serde", - "serde_json", - "tokio", - "tower 0.4.13", -] - -[[package]] -name = "redis" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c580d9cbbe1d1b479e8d67cf9daf6a62c957e6846048408b80b43ac3f6af84cd" -dependencies = [ - "combine", - "itoa", - "percent-encoding", - "ryu", - "sha1_smol", - "socket2 0.4.10", - "url", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" -dependencies = [ - "itoa", - "serde", - "serde_core", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tinystr" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tokio" -version = "1.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" -dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.3", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "log", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/content/embeds/rc-endpoint-description.md b/content/embeds/rc-endpoint-description.md new file mode 100644 index 0000000000..af5cc2b452 --- /dev/null +++ b/content/embeds/rc-endpoint-description.md @@ -0,0 +1,15 @@ +Static endpoints on Redis Cloud start with `redis-.c` (or `redis-.internal.c` for the private endpoint). For example, a static endpoint might look like this: + +```text +redis-12345.c12345.us-east-1-mz.ec2.cloud.rlrcp.com +``` + +Dynamic endpoints on Redis Cloud always contain three words and a random number, and end in `db.redis.io`. For example, a dynamic endpoint might look like this: + +```text +horse-battery-staple-12345.db.redis.io +``` + +You can see the Dynamic endpoints for databases with both static and dynamic endpoints by expanding the **Dynamic endpoints** section in the **General** section of the **Configuration** tab. + +{{The Static and dynamic endpoints for a database with both kinds of endpoints.}} \ No newline at end of file diff --git a/content/embeds/rc-get-prometheus-endpoint.md b/content/embeds/rc-get-prometheus-endpoint.md new file mode 100644 index 0000000000..22b3b5c406 --- /dev/null +++ b/content/embeds/rc-get-prometheus-endpoint.md @@ -0,0 +1,5 @@ +In the **Metrics** tab of your database, select **Connect to Prometheus > Copy Prometheus endpoint** to save your Prometheus endpoint to the clipboard. + +{{Use the Connect to Prometheus button to get the Prometheus endpoint.}} + +You can also get the Prometheus endpoint by calling [`GET /subscriptions/{subscriptionId}`]({{< relref "/operate/rc/api/api-reference#tag/Subscriptions-Pro/operation/getSubscriptionById" >}}) and getting the `prometheusEndpoint` from the response. diff --git a/content/integrate/dynatrace-with-redis-cloud/_index.md b/content/integrate/dynatrace-with-redis-cloud/_index.md index 97234f2ad3..743584811d 100644 --- a/content/integrate/dynatrace-with-redis-cloud/_index.md +++ b/content/integrate/dynatrace-with-redis-cloud/_index.md @@ -42,7 +42,9 @@ If you have not already created a VPC between the Redis Cloud cluster and the ne Prometheus lives you should do so now. Please visit [VPC Peering](https://redis.io/docs/latest/operate/rc/security/vpc-peering/) and follow the instructions for the cloud platform of your choice. +You'll also need the [Prometheus endpoint for your database]({{< relref "/operate/rc/databases/monitor-performance#connect-to-prometheus" >}}) from the [Redis Cloud console](https://cloud.redis.io/). +{{< embed-md "rc-get-prometheus-endpoint.md" >}} ## View metrics diff --git a/content/integrate/new-relic-with-redis-cloud/_index.md b/content/integrate/new-relic-with-redis-cloud/_index.md index a37cea5371..5519998816 100644 --- a/content/integrate/new-relic-with-redis-cloud/_index.md +++ b/content/integrate/new-relic-with-redis-cloud/_index.md @@ -62,6 +62,10 @@ Get metrics from Redis Cloud: - targets: ["REDIS_CLOUD_HOST:8070"] ``` +Replace `REDIS_CLOUD_HOST` with the [Prometheus endpoint for your database]({{< relref "/operate/rc/databases/monitor-performance#connect-to-prometheus" >}}), which you can get from the [Redis Cloud console](https://cloud.redis.io/). + +{{< embed-md "rc-get-prometheus-endpoint.md" >}} + Write them to New Relic: ```yaml diff --git a/content/integrate/prometheus-with-redis-cloud/_index.md b/content/integrate/prometheus-with-redis-cloud/_index.md index b7cfd52ef0..2894d69a75 100644 --- a/content/integrate/prometheus-with-redis-cloud/_index.md +++ b/content/integrate/prometheus-with-redis-cloud/_index.md @@ -43,19 +43,9 @@ You can quickly set up Prometheus and Grafana for testing using the Prometheus a 1. Set up [VPC peering]({{< relref "/operate/rc/security/vpc-peering" >}}). -1. Extract the Prometheus endpoint from the private endpoint to your database. The private endpoint is in the [Redis Cloud console](https://cloud.redis.io/) under the [Configuration tab]({{< relref "/operate/rc/databases/view-edit-database#configuration-tab" >}}) of your database. The Prometheus endpoint is on port 8070 of the internal server. +1. Get the Prometheus endpoint for your database from the [Redis Cloud console]({{< relref "/operate/rc/databases/monitor-performance#connect-to-prometheus" >}}). - For example, if your private endpoint is: - - ```sh - redis-12345.internal.:12345 - ``` - - The Prometheus endpoint is: - - ```sh - internal.:8070 - ``` + {{< embed-md "rc-get-prometheus-endpoint.md" >}} 1. Create an instance to run Prometheus and Grafana on the same cloud provider as your Redis Cloud subscription (for example, Amazon Web Services or Google Cloud). This instance must: - Exist in the same region as your Redis Cloud subscription. diff --git a/content/operate/rc/changelog/april-2026.md b/content/operate/rc/changelog/april-2026.md new file mode 100644 index 0000000000..a46e7e85e1 --- /dev/null +++ b/content/operate/rc/changelog/april-2026.md @@ -0,0 +1,33 @@ +--- +Title: Redis Cloud changelog (April 2026) +alwaysopen: false +categories: +- docs +- operate +- rc +description: New features, enhancements, and other changes added to Redis Cloud during + April 2026. +highlights: Dynamic endpoints, Redirect dynamic endpoints +linktitle: April 2026 +weight: 52 +tags: +- changelog +--- + +## New features + +### Dynamic endpoints + +Redis Cloud is gradually rolling out dynamic endpoints for all databases. You will be able to view both legacy static endpoints and dynamic endpoints when the feature is available for your account. Static endpoints will still work at this time, but they may be deprecated in the future. + +{{< embed-md "rc-endpoint-description.md" >}} + +We recommend slowly migrating connections to the dynamic endpoints. Moving connections from the static endpoints to the dynamic endpoints does not cause any downtime. See [Applications that use legacy static endpoints]({{< relref "/operate/rc/databases/redirect-endpoints#applications-that-use-legacy-static-endpoints" >}}) for more information. + +### Redirect dynamic endpoints + +{{< note >}} +Dynamic endpoint redirection is currently in public preview. Features and behavior are subject to change. +{{< /note >}} + +You can redirect your dynamic endpoints to any Redis Cloud Pro database in the same account. Redirecting your dynamic endpoints lets you switch connections to your new database seamlessly through Redis Cloud without any code changes. See [Redirect database endpoints]({{< relref "/operate/rc/databases/redirect-endpoints" >}}) for more information. diff --git a/content/operate/rc/databases/connect/_index.md b/content/operate/rc/databases/connect/_index.md index d5e9ca7edf..748a45786c 100644 --- a/content/operate/rc/databases/connect/_index.md +++ b/content/operate/rc/databases/connect/_index.md @@ -11,15 +11,44 @@ linkTitle: Connect weight: 12 --- -After you [create your database]({{< relref "/operate/rc/databases/create-database" >}}), you can connect to it. +After you [create your database]({{< relref "/operate/rc/databases/create-database" >}}), you can connect to it using the public or private endpoint. -To connect to the database, you need your username and password. By default, your database is protected by a [**Default user**]({{< relref "/operate/rc/security/access-control/data-access-control/default-user" >}}) called `default` and a masked **Default user password**. You can see the default user password in the **Security** section of the **Configuration** details for your database. Select the eye icon to show or hide the password. +## Get connection information + +To connect to the database, you need the following information: +- The database endpoint +- Your database username and password + +### Database endpoints + +The database endpoints are listed in the **General** section of the **Configuration** tab for your database. + +{{The General section of the Configuration tab of the database details page.}} + +Redis Cloud Pro and Redis Cloud Essentials databases have a public endpoint, which you can access from the public internet. Redis Cloud Pro databases also have a private endpoint. You can connect to the private endpoint from a private network. Before you can connect to the private endpoint, you must set up a private connectivity method, such as: +- [VPC peering]({{< relref "/operate/rc/security/vpc-peering" >}}) +- [Google Cloud Private Service Connect]({{< relref "/operate/rc/security/private-service-connect" >}}) (Google Cloud only) +- [AWS Transit Gateway]({{< relref "/operate/rc/security/aws-transit-gateway" >}}) or [AWS PrivateLink]({{< relref "/operate/rc/security/aws-privatelink" >}}) (AWS only) + +Redis Cloud Pro users can block the public endpoint for their databases. For more information, see [Block public endpoints]({{< relref "/operate/rc/security/database-security/block-public-endpoints" >}}). + +#### Static and dynamic endpoints + +{{< embed-md "rc-endpoint-description.md" >}} + +You can redirect the dynamic endpoints to a different database at any time, but you cannot redirect the static endpoints. We recommend using the dynamic endpoints for your application so that you can migrate your database endpoints to a different database in the future without any code changes. See [Redirect dynamic endpoints]({{< relref "/operate/rc/databases/redirect-endpoints" >}}) for more information. + +### Database username and password + +By default, your database is protected by a [**Default user**]({{< relref "/operate/rc/security/access-control/data-access-control/default-user" >}}) with the username `default` and a masked **Default user password**. You can see the default user password in the **Security** section of the **Configuration** details for your database. Select the eye icon to show or hide the password. {{The Security section of the Configuration tab of the database details page.}} If you've turned on [Role-based access control]({{< relref "/operate/rc/security/access-control/data-access-control/role-based-access-control" >}}) for your database and [turned off the default User]({{< relref "/operate/rc/security/access-control/data-access-control/default-user#turn-off-default-user" >}}), use the username and password for your data access role. -Once you have the username and password, select **Connect** to open the connection wizard. +## Connect to your database with connection wizard + +Select **Connect** to open the connection wizard. {{< image filename="/images/rc/button-connect.png#no-click" alt="Connect button." >}} @@ -37,7 +66,7 @@ The connection wizard provides the following database connection methods: {{The connection wizard.}} -## Redis Insight {#using-redisinsight} +### Redis Insight {#using-redisinsight} [Redis Insight]({{< relref "/develop/tools/insight" >}}) is a free Redis GUI that lets you visualize your Redis data and learn more about Redis. @@ -47,7 +76,7 @@ You can connect to your database with Redis Insight in two ways: 1. [Download and Install Redis Insight](#ri-app) on Windows, macOS, and Linux. -### Open in your browser {#ri-browser} +#### Open in your browser {#ri-browser} {{< note >}} Opening your database with Redis Insight in your browser is only available for Essentials databases. For all other databases, [Download and install Redis Insight](#ri-app) on your computer. @@ -65,7 +94,7 @@ Redis Insight will open in a new tab. This browser-based version of Redis Insight has a subset of the features of Redis Insight. For more information, see [Open with Redis Insight on Redis Cloud]({{< relref "/operate/rc/databases/connect/insight-cloud" >}}). -### Install and open on your computer {#ri-app} +#### Install and open on your computer {#ri-app} 1. If you haven't downloaded Redis Insight, select **Download** under **Redis Insight** in the Connection wizard to download it. @@ -79,7 +108,7 @@ If you get an error when connecting with Redis Insight, [manually connect to you You can use Redis Insight to view your data, run Redis commands, and analyze database performance. See the [Redis Insight docs]({{< relref "/develop/tools/insight" >}}) for more info. -## Redis client {#using-redis-client} +### Redis client {#using-redis-client} A Redis client is a software library or tool that enables applications to interact with a Redis server. Each client has its own syntax and installation process. For help with a specific client, see the client's documentation. @@ -98,7 +127,11 @@ If the username and password are not already filled in, replace `` and See [Clients]({{< relref "/develop/clients" >}}) to learn how to connect with the official Redis clients. -### redis-cli {#using-rediscli} +{{< note >}} +We recommend using the [dynamic endpoints](#static-and-dynamic-endpoints) for your application so that you can migrate your database endpoints to a different database in the future without any code changes. See [Redirect dynamic endpoints]({{< relref "/operate/rc/databases/redirect-endpoints" >}}) for more information. +{{< /note >}} + +#### redis-cli {#using-rediscli} The [`redis-cli`]({{< relref "/develop/tools/cli" >}}) utility is installed when you install Redis. It provides a command-line interface that lets you work with your database using core [Redis commands]({{< relref "/commands" >}}). diff --git a/content/operate/rc/databases/migrate-databases.md b/content/operate/rc/databases/migrate-databases.md index 12cfdabebd..26722925a4 100644 --- a/content/operate/rc/databases/migrate-databases.md +++ b/content/operate/rc/databases/migrate-databases.md @@ -141,11 +141,21 @@ Active-Passive sync lets you migrate data while apps and other connections are u Do not write to the target database until turning off Active-Passive. Writing to the target database of an Active-Passive setup can cause data consistency issues and replication failures. See [Active-Passive replication considerations]({{< relref "/operate/rc/databases/configuration/data-eviction-policies.md#active-passive-replication-considerations" >}}) for more information. {{< /warning >}} -## Active-Passive memory requirements +### Active-Passive memory requirements Active-Passive sync requires more memory than data import. On average, you need an extra 25% memory on top of other requirements, though specific requirements depend on the data types and other factors. To illustrate, suppose you want to migrate a 1 GB source database without replication to a target database with replication enabled. Here, the target database memory limit should be at least 2.5 GB to avoid data loss. -Once the databases are synced, you can disable Active-Passive for the target database. Before doing so, however, verify that apps and other connections have switched to the target database; otherwise, you may lose data. +## Next steps +If you want to redirect your application's connections to the target database, you can [redirect your database endpoints]({{< relref "/operate/rc/databases/redirect-endpoints" >}}) to the target database. + +Before you redirect your endpoints, make sure: +- The import or replication is finished. +- Basic metrics for both the source and target databases are reporting normally. +- The application authentication and authorization are set up correctly for the target database. +- You have tested connection to the target database to confirm connectivity and credentials. +- If using Active-Passive, turn off Active-Passive for the target database. + +Different applications have different availability and consistency requirements. Pausing writes before endpoint redirection is a standard best practice to help ensure data consistency. Still, you can choose the timing and behavior that fits your system (for example, whether to allow reads, how long to pause traffic, and what validation to run). diff --git a/content/operate/rc/databases/monitor-performance.md b/content/operate/rc/databases/monitor-performance.md index 6936dc4bb0..e5c01dbdcb 100644 --- a/content/operate/rc/databases/monitor-performance.md +++ b/content/operate/rc/databases/monitor-performance.md @@ -90,6 +90,14 @@ To update alert settings for one or more team members, select **Access Managemen If you subscribe to Redis Cloud through a Platform-as-a-Service (PaaS) provider (such as Heroku), you will need to review your provider's documentation for help managing your team. +## Connect to Prometheus + +Redis Cloud exposes a Prometheus endpoint for Redis Cloud Pro databases. You can use this endpoint to connect Prometheus to your database. + +{{< embed-md "rc-get-prometheus-endpoint.md" >}} + +For more information on how to connect Prometheus to Redis Cloud, see [Prometheus and Grafana with Redis Cloud]({{< relref "/integrate/prometheus-with-redis-cloud/" >}}). + ## Continue learning with Redis University {{< university-links >}} diff --git a/content/operate/rc/databases/redirect-endpoints.md b/content/operate/rc/databases/redirect-endpoints.md new file mode 100644 index 0000000000..806f10dcc9 --- /dev/null +++ b/content/operate/rc/databases/redirect-endpoints.md @@ -0,0 +1,142 @@ +--- +Title: Redirect dynamic endpoints +alwaysopen: false +categories: +- docs +- operate +- rc +description: Shows how to redirect dynamic endpoints to a different database. +linkTitle: Redirect endpoints +weight: 31 +bannerText: Dynamic endpoint redirection is currently in public preview. Features and behavior are subject to change. +--- + +Dynamic endpoints allow you to redirect application traffic from one database to another in the same Redis Cloud account without updating the endpoints in your application. Redis manages endpoint redirection for you. + +You can redirect any database's dynamic endpoints to any Redis Cloud Pro database in the same account. If you need to replicate the data from the source database, you should [migrate your data]({{< relref "/operate/rc/databases/migrate-databases" >}}) to the target database before you redirect your endpoints. + +## When to redirect dynamic endpoints + +Use endpoint redirection to seamlessly migrate your application traffic to a different database within the same Redis Cloud account. There is no need to update the endpoints in your application, since they'll remain the same. For example, you might want to: + +- Upgrade your database's subscription from an [Essentials Plan to a Pro Plan]({{< relref "/operate/rc/subscriptions/upgrade-essentials-pro" >}}) +- Move between Redis Cloud offerings, such as Redis on RAM to Redis Flex +- Split a subscription or combine databases from multiple subscriptions into one +- Migrate your database to a different cloud provider, region, or availability zone +- Redirect the endpoint to another database to restore service during Disaster Recovery + +## Applications that use legacy static endpoints + +Existing databases have both legacy static endpoints and dynamic endpoints. + +{{< embed-md "rc-endpoint-description.md" >}} + +You can only migrate the dynamic endpoints to point to a new database. Transitioning from the static to the dynamic endpoint does not cause downtime and allows you to gradually manage client disconnections. To migrate to the dynamic endpoint safely: +- Move clients one-by-one (or service-by-service) from legacy static endpoints to dynamic endpoints. Note that during the transition period, both static and Dynamic endpoints can be used concurrently. +- After all clients use the dynamic endpoint, you can then redirect the dynamic endpoints to the target database. + +This phased approach minimizes risk and allows controlled client reconnections throughout the migration process. + +## Before you start + +Read the following sections to prepare for endpoint redirection. + +### Scope and impact + +This process redirects a source database's dynamic endpoints to a selected target database, including both public and private (if available) endpoints. **Redirecting endpoints does not migrate the data in your database.** You can choose to redirect the endpoints without migrating your data. If you need your data to be available in the target database, you must [migrate your data]({{< relref "/operate/rc/databases/migrate-databases" >}}) to the target database **before** you redirect your endpoints. + +To ensure all connections are redirected to the target database, Redis Cloud will block all traffic to the source database for at least 5 minutes. This block period gives DNS caches time to expire and allow clients to reconnect and re-resolve the endpoint. All existing connections to the source database will be terminated and new connections will be refused. To reduce the risk of traffic being split between the source and target database, traffic will remain blocked until you [unblock it](#unblock-database-traffic). + +Short-lived connection disruptions may occur as clients reconnect to the database, depending on client reconnection behavior. + +We recommend redirecting during a low-traffic window. + +#### Redirecting endpoints after data migration + +If you [migrated your data]({{< relref "/operate/rc/databases/migrate-databases" >}}) to the target database before redirecting your endpoints, make sure that: +- The import or replication is finished. +- Basic metrics for both the source and target databases are reporting normally. +- The application authentication and authorization are set up correctly for the target database. +- You have tested connection to the target database to confirm connectivity and credentials. + +Different applications have different availability and consistency requirements. Redis Cloud blocks traffic to the source database for at least 5 minutes to ensure all clients have reconnected to the target database, but you can choose the timing and behavior that fits your system (for example, how long to block traffic and what validation to run). + +### Prerequisites + +Make sure you have met the following prerequisites: + +- Your application is using the dynamic endpoint. Endpoint redirection does not redirect [static endpoints](#applications-that-use-legacy-static-endpoints). +- You have [created a target Redis Cloud Pro database]({{< relref "/operate/rc/databases/create-database/create-pro-database-new" >}}) in the same account that [is compatible with the source database](#redirection-compatibility). +- If you monitor the source database with Prometheus, add the target database to Prometheus before your redirect the endpoint so that you can monitor the target database after the redirection. See [Connect to Prometheus]({{< relref "operate/rc/databases/monitor-performance#connect-to-prometheus" >}}) for more information. +- Make sure that your client connections are configured with socket/connection timeouts. If you do not configure them, your client may hang indefinitely and the connection will not refresh until the application is restarted. Refer to the [Client documentation]({{< relref "/develop/clients" >}}) for your client for more information. + +#### Redirection compatibility + +Endpoint redirection is only allowed when the source and target databases are compatible. Redis Cloud will validate compatibility and may prevent redirection if the source and target databases are not compatible. + +If any of the following properties differ, the databases are not compatible and you cannot redirect the endpoints: +- Port number +- Connectivity settings, such as: + - [TLS settings]({{< relref "/operate/rc/security/database-security/tls-ssl" >}}) + - [VPC Peering]({{< relref "/operate/rc/security/vpc-peering" >}}) or other connectivity method settings + - [Default User settings]({{< relref "/operate/rc/security/access-control/data-access-control/default-user" >}}) + - [CIDR allow list]({{< relref "/operate/rc/security/cidr-whitelist" >}}) settings + +Some differences may be intentional but can affect application behavior. In those cases, the console will warn you about the difference but allow you to proceed with redirection. The following differences will cause a warning: +- Redis version +- [RESP Database protocol version]({{< relref "/develop/reference/protocol-spec" >}}#resp-versions) +- [OSS Cluster API]({{< relref "/operate/rc/databases/configuration/clustering#oss-cluster-api" >}}) configuration + +### Limitations + +Be aware of the following limitations when redirecting dynamic endpoints: +- The target database must be a Redis Cloud Pro database on the same account as the source database. +- Active-Active databases are currently not supported as either a source or target database (coming soon). +- Databases using GCP Private Service Connect or AWS PrivateLink are currently not supported for endpoint redirection (coming soon). + +## Redirect database endpoints + +To redirect your database endpoints: + +1. From the Redis Cloud console, select **Databases** from the menu and select the source database in the list. + +1. In the **General** section of the **Configuration** tab, select **Redirect endpoints**. + + {{Use the **Redirect endpoints** button to change the target database for the source database endpoints.}} + +1. Select the target Redis Cloud Pro database from the **Target database** list. You can type in the database's name to find it. + + {{Select the target database from the database list.}} + +1. If you want to assign the same [Role-based Access Control (RBAC) roles]({{< relref "/operate/rc/security/access-control/data-access-control/role-based-access-control" >}}) to the target database that are assigned to the source database, select **Assign the same ACLs to the target database**. + + {{Select **Assign the same ACLs to the target database** to assign the same roles to the target database.}} + +1. Select **I acknowledge this action will redirect my database endpoints** to confirm that you understand that this action will redirect your database endpoints. Then select **Redirect endpoints**. + + {{The **Redirect endpoints** button redirects the source database endpoints to the target database.}} + +After you redirect your database endpoints, you can go to the **Configuration** tab of the target database to verify that the endpoints now point to the target database. To ensure all connections are redirected to the target database, Redis Cloud will block all traffic to the source database for at least 5 minutes to ensure all clients have reconnected to the target database. After 5 minutes, you can [unblock traffic to the source database](#unblock-database-traffic). You can also [revert the redirection](#revert-endpoint-redirection) within 24 hours to restore the original endpoints. + +## Revert endpoint redirection + +You can revert endpoint redirection within 24 hours to restore the original endpoints. From either database's **Configuration** tab, select **Revert** to revert endpoint migration. + +{{The **Revert** button reverts endpoint migration.}} + +After the 24-hour window, you can no longer revert to the original endpoints. You can redirect them back to the source database if the source database is a Redis Cloud Pro database. However, doing this will create new endpoints for the target database. + +After you revert endpoint redirection, Redis Cloud will unblock traffic to the source database and block traffic to the target database for 5 minutes to ensure all clients have reconnected to the source database. After 5 minutes, you can [unblock traffic to the target database](#unblock-database-traffic). + +## Unblock database traffic + +After you redirect your database endpoints, Redis Cloud will block all traffic to the source database for at least 5 minutes to ensure all clients have reconnected to the target database. If you revert endpoint redirection, Redis Cloud will unblock traffic to the source database and block traffic to the target database for at least 5 minutes to ensure all clients have reconnected to the source database. If Redis Cloud has blocked traffic to a database, the database will display a **Traffic blocked** badge in the Redis Cloud console. + +{{The **Traffic blocked** badge indicates that Redis Cloud has blocked traffic to the database.}} + +You will not be able to unblock traffic to a database until 5 minutes after you redirect your database endpoints or revert endpoint redirection. Before you unblock traffic to a database, make sure that all clients have reconnected to the correct database. + +To unblock traffic to a database, from the database's **Configuration** tab, select **Unblock traffic**. + +{{The **Unblock traffic** button unblocks traffic to the source database.}} + diff --git a/content/operate/rc/subscriptions/upgrade-essentials-pro.md b/content/operate/rc/subscriptions/upgrade-essentials-pro.md index 10bfcb563f..233c084748 100644 --- a/content/operate/rc/subscriptions/upgrade-essentials-pro.md +++ b/content/operate/rc/subscriptions/upgrade-essentials-pro.md @@ -15,7 +15,7 @@ Redis Cloud Essentials supports low throughput workflows. It supports a range of For more information about the different subscription plans, see [Subscription plans]({{< relref "/operate/rc/subscriptions#subscription-plans" >}}). -To upgrade your Essentials plan, see [Upgrade subscription plan]({{< relref "/operate/rc/subscriptions/view-essentials-subscription#upgrade-plan" >}}). +To upgrade your Essentials plan to another essential plan, see [Upgrade subscription plan]({{< relref "/operate/rc/subscriptions/view-essentials-subscription#upgrade-plan" >}}). ## Upgrade Essentials subscription to Pro @@ -25,19 +25,20 @@ To upgrade your Essentials database to Redis Cloud Pro: 1. [Create a new database in Redis Cloud Pro](#create-rcp) with the right specifications to be able to migrate your database. -1. [Migrate your Essentials database](#migrate-database) to your new Redis Cloud Pro database. +1. [Migrate the data in your Essentials database](#migrate-data) to your new Redis Cloud Pro database, if needed. + +1. [Redirect the endpoints](#redirect-database-endpoints) to your new Redis Cloud Pro database. ### Create Redis Cloud Pro database {#create-rcp} [Create a new database]({{< relref "/operate/rc/databases/create-database/create-pro-database-new" >}}) with the following specifications: - Select **Redis Cloud Pro** for your subscription type. -- Select the **Version** that matches the Redis version your Essentials subscriptions use. - In the [**Sizing tab**]({{< relref "/operate/rc/databases/create-database/create-pro-database-new#sizing-tab" >}}), create your databases with the following specifications: - Set the memory limit to comply with [Active-Passive memory requirements]({{< relref "/operate/rc/databases/migrate-databases#active-passive-memory-requirements" >}}) if you want to migrate your database using [Active-Passive]({{< relref "/operate/rc/databases/migrate-databases#sync-using-active-passive" >}}). - - Select any advanced capabilities that your Essentials database offers. You can find a list of enabled advanced capabilities in the [Configuration tab]({{< relref "/operate/rc/databases/view-edit-database#configuration-details-tab" >}}) of your database. + - In **More options**, set the **Port** to **Manually assign**, and enter the port of your Essentials database. You must set the port number to match the port of your Essentials database if you want to migrate your database endpoints. You can find the port in the endpoint of your database on the **Configuration** tab of your database. -### Migrate database +### Migrate data You can migrate your Redis Cloud Essentials database to your new Redis Cloud Pro subscription using any method in the [Migrate databases]({{< relref "/operate/rc/databases/migrate-databases" >}}) guide. This guide uses [Active-Passive]({{< relref "/operate/rc/databases/migrate-databases#sync-using-active-passive" >}}) to migrate databases between subscriptions in the same account. @@ -85,11 +86,51 @@ Before you follow this guide, be aware of the following limitations: {{When the data is migrated, the target database status displays `Synced`.}} - Active-Passive sync lets you migrate data while apps and other connections are using the source database. Once the data is migrated, you should migrate active connections to the target database before you move on. + Active-Passive sync lets you migrate data while apps and other connections are using the source database. Once the data is migrated, you should migrate active connections to the target database and turn off Active-Passive before you move on. + +### Redirect database endpoints + +Redirecting your database endpoints after migrating your data lets you direct connections to your new database without any code changes. + +{{< note >}} +See [Redirect dynamic endpoints]({{< relref "/operate/rc/databases/redirect-endpoints" >}}) for more information on the limitations and requirements for endpoint redirection. +{{< /note >}} + +To redirect your database endpoints: + +1. From the Redis Cloud console, select **Databases** from the menu and select the source database in the list. + +1. In the **General** section of the **Configuration** tab, select **Redirect endpoints**. + + {{Use the **Redirect endpoints** button to change the target database for the source database endpoints.}} + +1. Select the target Redis Cloud Pro database from the **Target database** list. You can type in the database's name to find it. + + You can choose whether to map the original endpoint to the **Public** or the **Private** endpoint. + + {{Choose whether to map the original endpoint to the Public or Private endpoint.}} + + You must have a private connectivity method set up to be able to select the **Private** endpoint, such as: + - [VPC peering]({{< relref "/operate/rc/security/vpc-peering" >}}) + - [Google Cloud Private Service Connect]({{< relref "/operate/rc/security/private-service-connect" >}}) _(Google Cloud only)_ + - [AWS Transit Gateway]({{< relref "/operate/rc/security/aws-transit-gateway" >}}) or [AWS PrivateLink]({{< relref "/operate/rc/security/aws-privatelink" >}}) _(AWS only)_ + +1. If you want to assign the same [Role-based Access Control (RBAC) roles]({{< relref "/operate/rc/security/access-control/data-access-control/role-based-access-control" >}}) to the target database that are assigned to the source database, select **Assign the same ACLs to the target database**. + + {{Select **Assign the same ACLs to the target database** to assign the same roles to the target database.}} + +1. Select **I acknowledge this action will redirect my database endpoints** to confirm that you understand that this action will redirect your database endpoints. Then select **Redirect endpoints**. + + {{The **Redirect endpoints** button redirects the source database endpoints to the target database.}} + +After you redirect your database endpoints, you can go to the **Configuration** tab of the target database to verify that the endpoints now point to the target database. -1. After your data and connections are migrated, turn off **Active-Passive Redis** from the target database. +You can revert endpoint migration within 24 hours to restore the original endpoints. Select **Revert** to revert endpoint migration. -1. [Delete the source database]({{< relref "/operate/rc/databases/delete-database" >}}). +{{The **Revert** button reverts endpoint migration.}} +After the 24-hour window, you can no longer revert to the endpoint to the original database. +### Delete Essentials database +After you migrate your data and redirect your endpoints, [delete the source database]({{< relref "/operate/rc/databases/delete-database" >}}). diff --git a/static/images/rc/database-details-configuration-tab-general-flexible.png b/static/images/rc/database-details-configuration-tab-general-flexible.png index 7c11cd9198..df211bc70d 100644 Binary files a/static/images/rc/database-details-configuration-tab-general-flexible.png and b/static/images/rc/database-details-configuration-tab-general-flexible.png differ diff --git a/static/images/rc/database-metrics-connect-prometheus.png b/static/images/rc/database-metrics-connect-prometheus.png new file mode 100644 index 0000000000..064cf04db8 Binary files /dev/null and b/static/images/rc/database-metrics-connect-prometheus.png differ diff --git a/static/images/rc/databases-configuration-general-endpoints-legacy.png b/static/images/rc/databases-configuration-general-endpoints-legacy.png new file mode 100644 index 0000000000..d0c06e37c5 Binary files /dev/null and b/static/images/rc/databases-configuration-general-endpoints-legacy.png differ diff --git a/static/images/rc/databases-configuration-general-endpoints.png b/static/images/rc/databases-configuration-general-endpoints.png new file mode 100644 index 0000000000..5fed064b67 Binary files /dev/null and b/static/images/rc/databases-configuration-general-endpoints.png differ diff --git a/static/images/rc/databases-configuration-redirect-endpoints.png b/static/images/rc/databases-configuration-redirect-endpoints.png new file mode 100644 index 0000000000..b77a5a5ec7 Binary files /dev/null and b/static/images/rc/databases-configuration-redirect-endpoints.png differ diff --git a/static/images/rc/migrate-data-redirect-acknowledge.png b/static/images/rc/migrate-data-redirect-acknowledge.png new file mode 100644 index 0000000000..6cf2ba5468 Binary files /dev/null and b/static/images/rc/migrate-data-redirect-acknowledge.png differ diff --git a/static/images/rc/migrate-data-redirect-assign-acls.png b/static/images/rc/migrate-data-redirect-assign-acls.png new file mode 100644 index 0000000000..39e350f867 Binary files /dev/null and b/static/images/rc/migrate-data-redirect-assign-acls.png differ diff --git a/static/images/rc/migrate-data-redirect-essentials-endpoints.png b/static/images/rc/migrate-data-redirect-essentials-endpoints.png new file mode 100644 index 0000000000..9aa7ca3a1c Binary files /dev/null and b/static/images/rc/migrate-data-redirect-essentials-endpoints.png differ diff --git a/static/images/rc/migrate-data-redirect-pro-endpoints.png b/static/images/rc/migrate-data-redirect-pro-endpoints.png new file mode 100644 index 0000000000..4c524e74da Binary files /dev/null and b/static/images/rc/migrate-data-redirect-pro-endpoints.png differ diff --git a/static/images/rc/migrate-data-redirect-revert.png b/static/images/rc/migrate-data-redirect-revert.png new file mode 100644 index 0000000000..28fdcb9505 Binary files /dev/null and b/static/images/rc/migrate-data-redirect-revert.png differ diff --git a/static/images/rc/migrate-data-redirect-unblock.png b/static/images/rc/migrate-data-redirect-unblock.png new file mode 100644 index 0000000000..9e74a27608 Binary files /dev/null and b/static/images/rc/migrate-data-redirect-unblock.png differ diff --git a/static/images/rc/migrate-data-traffic-blocked.png b/static/images/rc/migrate-data-traffic-blocked.png new file mode 100644 index 0000000000..e220f34aa8 Binary files /dev/null and b/static/images/rc/migrate-data-traffic-blocked.png differ