C 中快取的使用

2021-09-29 03:27:34 字數 3575 閱讀 9641

快取的概念及優缺點在這裡就不多做介紹,主要介紹一下使用的方法。

duration:快取時間(秒為單位),必填屬性

2.使用微軟自帶的類庫system.web.caching

新手接觸的話不建議直接使用微軟提供的類庫,因為這樣對理解不夠深刻。所以在這裡我帶大家自己寫一套快取操作方法,這樣理解得更加清晰。

話不多說,**開敲。

一、首先,先模擬資料**。新建乙個類,寫乙個資料操作方法(該方法耗時、耗資源)

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

usingsystem.threading;

usingsystem.threading.tasks;

namespacecache

thread.sleep(2000);

returnresult;

}

}

}

二、編寫乙個快取操作類

2.1 構造乙個字典型容器,用於存放快取資料,許可權設為private ,防止隨意訪問造成資料不安全性

//快取容器 

private static dictionarycachedictionary = new dictionary();

2.2 構造三個方法(新增資料至快取容器、從快取容器獲取資料、判斷快取是否存在)

/// /// 新增快取

///

public static void add(string key, object value)

/// /// 獲取快取

///

public static t get(string key)

/// /// 判斷快取是否存在

///

///

///

public static bool exsits(string key)

三、程式入口編寫測試方法3.1 先看一下普通情況不適用快取,它的執行效率有多慢

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace cache

次請求------");

int result = datasource.getdatabydb(666);

console.writeline($"第次請求獲得的資料為:");}}

3.2 接下來,我們編寫快取試用方法。概念無非就是根據key前往字典容器裡查詢是否有相對應快取資料,有則直接呼叫,沒有則生成並存入字典容器裡。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace cache

次請求------");

//int result = datasource.getdatabydb(666);

int result = 0;

//key的名字一定要確保請求的準確性 datasource getdatabydb 666缺一不可

string key = "datasource_getdatabydb_666";

if (cachehelper.exsits(key))

else

console.writeline($"第次請求獲得的資料為:");}}

}}

3.3 我們看看加入快取之後的效率如何

四、可以看到,瞬間完成。事已至此,快取的使用基本是完成了。但是回過頭來我們想想看。乙個系統成百上千個地方使用快取的話,那豈不是要寫成百上千個if else判斷快取是否存在,然後獲取?

答案顯而易見,肯定不合理的。所以我們要對**進行優化。

4.1 快取操作類(cachehelper)編寫乙個通用的獲取方法

/// /// 快取獲取方法

///

///

/// 快取字典容器對應key

/// 委託方法 傳入操作物件

///

public static t getcache(string key, funcfunc)

else

return t;

}

4.2 程式入口進行呼叫,傳入的委託引數為lamad表示式優化後的**

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace cache

次請求------");

int result = 0;

//key的名字一定要確保請求的準確性 datasource getdatabydb 666缺一不可

string key = "datasource_getdatabydb_666";

//將需要執行的獲取資料操作編寫成委託傳入方法(重點)

//funcfunc = new func(() => );

result = cachehelper.getcache(key, () => datasource.getdatabydb(666));

console.writeline($"第次請求獲得的資料為:");}}

}}

到這裡,快取的使用基本結束了。最好值得一提的是,快取盡量在資料量小、重複查詢量大的情況下使用。因為快取也是要耗記憶體的,伺服器記憶體是有限的!

C 中快取的使用

快取的概念及優缺點在這裡就不多做介紹,主要介紹一下使用的方法。duration 快取時間 秒為單位 必填屬性 2.使用微軟自帶的類庫system.web.caching 新手接觸的話不建議直接使用微軟提供的類庫,因為這樣對理解不夠深刻。所以在這裡我帶大家自己寫一套快取操作方法,這樣理解得更加清晰。話...

spring boot 中的快取使用

借鑑 專案中用到登入,對使用者的操作太多,所以將使用者的資訊通過快取的方式。快取 ehcache 框架 spring boot 1.專案依賴 org.springframework.boot spring boot starter cache net.sf.ehcache ehcache 2.ehc...

C 使用Redis快取

redis是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api。從2010年3月15日起,redis的開發工作由vmware主持。從2013年5月開始,redis的開發由pivotal贊助。nuget新增servicesta...