庆军之菜鸟记录-定期检查并删除数据
不得不说,跟大佬们的差距是亿点点啊。
1 private async Task ExpiryScanLoop() 2 { 3 var cancelToken = _scanExpiryCancellationToken!.Token; 4 while (cancelToken.IsCancellationRequested == false) 5 { 6 try 7 { 8 await Task.Delay(_options.ExpiryKeyScanInterval, cancelToken); 9 using var sessionWrap = GetSessionWrap(); 10 using var iter = sessionWrap.Session.Iterate(); 11 while (iter.GetNext(out _) && cancelToken.IsCancellationRequested == false) 12 { 13 var key = iter.GetKey(); 14 var context = new StoreContext<ValueWrapper<TValue>>(); 15 var result = sessionWrap.Session.Read(key, context); 16 if (result.status.IsPending) 17 { 18 sessionWrap.Session.CompletePending(true); 19 context.FinalizeRead(out result.status, out result.output); 20 } 21 22 if (result.status.Found && result.output.HasExpired(_systemClock.NowUnixTimestamp())) 23 { 24 sessionWrap.Session.Delete(key); 25 } 26 } 27 } 28 catch (Exception ex) 29 { 30 _logger?.LogWarning("Exception thrown in expiry scan loop:{Ex}", ex); 31 } 32 } 33 }
这段代码摘抄于时总的FasterKv.Cache.Core.
如果是我,我只会timer然后1s一次的去执行。
补充初始化与结束
...init
private readonly CancellationTokenSource? _scanExpiryCancellationToken;
public TimeSpan ExpiryKeyScanInterval { get; set; } = TimeSpan.FromMinutes(5);
private void Dispose(bool _) { _scanExpiryCancellationToken?.Cancel();...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-03-20 上传图片遇到的问题