1
1
use super :: CacheBackend ;
2
+ use fred:: { clients:: RedisPool , interfaces:: KeysInterface , types:: Expiration } ;
2
3
use kitsune_error:: Result ;
3
- use redis:: { aio:: ConnectionManager , AsyncCommands } ;
4
4
use serde:: { de:: DeserializeOwned , Serialize } ;
5
5
use std:: { fmt:: Display , marker:: PhantomData , time:: Duration } ;
6
6
use typed_builder:: TypedBuilder ;
14
14
namespace : String ,
15
15
#[ builder( setter( into) ) ]
16
16
prefix : String ,
17
- redis_conn : multiplex_pool :: Pool < ConnectionManager > ,
17
+ redis_conn : RedisPool ,
18
18
ttl : Duration ,
19
19
20
20
// Type phantom data
@@ -28,11 +28,7 @@ impl<K, V> Redis<K, V>
28
28
where
29
29
K : ?Sized ,
30
30
{
31
- pub fn new < P > (
32
- redis_conn : multiplex_pool:: Pool < ConnectionManager > ,
33
- prefix : P ,
34
- ttl : Duration ,
35
- ) -> Self
31
+ pub fn new < P > ( redis_conn : RedisPool , prefix : P , ttl : Duration ) -> Self
36
32
where
37
33
P : Into < String > ,
38
34
{
@@ -55,22 +51,20 @@ where
55
51
{
56
52
#[ instrument( skip_all, fields( %key) ) ]
57
53
async fn delete ( & self , key : & K ) -> Result < ( ) > {
58
- let mut conn = self . redis_conn . get ( ) ;
59
54
let key = self . compute_key ( key) ;
60
55
61
56
debug ! ( %key, "Deleting cache entry" ) ;
62
- conn . del ( key) . await ?;
57
+ self . redis_conn . del ( key) . await ?;
63
58
64
59
Ok ( ( ) )
65
60
}
66
61
67
62
#[ instrument( skip_all, fields( %key) ) ]
68
63
async fn get ( & self , key : & K ) -> Result < Option < V > > {
69
- let mut conn = self . redis_conn . get ( ) ;
70
64
let key = self . compute_key ( key) ;
71
65
72
66
debug ! ( %key, "Fetching cache entry" ) ;
73
- if let Some ( serialised) = conn . get :: < _ , Option < String > > ( & key) . await ? {
67
+ if let Some ( serialised) = self . redis_conn . get :: < Option < String > , _ > ( & key) . await ? {
74
68
let mut serialised_bytes = serialised. into_bytes ( ) ;
75
69
let deserialised = simd_json:: from_slice ( & mut serialised_bytes) ?;
76
70
Ok ( Some ( deserialised) )
@@ -81,12 +75,19 @@ where
81
75
82
76
#[ instrument( skip_all, fields( %key) ) ]
83
77
async fn set ( & self , key : & K , value : & V ) -> Result < ( ) > {
84
- let mut conn = self . redis_conn . get ( ) ;
85
78
let key = self . compute_key ( key) ;
86
79
let serialised = simd_json:: to_string ( value) ?;
87
80
88
81
debug ! ( %key, ttl = ?self . ttl, "Setting cache entry" ) ;
89
- conn. set_ex ( key, serialised, self . ttl . as_secs ( ) ) . await ?;
82
+ self . redis_conn
83
+ . set (
84
+ key,
85
+ serialised,
86
+ Some ( Expiration :: EX ( self . ttl . as_secs ( ) as i64 ) ) ,
87
+ None ,
88
+ false ,
89
+ )
90
+ . await ?;
90
91
91
92
Ok ( ( ) )
92
93
}
0 commit comments