hi,everyone !真的是很久很久沒有update blog了,由於最近忙着備考,沒有時間對《數據結構與算法》進行研究學習了。因此,blog一直未更新。today is Friday,內心比較輕鬆,(哈哈,上班族懂個人感覺),有時間寫篇技術文章了。正好,最近研究了一些新技術,這篇文章權當對技術的梳理概括吧。子曰:」溫故而知新,能夠爲師也.」對於knowledge,咱們必定要時常複習、thought、概括、practice.只有這樣,咱們才能真正的掌握它。Einstein曾經說過:if you can’t explain it simply, you don’t understand it as well enough .判斷咱們掌握knowledge的程度的方法是,將knowledge簡單清楚的講給別人聽。這也是,寫blog的好處,必定要掌握紮實,能本身思考,本身能夠講的明白。好了,廢話很少說了,Let’s Go!web
最近在研究公司項目中的緩存模塊,在研究緩存模塊的過程當中,學到了不少以前沒有接觸到的東西。以前,本身沒有接觸過緩存。在學習過公司的緩存模塊後,如今對緩存的理解是這樣的:算法
緩存就是將咱們在項目中常用的數據,或是常常訪問的頁面存起來。第一次,會去訪問數據庫讀取數據,在讀取數據後,會把數據存入內存中。第二次再訪問,直接去內存中讀取,而再也不訪問數據庫。緩存的優勢就是能夠提升訪問效率,優化項目。Note:本身的理解,不必定正確。shell
.net,自己有一套本身的緩存機制,它是把緩存存入內存中的。可是,今天咱們不研究.net的緩存。今天,咱們來一塊兒認識一個New Friend, she name is Fabric. APPFABRIC 是Microsoft推出東西。Windows Server AppFabric 擴展了 Windows Server .爲 Web 應用程序和中間層服務提供加強的託管、管理和緩存功能。今天咱們只講她的緩存功能,感興趣的朋友能夠Go http://msdn.microsoft.com/zh-cn/library/ee677312.aspx 研究一下。數據庫
你們思考一個場景,五個客戶端訪問項目,就會生成5份緩存。這些緩存都存在了內存中,這就形成了浪費。那麼Fabric 的分佈式緩存就是爲了解決這個問題出現的。編程
fabric的緩存功能是這樣工做的,把多個服務器組成一個緩存羣集,這些個服務器存放緩存,程序統一訪問這些緩存羣集,服務器的緩存是以window server 方式運行的。windows
你們看下圖:緩存
上圖就是Fabric的組件,我給你們一一來介紹一下他們。服務器
緩存主機:就是安裝了Fabric服務的存放緩存用來供程序訪問的服務器。數據結構
緩存羣集:多個緩存主機構成了緩存羣集.Note:同個緩存羣集內的緩存主機是共享的。For Example:程序建立了一個緩存,放在了緩存主機A中,那麼程序未來訪問緩存主機B,也是能夠獲得緩存的。更新也是同樣。分佈式
緩存服務器:就是用來承載緩存主機的服務器.
羣集配置存儲位置:一個緩存羣集須要配置,須要配置文件。
PowerShell:Fabric是基於PowerShell來管理緩存服務的。
緩存客戶端:就是咱們的項目,就是須要訪問緩存的項目。
GO http://www.microsoft.com/zh-cn/download/details.aspx?id=15848 下載Fabric software.
安裝很簡單的,可是,她要求你的本機必須安裝有.net 3.5。這裏,重點講一下她的配置.
安裝成功後,咱們能夠經過她自帶的配置工具,來配置咱們的Fabric。
這個頁面是用來配置Fabric的託管、監控功能的。咱們Ignore了,繼續下一步.
上圖中的Set Caching Service configuration單選框要勾上,這是fabric緩存配置。
Caching Service account,咱們須要指定windows用戶來管理緩存服務。這個帳戶須要有管理員權限
Caching Service configuration provider:
是選擇配置方式,.sdk說,緩存服務器若是是在工做組中,那麼就要選擇XML。Note:本人也是剛接觸,不是特別瞭解。
File share:須要你在緩存服務器上,建立一個共享文件夾。這個文件夾必須可以另其餘緩存服務器訪問到。由於,它存放的是咱們緩存羣集的XML配置文件。若是是第一次配置緩存羣集,就選擇New Cluster.未來爲其餘緩存集成員配置時,就能夠選擇Join Cluster.
Cluster Size:.它是Limit cache Cluster 的個數的,咱們能夠控制緩存集中的緩存主機個數。
配置這些,咱們經過Power shell ,來查看一下咱們的配置。
以管理員身份運行Power shell.輸入search command,來看一下緩存服務。Get-CacheHost 獲得下圖:
從圖中,能夠看到 Service Status is DOWN, 咱們須要將服務開啓。
開始服務命令,須要參數。咱們須要設置參數
$myhost=Get-Cache
Start-CacheHost $myhost.HostName $myhost.portNO
執行完以後,服務已經開啓了。咱們查看看一下:
Get-CacheHost
執行後以下圖:
Service Status已是UP狀態了。說明服務已經開啓了。
可是,此時在客戶端使用service以前,管理員應當給客戶端分配windows帳戶的訪問權。Note:這個地方不是太懂,本身測試時,只是給本機的windows帳戶分配訪問權限。就是說,本機是緩存服務器又是客戶端服務器。
Get-cacheallowedclientaccounts 命令,查看容許訪問Service的客戶端帳戶有哪些.
咱們是第一次配置,因此當咱們輸入命令查看被容許訪問的客戶端帳戶時,會出現警告語。此時,咱們輸入分配權限命令:Grant-CacheAllowedClientAccount($env:UserDomain+」\」+$env:UserName)
此時,客戶端就能夠訪問咱們的Service了。
接下來,咱們來經過項目調用Service。首先,咱們須要在緩存服務器上創建一個緩存。New-Cache Default 輸入建立緩存的命令 其中Default是緩存名稱。客戶端經過這個Default來獲取緩存信息。
咱們來看一下客戶端的代碼:
首先咱們須要在web.config中配置一下:
<?xml version="1.0" encoding="utf-8"?> <!-- 有關如何配置 ASP.NET 應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <configSections> <!-- required to read the <dataCacheClient> element --><section name="dataCacheClient"
type
="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0
, Culture=neutral, PublicKeyToken=31bf3856ad364e35
" allowLocation="true"
allowDefinition
="Everywhere"/>
</configSections><dataCacheClient requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1"> <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/> <clientNotification pollInterval="300" maxQueueLength="10000"/> <hosts> <!--<host name="10.30.1.145" cachePort="22233"/>--> <host name="192.168.200.1" cachePort="22233"/> </hosts> <securityProperties mode="Transport" protectionLevel="EncryptAndSign" /> <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456"
maxBufferSize
="8388608" maxOutputDelay="2" channelInitializationTimeout="60000"
receiveTimeout
="600000"/> </dataCacheClient>
<system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> </configuration>
代碼塊中高亮部分,就是咱們須要的配置信息。配置完這些信息,咱們還須要引用四個類庫。這四個類庫是安裝完Fabric,就會有的。他們位於\AppFabric 1.1 for Windows Server這個文件夾中:
Microsoft.ApplicationServer.Caching.Core.dll Microsoft.ApplicationServer.Caching.Client.dll Microsoft.WindowsFabric.Data.dll Microsoft.WindowsFabric.Common.dll
咱們的客戶端的程序,是這樣來測試Fabric緩存的。咱們經過Update、Get、Delete 、Create頁面,來建立、修改、獲取、刪除咱們的緩存信息。緩存中存放的是咱們經過Create的頁面建立的Order實體信息。
咱們會用到如下幾個類:
ICacheController.cs:
namespace SampleWebApp{ ///<summary> ///緩存類的公共接口,包括了對緩存的增刪改查的方法。 ///</summary> public interface ICacheController { ///<summary> ///判斷該鍵值的數據在緩存中是否存在 ///</summary> ///<param name="key">鍵值</param> ///<returns>存在返回True,不存在返回False</returns> bool HasTheKey(String key); ///<summary> ///將數據插入緩存中,數據會在插入緩存中配置時間以後,自動刪除 ///</summary> ///<param name="key">數據在緩存中的鍵值</param> ///<param name="value">數據</param> ///<param name="timespan">刪除數據的時間間隔</param> ///<returns>插入成功,返回True,不然返回False</returns> bool AddDataWithAbsExpire(string key,object value,TimeSpan timespan); ///<summary> ///從緩存中獲取數據 ///</summary> ///<param name="key">數據在緩存中的鍵值</param> ///<returns>有返回要獲取的在緩存中的數據,沒有則返回NULL</returns> object GetData(string key); ///<summary> ///把內存中鍵值爲key的數據進行更行 ///</summary> ///<param name="key">數據在緩存中的鍵值</param> ///<param name="value">要更新的數據</param> ///<returns>更新成功返回True,不然返回False</returns> bool UpdateData(string key,object value); ///<summary> ///把內存中鍵值爲key的數據進行刪除 ///</summary> ///<param name="key">數據在緩存中的鍵值</param> ///<returns>刪除成功返回True,不然返回False</returns> bool RemoveData(string key); } }
CacheUtil.cs:
public static class CacheUtil { //緩存工廠變量,獲取緩存實例。 private static DataCacheFactory _factory=null; //緩存實例變量 private static DataCache _cache=null; public static DataCache GetCache() { if(_cache!=null) return _cache; //定義緩存服務器列表 //List<DataCacheServerEndpoint> servers=new List<DataCacheServerEndpoint>; //web.config文件中已經配置了,這裏不須要配置了。客戶端配置緩存功能,能夠編程配置(實例化配置對象),也能夠XML配置.(web.config) //servers.Add(new DataCacheServerEndpoint("10.30.1.145",22233)); //servers.Add(new DataCacheServerEndpoint("10.30.1.146",22233)); //建立緩存配置對象 DataCacheFactoryConfiguration configuration=new DataFactoryConfiguration(); //設置緩存配置的緩存服務器列表 //configuration.servers=servers; //爲本地緩存設置默認屬性(本地緩存禁用) configuration.LocalCacheProperties=new DataCacheLocalCacheProperies(); //禁用跟蹤,以免信息/web頁面的詳細信息 DataCacheClientLogManager.changelogLevel(System.Diagnostics.TraceLevel.off); _factory=new DataCacheFacotry(configuration); //得到默認命名緩存 _cache=_factory.GetCache("default"); return _cache; } }
CacheFactory.cs
namespace SampleWebApp { //返回ICacheController實例 public class CacheFactory { pubic static ICacheController GetInstance() { ICacheController cacheInterface=new CacheControllerF(); return cacheInterface; } } }
CacheControllerF.cs
namespace SampleWebApp { //實現ICacheController接口 public class CacheControllerF:ICacheController { private DataCache cache; //構造函數 public CacheControllerF() { cache=CacheUtil.GetCache(); } public bool HasTheKey(string key) { if(cache.Get(key)!=null) return true; return false; } public bool AddDataWithAbsExpire(string key,object value,TimeSpan timeout) { if(!HasTheKey(key)) { cache.Add(key,value,timeout); }else { return false; } } public object GetData(string key) { object object=cache.Get(key); return object; } public bool updateData(string key,object value) { cahche.put(key,value); return true; } public bool RemoveData(string key) { return cache.Remove(key); } } }
以上就是我對APPFABRIC的學習認識。只是一點點皮毛,還需繼續研究。