1个不稳定版本
0.1.0 | 2021年4月24日 |
---|
#201 在 缓存
17KB
229 行
关于
CORNERSTORE是一个易于使用的内存缓存,具有可过期的项。它可以安全地在线程之间共享。
是一个用于易腐项的友好键值存储。就像现实生活中的街角商店一样,这个商店快速方便。它适用于读写密集型工作负载。所有键值对都可以设置可选的过期时间。
一个CornerStore
实例是线程安全的。它将其数据分布在128个分片中。
用法
CORNERSTORE是一个库。它没有命令行界面或监听套接字,如您可能从memcached或Redis期望的那样。
首先导入CornerStore
,然后使用new()
方法创建一个实例。为了方便起见,也可以在局部作用域中引入一些来自std::time
的类型,以及std::error::Error
特质。
use cornerstore::CornerStore;
use std::error::Error;
use std::time::{Duration, Instant};
// ...
fn main() -> Result<(), Box<dyn Error + '_>> {
let mut store = CornerStore::new();
// ...
Ok(())
}
API的一些示例
-
存储一个不会过期的项
let key = b"greeting"; let value = b"hello"; let expiry = None; store.set(key, expected_value, expiry)?;
-
存储一个在一分钟后过期的项
let key = b"greeting"; let value = b"hello from the future"; let expiry = Some(Instant::now() + Duration::new(60, 0)) store.set(key, expected_value, expiry)?;
-
检索一个项
let key = b"greeting"; if Some(value) = store.get(key)? { // warning - prints raw bytes println!("{:?}", value); };
-
检索一个项而不检查过期日期
let key = b"greeting"; if Some(value) = store.get_unchecked(key)? { // warning - prints raw bytes println!("{:?}", value); };
-
从存储中删除任何已过期的易腐项
store.evict()?;
cargo功能
safe-input
如果您知道您的存储不会受到DDoS攻击,您可以通过启用safe-input
来提高其性能。safe-input
使用fxcrate
进行哈希,这比Rust的默认值要快。
目标
作为许多客户端语言实现库。
需要帮助
- 是否可以避免在返回值时返回
Result<Option<K, V>>
?解开两次稍微有点不舒服。 - 如何进行基准测试?我尝试过jonhoo的
bustle
库,但将[u8]
流转换为f64
比较困难。
法律条款
关于法律条款的说明。虽然不幸,但这是重要的。
作者和版权
CORNERSTORE的原始组件由Tim McNamara (@timClicks) 编写。这些贡献的版权已转让给Fiorenza Limited (NZBN 9429042165200)。
CORNERSTORE的源代码和二进制分发均在Apache 2许可证下发布。请参阅LICENCE文件,了解您在此许可证下的权利和义务。
商标
CORNERSTORE是Fiorenza Limited (NZBN 9429042165200)的未注册商标。
消费者权益
如果您为自己使用CORNERSTORE,您有权根据消费者担保法获得强制权利。请记住,您正在免费使用从互联网上随机下载的软件。
依赖项
~2.5MB
~56K SLoC