1 unstable release

0.1.1 May 29, 2021
0.1.0 May 29, 2021
0.0.1 Apr 28, 2021

#184 in Caching

Download history 25/week @ 2024-07-26 64/week @ 2024-08-02 32/week @ 2024-08-09 17/week @ 2024-08-16 16/week @ 2024-08-23 54/week @ 2024-08-30 72/week @ 2024-09-06 47/week @ 2024-09-13 36/week @ 2024-09-20 21/week @ 2024-09-27 99/week @ 2024-10-04 160/week @ 2024-10-11 110/week @ 2024-10-18 134/week @ 2024-10-25 60/week @ 2024-11-01 32/week @ 2024-11-08

385 downloads per month
Used in hitbox-actix

MIT license

65KB
1.5K SLoC

hitbox

Build status Coverage Status

Hitbox is an asynchronous caching framework supporting multiple backends and suitable for distributed and for single-machine applications.

Framework integrations

Features

  • Automatic cache key generation.
  • Multiple cache backend implementations:
  • Stale cache mechanics.
  • Cache locks for dogpile effect preventions.
  • Distributed cache locks.
  • Detailed metrics out of the box.

Backend implementations

  • Redis
  • In-memory backend

Feature flags

  • derive - Support for Cacheable trait derive macros.
  • metrics - Support for metrics.

Restrictions

Default cache key implementation based on serde_qs crate and have some restrictions.

Documentation

Example

Dependencies:

[dependencies]
hitbox = "0.1"

Code:

NOTE: Default cache key implementation based on serde_qs crate and have some restrictions.

First, you should derive Cacheable trait for your struct or enum:

use hitbox::prelude::*;
use serde::{Deserialize, Serialize};

#[derive(Cacheable, Serialize)] // With features=["derive"]
struct Ping {
    id: i32,
}

Or implement that trait manually:

use hitbox::{Cacheable, CacheError};
struct Ping { id: i32 }
impl Cacheable for Ping {
    fn cache_key(&self) -> Result<String, CacheError> {
        Ok(format!("{}::{}", self.cache_key_prefix(), self.id))
    }

    fn cache_key_prefix(&self) -> String { "Ping".to_owned() }
}

Dependencies

~12MB
~197K SLoC