學習到的

一:使用foreach(var item in 數據集) 循環添加到頁面利用非服務器控件前端

二:地址重寫 (利用XML)node

三:利用反射獲取數據列(emit獲取屬性)react

四:單件模式(加鎖)web

       

   #region 單件模式
        private static EfastServiceDAL dataAccess = null;
        static readonly object padlock = new object();
        public static EfastServiceDAL DataAccess
        {
            get
            {
                if (dataAccess == null)
                {
                    lock (padlock)
                    {
                        if (dataAccess == null)
                            dataAccess = new EfastServiceDAL();
                    }
                }
                return dataAccess;
            }
        }
        #endregion

 

五:緩存的使用(HttpRuntime.Cache)sql

六:Dapper(利用emit的一種輕量sql操做方法)數據庫

七:WPFjson

八:可視化的log記錄(log4net.ElasticSearch.ElasticSearchAppender瀏覽器

九:支付寶微信支付的調用緩存

       根據訂單調用支付寶接口回傳給前端數據而後返回獲得通知結果支付狀態服務器

十:圖片存儲在第三方又拍雲(將圖片上傳到又拍雲,保存連接到數據庫,上傳圖片也是使用的圖片流HttpPostedFileBaseInputStream對象 ,讀取對象爲BinaryReader 的ReadBytes 轉爲byte[]發送請求)

      將圖片連接轉爲image流 

      WebRequest imgR = WebRequest.Create(imgurl);
      img = Image.FromStream(imgR.GetResponse().GetResponseStream());

 

十一:react前端的應用

十二:須要對庫存鎖定避免超賣的狀況等

十三:註冊填寫帳戶密碼,次數過多則需填寫驗證碼

十四:關於使用委託和表達式樹

十五:依賴注入

十六:sql的執行helper

十七:GraphQL的使用

十八:多線程和異步的使用

十九:分頁操做

二十:權限管理

 

  • 5個等級的緩存
    1. 1級是網絡級緩存,緩存在瀏覽器,CDN以及代理服務器中   (舉個例子:每一個幫助頁面都進行了緩存,訪問一個頁面的代碼很是簡單)
    2. 2級是由.net框架 HttpRuntime.Cache完成,在每臺服務器的內存中。
    3. 3級Redis,分佈式內存鍵值存儲,在多個支撐同一個站點的服務器上共享緩存項。
    4. 4級SQL Server Cache,整個數據庫,全部數據都被放到內存中。
    5. 5級SSD。一般只在SQL Server預熱後才生效。

 

緩存

因爲緩存的頁面是以json格式的數據傳輸給前端調用,緩存爲json格式的數據

使用到了HttpRuntime.Cache來緩存json數據到內存中

   一:先查找是否存在此json文件,若存在則返回此緩存名稱內容,若不存在則刪除此緩存的內容

           定義爲 ActionResult能夠返回爲 FilePathResult   (寫入內存的文件內容) 並賦值給ActionResult

 二:不存在json文件則須要從新查詢並重寫入內存中,並添加緩存鍵值

          建立文件目錄並在目錄中寫入文件   將 string 類型的轉爲  ContentResult類型,在將ContentResult.Content的文件寫入,最後返回 FilePathResult (寫入內存的文件內容) 並賦值給ActionResult

 

            FileStream fs = null;
            StreamWriter sw = null;
            try
            {
                fs = new FileStream(file_path, FileMode.Create);//文件的絕對路徑
                sw = new StreamWriter(fs);
                sw.Write(content);
            }
            catch
            {

            }
            finally
            {
                if (sw != null) //釋放
                    sw.Close();
                if (fs != null)
                    fs.Close();
            }

   添加緩存的這裏有一些xml和緩存對應的沒明白

   

        public virtual void AddObject(string xpath, object o)
        {
            lock (lockHelper)
            {
                //當緩存到期時間爲0或負值,則再也不放入緩存
                if (cs.TimeOut <= 0) return;

                //整理XPATH表達式信息
                string newXpath = PrepareXpath(xpath);
                int separator = newXpath.LastIndexOf("/");
                //找到相關的組名
                string group = newXpath.Substring(0, separator);
                //找到相關的對象
                string element = newXpath.Substring(separator + 1);

                XmlNode groupNode = objectXmlMap.SelectSingleNode(group);

                //創建對象的惟一鍵值, 用以映射XML和緩存對象的鍵
                string objectId = string.Empty;

                XmlNode node = objectXmlMap.SelectSingleNode(PrepareXpath(xpath));
                if (node != null)
                {
                    objectId = node.Attributes["objectId"].Value;
                }

                if (objectId == "")
                {
                    groupNode = CreateNode(group);
                    objectId = Guid.NewGuid().ToString();
                    //創建新元素和一個屬性 for this perticular object
                    XmlElement objectElement = objectXmlMap.OwnerDocument.CreateElement(element);
                    XmlAttribute objectAttribute = objectXmlMap.OwnerDocument.CreateAttribute("objectId");
                    objectAttribute.Value = objectId;
                    objectElement.Attributes.Append(objectAttribute);
                    //爲XML文檔創建新元素
                    groupNode.AppendChild(objectElement);
                }
                else
                {
                    //創建新元素和一個屬性 for this perticular object
                    XmlElement objectElement = objectXmlMap.OwnerDocument.CreateElement(element);
                    XmlAttribute objectAttribute = objectXmlMap.OwnerDocument.CreateAttribute("objectId");
                    objectAttribute.Value = objectId;
                    objectElement.Attributes.Append(objectAttribute);
                    //爲XML文檔創建新元素
                    groupNode.ReplaceChild(objectElement, node);
                }

                //向緩存加入新的對象
                cs.AddObject(objectId, o);
            }

}
   protected static volatile System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;

/// <summary> /// 加入當前對象到緩存中 /// </summary> /// <param name="objId">對象的鍵值</param> /// <param name="o">緩存的對象</param> public virtual void AddObject(string objId, object o) { if (objId == null || objId.Length == 0 || o == null) { return; } //表示永不過時 if (TimeOut == 0) { webCache.Insert(objId, o, null, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, null); } else { webCache.Insert(objId, o, null, DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null); } }

  緩存移除

  將緩存的鍵值對移除,要用的時候判斷刪除內存中的文件

相關文章
相關標籤/搜索