forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1use anyhow::Error;
2use redis::Client;
3use std::env;
4
5#[derive(Clone)]
6pub struct Cache {
7 pub client: Client,
8}
9
10impl Cache {
11 pub fn new() -> Result<Self, Error> {
12 let client =
13 redis::Client::open(env::var("REDIS_URL").unwrap_or("redis://127.0.0.1".into()))?;
14 Ok(Cache { client })
15 }
16
17 pub fn get(&self, key: &str) -> Result<Option<String>, Error> {
18 let mut con = self.client.get_connection()?;
19 let result: Option<String> = redis::cmd("GET").arg(key).query(&mut con)?;
20 Ok(result)
21 }
22
23 pub fn set(&self, key: &str, value: &str) -> Result<(), Error> {
24 let mut con = self.client.get_connection()?;
25 redis::cmd("SET")
26 .arg(key)
27 .arg(value)
28 .query::<()>(&mut con)?;
29 Ok(())
30 }
31
32 pub fn setex(&self, key: &str, value: &str, seconds: usize) -> Result<(), Error> {
33 let mut con = self.client.get_connection()?;
34 redis::cmd("SETEX")
35 .arg(key)
36 .arg(seconds)
37 .arg(value)
38 .query::<()>(&mut con)?;
39 Ok(())
40 }
41
42 pub fn del(&self, key: &str) -> Result<(), Error> {
43 let mut con = self.client.get_connection()?;
44 redis::cmd("DEL").arg(key).query::<()>(&mut con)?;
45 Ok(())
46 }
47}