#cache #actor-model #key #upstream #read-write #in-memory

thingvellir

一个并发、无共享抽象,用于管理事物集合

38 个版本

0.0.14 2024 年 6 月 26 日
0.0.13 2024 年 3 月 29 日
0.0.11 2023 年 12 月 19 日
0.0.9 2023 年 9 月 1 日
0.0.0-alpha92020 年 3 月 9 日

并发 中排名第 153

Download history 10941/week @ 2024-04-27 6135/week @ 2024-05-04 11313/week @ 2024-05-11 29523/week @ 2024-05-18 13063/week @ 2024-05-25 11250/week @ 2024-06-01 24566/week @ 2024-06-08 10702/week @ 2024-06-15 14742/week @ 2024-06-22 13622/week @ 2024-06-29 13305/week @ 2024-07-06 5176/week @ 2024-07-13 9380/week @ 2024-07-20 8208/week @ 2024-07-27 8756/week @ 2024-08-03 15180/week @ 2024-08-10

每月下载量 42,273

MIT 许可证

170KB
3.5K SLoC

Þingvellir (thingvellir)

Build Status License Documentation Cargo

一个 Rust 库,允许你构建内存中的读写透传缓存。它底层使用基于 tokio 的分片、无共享actor模型。

给定一个结构体和一个上游,这个 抽象 处理数据的加载和提交。 thingvellir 的目的是放在数据库(例如 cassandrascylladb)前面,提供一个在数据库内部对“热点”数据进行内存缓存的方法。

thingvellir 提供了键值接口,抽象了数据库加载和持久化操作,允许你将业务逻辑编写为可以持久化到数据库的简单结构体。开箱即用,thingvellir 提供了一个上游实现,该实现将结构体持久化到 cassandra,使用简单的键值模式,其中值是使用 serde 序列化的 CBOR 形式。

thingvellir 处理对象过期,并允许配置有界内存数据集(thingvellir 将缓存多少键可以配置),并且键在过期时可以被删除(我们使用类似于 Redis 的随机过期探测),并且还维护一个概率 LRU 以在缓存满时删除键。

thingvellir 合并了对上游数据存储的读取和写入。如果你的数据模型适合延迟写入持久性(例如,你可以接受在数据提交到上游之前节点崩溃导致数据丢失的计数器),或者一个“热点”键可能被频繁查询,或者看到查询的突发,thingvellir 将确保上游只看到一个读取查询。写入持久性可以根据每个突变进行配置,允许 立即 提交或 延迟 提交(取决于你的应用程序可以容忍多少数据丢失。)

依赖项

~5–34MB
~496K SLoC