1. 程式人生 > >Redis在三層服務框架中應用(一)——Redis與Model的結合

Redis在三層服務框架中應用(一)——Redis與Model的結合

個人宣告:本系列所有文章旨在拋磚引玉,為有興趣深入使用Redis的同學提供一些參考。本系列所有文章純屬原創,均是筆者在實際工作中的總結。本文所有引用的MDB系列元件均由米多網路架構部提供,在此向架構部表示感謝。筆者經驗能力有限,如有不適之處還請多多指教。

一、為什麼要使用Redis?

  • Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
  • Redis效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。

二、如何使用Redis?

  •  封裝Redis方法
       1. 引用MDB.UCC元件

              

2.建立一個靜態類,命名為UCC,類中將封裝增、刪、查三個靜態方方法,形成閉環邏輯,方便業務層直接引用:

            1).設定快取的方法

        /// <summary>
        /// 設定快取
        /// </summary>
        /// <param name="key">快取key</param>
        /// <param name="value">快取值</param>
        /// <param name="time">有效期</param>
        public static bool Setvalue(string key, string value, int time = 0)
        {
            var kvprovider = CacheFoundation.GetKVCacheProvider();
            bool flag = kvprovider.SetValue<string>(key, value, CachevisitType.PrivateType, time);
            return flag;
        }

          2).獲取快取的方法     

        /// <summary>
        /// 獲取快取值
        /// </summary>
        public static T Getvalue<T>(string key)
        {
            var kvprovider = CacheFoundation.GetKVCacheProvider();
            var value = kvprovider.GetValue<T>(key, CachevisitType.PrivateType);
            return value;
        }

            3).清除快取的方法

        /// <summary>
        /// 刪除快取 針對所有的key
        /// </summary>
        /// <param name="key"></param>
        public static bool Delete(string key)
        {
            return CacheFoundation.DeleteKey(key, CachevisitType.PrivateType);
        }

  • 在業務層中使用UCC——model與UCC的巢狀使用

       在一般專案中,如果不使用快取,即使ORM框架的效能再好,資料庫也會成為系統的效能瓶頸。在本專案中使用了MDB組建中的Goose框架,框架中封裝了增(Add)、刪(Delete)、改(Update)、查(Select)方法。

        1. 思路解析一——獲取model

          在GetModel方法中,首先從Redis快取中獲取model資訊:1)若model為空,說明快取中無資料,從資料庫中查詢資料,返回model,並將結果儲存在Redis快取中;2)反之,直接返回快取中的model。程式碼如下:

        /// <summary>
        /// 從快取中獲取model資訊
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Emoji GetModel(int id)
        {
            string key = string.Format(Key.emoji_key,id);
            Emoji model = null;
            model = UCC.Getvalue<Emoji>(key);
            if (model == null)
            {
                Expression<Func<Emoji, bool>> where = p => p.ID==id;
                model = base.GetModel(where);
                UCC.Setvalue<Emoji>(key,model);
            }
            return model;
        }

        2. 思路解析二——更新model

            在Update方法中,更新model的同時清除快取,與GetModel方法形成閉合。程式碼如下:

         /// <summary>
        /// 更新model資訊
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool Update(Emoji model)
        {
            bool isok = false;
            Expression<Func<Emoji, bool>> where = m => m.ID == model.ID;
            isok = base.Update(where, model) > 0 ? true : false;
            if (isok)
            {
                string key = string.Format(Key.emoji_key, model.ID);
                isok = UCC.Remove(key);
            }
            return isok;
        }

三、總結

       在業務層中, 通過GetModel和Update方法,實現Model與Redis快取的高度融合,即使在高併發的情況下,只需要查詢一次資料庫,將資料庫的壓力分擔給了Redis,利用Redis的高效能來處理高併發問題。筆者希望通過這個例子能夠起到拋磚引玉的效果。在本系列的下一篇中,筆者會講解一些更復雜的應用場景。

相關推薦

Redis服務框架應用——RedisModel結合

個人宣告:本系列所有文章旨在拋磚引玉,為有興趣深入使用Redis的同學提供一些參考。本系列所有文章純屬原創,均是筆者在實際工作中的總結。本文所有引用的MDB系列元件均由米多網路架構部提供,在此向架構部表示感謝。筆者經驗能力有限,如有不適之處還請多多指教。一、為什麼要使用Red

【Asp.Net MVC+EF+架構】詳解初見

前言: 這個專案是小編我進入公司開始全面重頭開始著手的第一個專案,在寶寶的IT生涯裡這是一個里程碑,有著與眾不同的意義。那麼在之後小編會從頭至尾的寫一組關於Asp.Net MVC+EF+三層架構框架

NET快取框架CacheManager在混合式開發框架應用1-CacheManager的介紹和使用 基於C#的MongoDB資料庫開發應用4--Redis的安裝及使用

在我們開發的很多分散式專案裡面(如基於WCF服務、Web API服務方式),由於資料提供涉及到資料庫的相關操作,如果客戶端的併發數量超過一定的數量,那麼資料庫的請求處理則以爆發式增長,如果資料庫伺服器無法快速處理這些併發請求,那麼將會增加客戶端的請求時間,嚴重者可能導致資料庫服務或者應用服務直接癱瘓。快取方案

.NET快取框架CacheManager在混合式開發框架應用1-CacheManager的介紹和使用 基於C#的MongoDB資料庫開發應用4--Redis的安裝及使用

在我們開發的很多分散式專案裡面(如基於WCF服務、Web API服務方式),由於資料提供涉及到資料庫的相關操作,如果客戶端的併發數量超過一定的數量,那麼資料庫的請求處理則以爆發式增長,如果資料庫伺服器無法快速處理這些併發請求,那麼將會增加客戶端的請求時間,嚴重者可能導致資料庫服務或者應用服務直接癱瘓。快取方案

Maven專案shiro框架認證授權的應用

<!-- 配置shiro框架的過濾器工廠物件 --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><!-- 注入安全管理器物件 --><propert

OPENCV----在APP性能測試應用

核心 color frame pan ems span urn sqrt || 應用項目: APP的性能測試 應用場景: APP啟動速度 視頻開播速度 加載速度 等~~ 緣來: 基於APP日誌和UiAutomator的測試方案,測試結果不能直白且精確的

.NET使用Redis之ServiceStack.Redis學習安裝簡單的運行

arraylist write client cli ring blog 控制臺 創建 spa 1.下載ServiceStack.Redis PM> Install-Package ServiceStack.Redis 2.vs中創建一個控制臺程序 class Pro

java的棧Stack的基本使用和應用

string emp tac logs tor str col () bject 棧 定義  棧是一種只能在一端進行插入或刪除操作的線性表。(先進後出表) java中的Stack繼承Vector 實例化 Stack stack=new Stack(); 基本使用 判斷是

貝葉斯在機器學習應用

需要 基礎 under 情況下 學生 意義 span 公式 ext 貝葉斯在機器學習中的應用(一) 一:前提知識 具備大學概率論基礎知識 熟知概率論相關公式,並知曉其本質含義/或實質意義

OSI模型物理的通訊形式總結

一、主機之間的資訊的互動方式 1. 單向通訊(單工通訊) 即只能有一個方向的通訊而沒有反方向的互動。無線電廣播或有線電廣播以及電視廣播就屬於這種型別。 2.雙向交替通訊(半雙工通訊) 即通訊的雙方都可以傳送資訊,但不能同時傳送(也不能同時接收)。這種通訊方式是一方傳送另一方接收,

axios在vue應用—— 簡單呼叫

目錄 1. 安裝並引入axios 1.1 使用 npm/cnpm 安裝 1.2 在main.js檔案中引入axios 2. 使用axios請求本地json檔案 3. 將傳遞的json資料轉為FormData 3.1 引入qs 3.2 新增請求攔截器,將axios

scrapy爬蟲框架資料庫mysql的非同步寫入

####資料庫的非同步寫入 scrapy爬蟲框架裡資料庫的非同步寫入與同步寫入在程式碼上的區別也就在pipelines.py檔案和settings.py問價的區別,其他的都是一樣的。本文就介紹一下pipelines.py和settings.py檔案裡面是如何配置

SDN在雲端計算應用

2006斯坦福提出 網路控制平面與資料轉發平面分離; 集中控制代替逐臺裝置控制; 通過開放和可程式設計介面實現“軟體定義”。 傳統網路: 控制和轉發不分離 硬體和軟體緊耦合  (同一個廠商)

.Net Core應用框架Util介紹

  距離上次發文,已經過去了三年半,這幾年技術更新節奏異常迅猛,.Net進入了跨平臺時代,前端也被革命性的顛覆。 回顧   2015年,正當我還沉迷於JQuery + EasyUi的封裝時,突然意識到技術已經過時。   JQuery在面對更加複雜的UI需求時顯得力不從心,EasyUi雖然元件比較完善,但

大資料在生活有什麼應用

現在大資料的發展是飛快的,很多人聽說過大資料這個詞,認為大資料還是在實驗室中,其實並不是。大資料在我們的生活中也開始變得十分的廣泛,這是因為大資料應用的行業也越來越多了,我們使用大資料能夠幫助人們獲得更多的有價值的資訊,那麼大資料在生活中有什麼應用呢?下面就有我們為大家解答一下這個問題

最簡單的混合APP開發框架——搭建你的第一個Ionic應用

上次寫了一篇關於Ionic3的文章,但是對於從來沒有接觸過Ionic的開發者來說,可能不是太友好。為了讓更多的人瞭解這個非常好的混合應用開發框架,今天這篇文章主要介紹如何從零用最快的時間做一個Ionic APP。 一)為什麼是Ionic? 如果你以前從來沒有

Java應用簡易開發框架SAF介紹

概述 SAF是一套簡易的開發Java應用系統的框架。SAF就是Simple Application Framework的縮寫。 說到Java應用開發框架,早些年我們用得最多的是Spring+Struts+Hibernate(簡寫為SSH),近些年用得更多的是Spring+SpringMVC+

深度學習在自然語言處理應用

資料整理篇 經典教材 Speech and Language Processing (第1,2版內容略陳舊,第三版很入時, 但有些重要章節沒放在網上) https://web.stanford.edu

strange IOC框架 塔防遊戲例項應用

原始碼在最後一章放上  主要理解分層 應用場景:進入對應的場景觸發相應的邏輯   1.載入場景時發出事件 void OnLevelWasLoaded(int level) {

分鐘理解Java字串String的儲存和賦值原理

可能很多java的初學者對String的儲存和賦值有迷惑,以下是一個很簡單的測試用例,你只需要花幾分鐘時間便可理解。 1.在看例子之前,確保你理解以下幾個術語: 棧:由JVM分配區域,用於儲存執行緒執行的動作和資料引用。棧是一個執行的單位,Java中一個執行緒就會相應有一個