Redis-rs는 Rust용 고급 Redis 라이브러리입니다. 매우 유연하지만 낮은 수준의 API를 통해 모든 Redis 기능에 대한 편리한 액세스를 제공합니다. 모든 작업이 예상한 유형으로 결과를 반환할 수 있도록 사용자 정의 가능한 유형 변환 특성을 사용합니다. 이는 매우 즐거운 개발 경험을 제공합니다.
이 상자는 redis
라고 불리며 화물을 통해 이에 의존할 수 있습니다.
[dependencies]
redis = " 0.27.5 "
라이브러리에 대한 문서는 docs.rs/redis에서 찾을 수 있습니다.
연결을 열려면 클라이언트를 생성한 다음 클라이언트에서 연결을 가져와야 합니다. 미래에는 이를 위한 연결 풀이 있을 예정이며, 현재 각 연결은 분리되어 있으며 풀링되지 않습니다.
많은 명령이 Commands
특성을 통해 구현되지만 수동으로 명령을 생성하는 것도 가능합니다.
use redis :: Commands ;
fn fetch_an_integer ( ) -> redis :: RedisResult < isize > {
// connect to redis
let client = redis :: Client :: open ( "redis://127.0.0.1/" ) ? ;
let mut con = client . get_connection ( ) ? ;
// throw away the result, just make sure it does not fail
let _ : ( ) = con . set ( "my_key" , 42 ) ? ;
// read back the key and return it. Because the return value
// from the function is a result for integer this will automatically
// convert into one.
con . get ( "my_key" )
}
변수는 다양한 유형( String
, num 유형, 튜플, Vec
)에 대해 Redis 형식 간에 변환됩니다. 자신만의 유형과 함께 사용하려면 FromRedisValue
및 ToRedisArgs
특성을 구현하거나 redis-macros 크레이트를 사용하여 파생시킬 수 있습니다.
비동기 클라이언트를 활성화하려면 Cargo.toml, tokio 사용자의 경우 tokio-comp
, async-std-comp
에서 관련 기능을 활성화하세요.
# if you use tokio
redis = { version = "0.27.5", features = ["tokio-comp"] }
# if you use async-std
redis = { version = "0.27.5", features = ["async-std-comp"] }
TLS 지원을 활성화하려면 Cargo.toml에서 관련 기능 항목을 사용해야 합니다. 현재 native-tls
와 rustls
지원됩니다.
native-tls
사용하려면 다음을 수행하세요.
redis = { version = "0.27.5", features = ["tls-native-tls"] }
# if you use tokio
redis = { version = "0.27.5", features = ["tokio-native-tls-comp"] }
# if you use async-std
redis = { version = "0.27.5", features = ["async-std-native-tls-comp"] }
rustls
사용하려면 다음을 수행하십시오.
redis = { version = "0.27.5", features = ["tls-rustls"] }
# if you use tokio
redis = { version = "0.27.5", features = ["tokio-rustls-comp"] }
# if you use async-std
redis = { version = "0.27.5", features = ["async-std-rustls-comp"] }
rustls
사용하면 다른 기능 플래그 위에 다음 기능 플래그를 추가하여 추가 기능을 활성화할 수 있습니다.
tls-rustls-insecure
: 안전하지 않은 TLS 연결 허용tls-rustls-webpki-roots
: 기본 루트 인증서 대신 webpki-roots
(Mozilla의 루트 인증서)를 사용합니다. 그러면 rediss://
URL 구성표를 사용하여 redis 인스턴스에 연결할 수 있습니다.
let client = redis :: Client :: open ( "rediss://127.0.0.1/" ) ? ;
비보안 모드를 활성화하려면 URL 끝에 #insecure
추가하세요.
let client = redis :: Client :: open ( "rediss://127.0.0.1/#insecure" ) ? ;
지원 중단 알림: tls
또는 async-std-tls-comp
기능을 사용하는 경우 tls-native-tls
또는 async-std-native-tls-comp
기능을 각각 사용하십시오.
Redis 클러스터에 대한 지원은 Cargo.toml에서 cluster
기능을 활성화하여 활성화할 수 있습니다:
redis = { version = "0.27.5", features = [ "cluster"] }
그런 다음 사용 가능한 노드 목록을 허용하는 ClusterClient
사용할 수 있습니다. 클라이언트를 인스턴스화할 때 클러스터에서 노드 하나만 지정하면 되지만 여러 개를 지정할 수도 있습니다.
use redis :: cluster :: ClusterClient ;
use redis :: Commands ;
fn fetch_an_integer ( ) -> String {
let nodes = vec ! [ "redis://127.0.0.1/" ] ;
let client = ClusterClient :: new ( nodes ) . unwrap ( ) ;
let mut connection = client . get_connection ( ) . unwrap ( ) ;
let _ : ( ) = connection . set ( "test" , "test_data" ) . unwrap ( ) ;
let rv : String = connection . get ( "test" ) . unwrap ( ) ;
return rv ;
}
비동기 Redis 클러스터 지원은 선호하는 비동기 런타임과 함께 cluster-async
기능을 활성화하여 활성화할 수 있습니다. 예:
redis = { version = "0.27.5", features = [ "cluster-async", "tokio-std-comp" ] }
use redis :: cluster :: ClusterClient ;
use redis :: AsyncCommands ;
async fn fetch_an_integer ( ) -> String {
let nodes = vec ! [ "redis://127.0.0.1/" ] ;
let client = ClusterClient :: new ( nodes ) . unwrap ( ) ;
let mut connection = client . get_async_connection ( ) . await . unwrap ( ) ;
let _ : ( ) = connection . set ( "test" , "test_data" ) . await . unwrap ( ) ;
let rv : String = connection . get ( "test" ) . await . unwrap ( ) ;
return rv ;
}
RedisJSON 모듈에 대한 지원은 Cargo.toml의 기능으로 "json"을 지정하여 활성화할 수 있습니다.
redis = { version = "0.27.5", features = ["json"] }
그런 다음 모든 Redis 연결에 json
명령을 추가하는 JsonCommands
특성을 간단히 가져올 수 있습니다(기본 명령만 추가하는 Commands
과 혼동하지 마세요).
use redis :: Client ;
use redis :: JsonCommands ;
use redis :: RedisResult ;
use redis :: ToRedisArgs ;
// Result returns Ok(true) if the value was set
// Result returns Err(e) if there was an error with the server itself OR serde_json was unable to serialize the boolean
fn set_json_bool < P : ToRedisArgs > ( key : P , path : P , b : bool ) -> RedisResult < bool > {
let client = Client :: open ( "redis://127.0.0.1" ) . unwrap ( ) ;
let connection = client . get_connection ( ) . unwrap ( ) ;
// runs `JSON.SET {key} {path} {b}`
connection . json_set ( key , path , b ) ?
}
결과를 구문 분석하려면 serde_json
(또는 다른 json lib)을 사용하여 바이트의 결과를 역직렬화해야 합니다. 이는 항상 Vec
입니다. 경로에서 결과가 발견되지 않으면 빈 Vec
입니다. 역직렬화 및 Vec
언래핑을 자동으로 처리하려면 redis-macros 상자에서 Json
래퍼를 사용할 수 있습니다.
redis
테스트하려면 Redis 모듈로 테스트할 수 있어야 합니다. 이를 위해서는 테스트 스크립트를 실행하기 전에 다음 환경 변수를 설정해야 합니다.
REDIS_RS_REDIS_JSON_PATH
= RedisJSON 모듈의 절대 경로입니다(Linux의 경우 librejson.so
, MacOS의 경우 librejson.dylib
).
RedisJSON 모듈에 액세스하려면 다음 링크를 참조하세요.
라이브러리에서 개발하려는 경우 makefile에서 제공하는 몇 가지 명령이 있습니다.
빌드하려면:
$ make
테스트하려면:
$ make test
벤치마크를 실행하려면:
$ make bench
문서를 작성하려면(야간 컴파일러 필요, Rust-lang/rust#43781 참조):
$ make docs
작업에 대한 병합을 찾기 전에 clippy
실행하는 것이 좋습니다. 보풀은 매우 엄격할 수 있습니다. Travis CI는 clippy
만족하지 않는 모든 빌드에 실패하므로 자신의 워크스테이션에서 이를 실행하면 시간을 절약할 수 있습니다.
$ cargo clippy --all-features --all --tests --examples -- -D clippy::all -D warnings
afl로 퍼지 테스트를 실행하려면 먼저 화물 afl( cargo install -f afl
)을 설치한 후 다음을 실행하십시오.
$ make fuzz
Fuzzer가 충돌을 발견한 경우 이를 재현하려면 다음을 실행하십시오.
$ cd afl//
$ cargo run --bin reproduce -- out/crashes/