<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      緩存的實(shí)現(xiàn)

      我們不是做第三方比如Redis等的緩存實(shí)現(xiàn),而是根據(jù)實(shí)際情況,基于C#上做一些環(huán)境變量的保存,方便項(xiàng)目使用。

      1、系統(tǒng)全局變量

      很多時(shí)候,在系統(tǒng)運(yùn)行開始,需要對(duì)系統(tǒng)的運(yùn)行參數(shù)進(jìn)行保存,以便供全局使用。

      代碼如下:
      public class PFTCacheObject { /// <summary> /// 字典 /// </summary> private
      static Dictionary<string, object> _dataDic = new Dictionary<string, object>();
      /// <summary> /// 定義一個(gè)靜態(tài)變量來保存類的實(shí)例 /// </summary> private static PFTCacheObject
      _session;/// <summary> /// 定義一個(gè)標(biāo)識(shí)確保線程同步 /// </summary> private static readonly
      object _locker = new object(); /// <summary> /// 單例 /// </summary> ///
      <returns>返回類型為Session</returns> public static PFTCacheObject Instance { get { if
      (_session ==null) { lock (_locker) { if (_session == null)//
      如果類的實(shí)例不存在則創(chuàng)建,否則直接返回 { _session = new PFTCacheObject(); } } } return _session; }
      } #region Remove 移除/// <summary> /// 刪除成員 /// </summary> /// <param
      name="name"></param> public void Remove(string name) { _dataDic.Remove(name); }
      /// <summary> /// 刪除全部成員 /// </summary> public void RemoveAll() {
      _dataDic.Clear(); } #endregion #region 本類的索引器/// <summary> /// 本類的索引器 ///
      </summary> /// <returns>返回Object成員</returns> public Object this[string index] {
      get { if (_dataDic.ContainsKey(index)) { Object obj = (Object)_dataDic[index];
      return obj; } return null; } set { if (_dataDic.ContainsKey(index)) {
      _dataDic.Remove(index); } _dataDic.Add(index,value); } } #endregion }
      這里使用一個(gè)靜態(tài)變量的Dictionary來進(jìn)行保存,所有項(xiàng)目均可以直接獲取。

      2、異步的數(shù)據(jù)緩存

      在web上面,很多時(shí)候都是使用的HttpContext.Current.Items進(jìn)行數(shù)據(jù)緩存,在.Net
      Framework框架上使用CallContext.LogicalSetData。在.Net Standard
      上面CallContext.LogicalSetData已經(jīng)不能使用了,替換他的方法是AsyncLocal。因?yàn)槲覀儸F(xiàn)在都是使用的是.Net
      Standard,并且我們項(xiàng)目并不僅僅是web,所以這里我們就只用使用AsyncLocal實(shí)現(xiàn)。

      代碼如下
      public class PFTCallContext { #region 共享數(shù)據(jù)庫(kù)連接 private static AsyncLocal<object
      > _asyncLocalConnectionOject =new AsyncLocal<object>(); /// <summary> ///
      設(shè)置共享數(shù)據(jù)庫(kù)連接 /// </summary> /// <param name="obj"></param> public static void
      SetConnectionOject(object obj) { _asyncLocalConnectionOject.Value = obj; } ///
      <summary> /// 獲取共享數(shù)據(jù)庫(kù)連接 /// </summary> /// <returns></returns> public static
      object GetConnectionOject() { return _asyncLocalConnectionOject.Value; } ///
      <summary> /// 清空共享數(shù)據(jù)庫(kù)連接 /// </summary> public static void
      ClearConnectionOject() { _asyncLocalConnectionOject.Value =null; } #endregion }
      這里我們就先定義一個(gè)當(dāng)前數(shù)據(jù)庫(kù)連接對(duì)象的緩存。如果還需要其他的定義,你可以直接實(shí)現(xiàn)。

      3、.Net Core 的MemoryCache

      本來這塊想使用.Net Framework框架中的cache的,但是.Net Core才是未來的大勢(shì),而且.Net
      Framework的cache已經(jīng)有很多的實(shí)現(xiàn)方法了,所以這里我就直接用.Net Core 的MemoryCache。.Net
      Core蝸牛也在學(xué)習(xí)中,相關(guān)的API也在不斷的研究,如果有問題,請(qǐng)大家?guī)兔m正。
      public static class PFTCache { public readonly static IMemoryCache
      _memoryCache;static PFTCache() { _memoryCache = new MemoryCache(Options.Create(
      new MemoryCacheOptions())); } #region 常規(guī)緩存 /// <summary> /// 獲取緩存的值 ///
      </summary> /// <param name="key"></param> /// <returns></returns> public static
      Object GetCache(string key) { return _memoryCache.Get(key); } /// <summary> ///
      移除緩存 /// </summary> /// <param name="key"></param> public static void Remove(
      string key) { _memoryCache.Remove(key); } /// <summary> /// 設(shè)置緩存 /// </summary>
      /// <param name="key"></param> /// <param name="value"></param> public static
      void SetCache(string key, Object value) { _memoryCache.GetOrCreate(key, entry
      => {return value; }); } /// <summary> /// 設(shè)置緩存(固定時(shí)間過期) /// </summary> ///
      <param name="key"></param> /// <param name="value"></param> /// <param
      name="absoluteExpiration"></param> public static void SetCacheAbsolute(string
      key, Objectvalue, int absoluteExpiration) { _memoryCache.GetOrCreate(key, entry
      => { entry.SetAbsoluteExpiration(TimeSpan.FromSeconds(absoluteExpiration));
      return value; }); } /// <summary> /// 設(shè)置緩存(滾動(dòng)時(shí)間過期) /// </summary> /// <param
      name="key"></param> /// <param name="value"></param> /// <param
      name="slidingExpiration"></param> public static void SetCacheSliding(string
      key, Objectvalue, int slidingExpiration) { _memoryCache.GetOrCreate(key, entry
      => { entry.SetSlidingExpiration(TimeSpan.FromSeconds(slidingExpiration));return
      value; }); } #endregion #region 文件依賴緩存 /// <summary> /// 文件依賴緩存 /// </summary>
      /// <param name="key"></param> /// <param name="fullName"></param> ///
      <returns></returns> public static string DependentCacheFile(string key, string
      fullName) { var basePath = PFTFile.GetDirectoryName(fullName); var fileName =
      PFTFile.GetFileName(fullName); var fileProvider =new
      PhysicalFileProvider(basePath);return _memoryCache.GetOrCreate(key, entry => {
      entry.AddExpirationToken(fileProvider.Watch(fileName));return
      PFTFile.IsExistFile(fullName) ? PFTFile.ReadFile(fullName) :string.Empty; }); }
      #endregion }
      好了,關(guān)于緩存這塊蝸牛就先說到這里。

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          亚洲区小说区激情区图片区 | 欧美大鸡 | 久久精品国产免费 | 天天肏逼 | 无码中文字幕视频 | 艳妇h圆房~h嗯啊在线观看 | 伊人网视频在线观看 | 五月天天堂 | 无码成人免费一区欧美加勒比 | 亚洲精品爆乳毛片 |