C#接觸減少,希望大家能給一些相關方面的指導,在這先說聲謝謝。
目前在做一個黑名單的功能,大致情況就是程式每秒會收到最高50次訊息,每條訊息都會有UserId這個引數,那么我根據這個UserId去匹配黑名單,若在黑名單中則不做任何回應。
我原本的設計是考慮將黑名單保存在資料庫里,但總覺得訪問太頻繁,再加上黑名單考慮百萬級別左右的資料。擔心效率不高,所以考慮使用快取來處理。新增的黑名單用同步到每個客戶端機中。
想過類似要服務端的redis,客戶又需要安裝服務端太麻煩。
我也查過些相關資料,就是不知道哪些能夠夠確保每秒50次左右的匹配又能保證執行效率的方法。
有什么好的解決方案嗎?還望各位不吝賜教。
uj5u.com熱心網友回復:
MemoryCachehttps://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.caching.memorycache
要添加System.Runtime.Caching參考。
uj5u.com熱心網友回復:
隨意的,memorycache可以。黑名單資料不是太多的話,哪怕你直接放List<T>也沒關系。
uj5u.com熱心網友回復:
系統啟動開始讀資料庫黑名單,存放到List 每次linq匹配list就行,list沒有這個黑名單添加到list并寫入資料庫uj5u.com熱心網友回復:
別問,直接做。很多程式員就是喜歡各種糾結,這個好那個差。總是喜歡說的多做的少
對于你這個要求,我們說別問直接做。你只需要保證抽象即可。作為快取微軟已經給了抽象了 Exits,Get,AddOrUpdate,Romve等通用方法,同時也在netcore抽象了IChangeToken(這個可以后續做變更依賴,過期回呼等功能)
so,我們說直接做,不要糾結這個好那個差。無論你后面用啥其實只是new的不同,而不是什么這個好,那個差
uj5u.com熱心網友回復:
我們為啥這么說,很簡單https://www.nuget.org/packages?q=Microsoft.Extensions.Caching
來看這里,看看微軟和老外們是否跟天朝程式員一樣糾結
人家不糾結,所有的一切從Microsoft.Extensions.Caching.Abstractions 抽象開始
剩下的就不是這個好,那個壞。
而是你想怎么new了。
new 一個Microsoft.Extensions.Caching.Memory 沒毛病
new 一個Microsoft.Extensions.Caching.SqlServer 沒毛病
new 一個Microsoft.Extensions.Caching.Redis 依舊沒毛病
uj5u.com熱心網友回復:
System.Web.HttpRuntime.Cache.Add("Jsapi_ticket", strTicket, null, DateTime.Now.AddSeconds(時間), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, null);你把黑名單扔這里, 設定個作廢時間, 當有修改黑名單的時候, 修改資料庫同步到這個快取里
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/22809.html
標籤:C#
