pub struct BloomTokenLog(/* private fields */);展开描述
基于布隆过滤器的 TokenLog
可以参数化一个近似的最大分配字节数。最初将已使用的 token 存入一个哈希集合;一旦哈希集合过大,便会转换为一个布隆过滤器。这样可以实现内存占用随规模线性增长且有上限的形态。
基于 lifetime 将时间划分为若干时段,并在任意时刻为当前可能令未过期 token 过期的两个时段各维护一个过滤器。随着时间推移会不断轮换过滤器,以避免布隆过滤器的误判率随时间无限增长。
实现§
源代码§impl BloomTokenLog
impl BloomTokenLog
源代码pub fn new_expected_items(max_bytes: usize, expected_hits: u64) -> BloomTokenLog
pub fn new_expected_items(max_bytes: usize, expected_hits: u64) -> BloomTokenLog
使用一个近似最大内存占用以及每个过期周期内预期的校验 token 使用次数进行构造
会自动计算出最优的布隆过滤器 k 值。
trait 实现§
源代码§impl Default for BloomTokenLog
默认为最大 20 MiB 内存占用,并预期一百万次命中
impl Default for BloomTokenLog
默认为最大 20 MiB 内存占用,并预期一百万次命中
在默认的 2 周校验 token 有效期内,这相当于每 1.21 秒使用一次 token。
源代码§fn default() -> BloomTokenLog
fn default() -> BloomTokenLog
Returns the “default value” for a type. 更多信息
源代码§impl TokenLog for BloomTokenLog
impl TokenLog for BloomTokenLog
源代码§fn check_and_insert(
&self,
nonce: u128,
issued: SystemTime,
lifetime: Duration,
) -> Result<(), TokenReuseError>
fn check_and_insert( &self, nonce: u128, issued: SystemTime, lifetime: Duration, ) -> Result<(), TokenReuseError>
Record that the token was used and, ideally, return a token reuse error if the token may
have been already used previously 更多信息
自动 trait 实现§
impl !Freeze for BloomTokenLog
impl RefUnwindSafe for BloomTokenLog
impl Send for BloomTokenLog
impl Sync for BloomTokenLog
impl Unpin for BloomTokenLog
impl UnsafeUnpin for BloomTokenLog
impl UnwindSafe for BloomTokenLog
blanket 实现§
源代码§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
源代码§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息