SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
淺談 ASP.NET Caching 技術與實踐
twMVC #26
 阿砮 Cheng-Ju Wu
 C#, ASP.NET MVC, WebAPI
http://mvc.tw
 資料庫每一次的查詢都是不小的開銷,例如:
 連結的開啟
 執行查詢指令
 當資料庫與應用伺服器不在同一個伺服器上時,還必須有遠程
調用、Socket的建立等開銷。
開始前
2
http://mvc.tw
 快取(Cache)是資料在記憶體中的臨時容器,從資料庫中
讀取的資料在快取中會有一份臨時拷貝。
 查詢某個資料時,先在快取中尋找是否有相對應的拷貝。
 有,直接返回資料。
 無,從資料庫查詢,返回資料。
 如此提昇應用程式讀取資料時的效能。
開始前
3
http://mvc.tw
開始前
4
http://mvc.tw
開始前
5
http://mvc.tw
開始前
6
 快取使用情境
 商店分類選單,時常出現於整個網站。
 資料異動頻率不高。
 將資料存放到快取,就能快速回應資料。
http://mvc.tw
開始前
7
 快取使用情境
 商店分類選單,時常出現於整個網站。
 資料異動頻率不高。
 將資料存放到快取,就能快速回應資料。
 那麼就開始主題吧
http://mvc.tw
 快取的類型,常見快取的作法
 快取的設計面向
 CacheProvider
 DataCacheService
 ASP.NET Core 快取實踐
綱要
8
http://mvc.tw
 Page Output Caching
 OutputCacheAttribute
 RedisOutputCacheProvider
 Application Caching
快取的類型
9
http://mvc.tw
OutputCache
10
http://mvc.tw
 [OutputCache(Duration = 60)]
 [OutputCache(Location = OutputCacheLocation.ServerAndClient,
Duration = 600, VaryByParam = "Id")]
OutputCache
11
[OutputCache(Duration = 60)]
public ActionResult Index()
{
var employees = from e in db.Employees
orderby e.ID
select e;
return View(employees);
}
http://mvc.tw
 設定完成後,這樣就有快取囉。
 方便、快速,好簡單。
 這麼冷的天氣,可以快點下班回家。
收工
12
http://mvc.tw
 實務上,不會這麼簡單…
但…
13
http://mvc.tw
 實務上不會把設定分散於各個 Action。
 造成管理、維護不便。
 可透過 OutputCacheProfile 設定與維護。
OutputCache
14
<caching>
<outputCacheSettings configSource="Cache.config" />
</caching>
http://mvc.tw
 OutputCacheProfile
OutputCache
15
http://mvc.tw
 如此,線上服務的 Web 伺服器各自有快取資料
OutputCache
16
快取資料 快取資料 快取資料
http://mvc.tw
 有可能因 Web 伺服器被訪問的機率不同,造成資料不一致。
OutputCache
17
快取資料 快取資料 快取資料
快取資料
http://mvc.tw
 有可能因 Web 伺服器被訪問的機率不同,造成資料不一致。
 那怎麼做,來達到資料一致性呢?
OutputCache
18
快取資料 快取資料 快取資料
快取資料
http://mvc.tw
 RedisOutputCacheProvider
 將快取資料從本地端轉移到 Redis Server
OutputCache 之 Redis
19
Install-Package Microsoft.Web.RedisOutputCacheProvider
<caching>
<outputCacheSettings configSource="Cache.config" />
<outputCache defaultProvider="RedisOutputCache">
<providers>
<clear />
<add name="RedisOutputCache“
type="Microsoft.Web.Redis.RedisOutputCacheProvider"
connectionString=“xxxxx"
applicationName="OutputCache:Dev:WebAPI:" />
</providers>
</outputCache>
</caching>
http://mvc.tw
 集中資料於 Redis Server (單台或分散式)
OutputCache 之 Redis
20
21
CacheProvider
http://mvc.tw
 發想於 nopCommerce https://goo.gl/khyY0e
 ICacheProvider
 MemoryCacheProvider
 NullCacheProvider
 RedisCacheProvider
 …
CacheProvider
22
http://mvc.tw
 發想於 nopCommerce https://goo.gl/khyY0e
 ICacheProvider
 MemoryCacheProvider
 NullCacheProvider
 RedisCacheProvider
 …
CacheProvider
23
http://mvc.tw
 ICacheProvider 方法簽章
CacheProvider
24
public interface ICacheProvider
{
T Get<T>(string key);
void Set(string key, object data, int cacheTime);
bool IsSet(string key);
void Remove(string key);
void RemoveByPattern(string pattern);
void Clear();
}
http://mvc.tw
 MemoryCacheProvider 實作
MemoryCacheProvider
25
public partial class MemoryCacheProvider : ICacheProvider
{
protected ObjectCache Cache { get { return MemoryCache.Default; } }
public T Get<T>(string key) { return (T)Cache[key]; }
public void Set(string key, object data, int cacheTime)
{
if (data == null) return;
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromSeconds(cacheTime);
Cache.Remove(key);
Cache.Add(new CacheItem(key, data), policy);
}
…..
}
http://mvc.tw
 MemoryCacheProvider + Autofac 設定
MemoryCacheProvider + Autofac
26
public class ProviderModule : Module
{
protected override void Load(ContainerBuilder builder)
{
var cacheProviderType = ConfigurationManager.AppSettings.Get("CacheProviderType");
builder
.RegisterType(Type.GetType(cacheProviderType))
.As<ICacheProvider>()
.InstancePerLifetimeScope();
}
}
http://mvc.tw
 AppSettings 配置
MemoryCacheProvider + Autofac
27
<appSettings>
<!-- CacheProvider -->
<add key="CacheProviderType" value="twmvc26samples.MemoryCacheProvider, twmvc26samples" />
<!--<add key="CacheProviderType" value="twmvc26samples.NullCacheProvider, twmvc26samples" />-->
<!--<add key="CacheProviderType" value="twmvc26samples.RedisCacheProvider, twmvc26samples" />-->
</appSettings>
http://mvc.tw
CacheProvider 使用
28
public ActionResult Index()
{
var cacheTime = 3;
List<Employee> result = null;
//// 1.從快取層取得資料
var cacheData = this._cacheProvider.Get<List<Employee>>("Key");
//// 2.找不到快取資料
if (cacheData == null)
{
//// 3.從服務層取得資料
result = this._employeeService.GetAll();
//// 4.將資料設定到快取
this._cacheProvider.Set("Key", result, cacheTime);
}
else
{
//// 3.快取有資料,直接回傳
result = cacheData;
}
return View(result);
}
http://mvc.tw
public ActionResult Index()
{
var cacheTime = 3;
List<Employee> result = null;
//// 1.從快取層取得資料
var cacheData = this._cacheProvider.Get<List<Employee>>("Key");
//// 2.找不到快取資料
if (cacheData == null)
{
//// 3.從服務層取得資料
result = this._employeeService.GetAll();
//// 4.將資料設定到快取
this._cacheProvider.Set("Key", result, cacheTime);
}
else
{
//// 3.快取有資料,直接回傳
result = cacheData;
}
return View(result);
}
CacheProvider 使用
29
取資料
Demo
30
http://mvc.tw
 當應用程式套用快取模組,資料流與快取強耦合。
 如此「服務層」無法在「沒有快取模組」下單獨運作。
 本地端,開發/偵錯情境
 關注點分離?
 在正式邏輯中,想要沒有快取時,只能先暫時拔掉快取模組。
 是否發生過開發/偵錯完成後,忘了補回快取模組?
CacheProvider
31
http://mvc.tw
public ActionResult Index()
{
var cacheTime = 3;
List<Employee> result = null;
//// 1.從快取層取得資料
var cacheData = this._cacheProvider.Get<List<Employee>>("Key");
//// 2.找不到快取資料
if (cacheData == null)
{
//// 3.從服務層取得資料
result = this._employeeService.GetAll();
//// 4.將資料設定到快取
this._cacheProvider.Set("Key", result, cacheTime);
}
else
{
//// 3.快取有資料,直接回傳
result = cacheData;
}
return View(result);
}
CacheProvider 使用
32
要測試就要拔掉 Cache Code ?
33
要測試就要拔掉 Cache Code ?
翻桌會比較快…
34Graph from https://goo.gl/1gdS5S
那就來看看有什麼解決方法
35
http://mvc.tw
 NullCacheProvider 實作
NullCacheProvider
36
public partial class NullCacheProvider : ICacheProvider
{
public T Get<T>(string key) { return default(T); }
public void Set(string key, object data, int cacheTime) { }
public bool IsSet(string key) { return false; }
public void Remove(string key) { }
public void RemoveByPattern(string pattern) { }
public void Clear() { }
}
http://mvc.tw
 切換註冊Type
 注入NullCache,如此不用手動拔除邏輯中的快取模組。
NullCacheProvider + Autofac
37
<appSettings>
<!-- CacheProvider -->
<!--<add key="CacheProviderType" value="twmvc26samples.MemoryCacheProvider, twmvc26samples" />-->
<add key="CacheProviderType" value="twmvc26samples.NullCacheProvider, twmvc26samples" />
<!--<add key="CacheProviderType" value="twmvc26samples.RedisCacheProvider, twmvc26samples" />-->
</appSettings>
Demo
38
http://mvc.tw
 透過切換,讓功能回到本質的服務。進而偵錯與開發。
 透過切換,不需要伸手弄髒既有的程式邏輯。
NullCacheProvider 價值
39
http://mvc.tw
 透過切換,讓功能回到本質的服務。進而偵錯與開發。
 透過切換,不需要伸手弄髒既有的程式邏輯。
 此時,全站的 CacheProvider 都以 NullCache 實作。
 似乎,還可以更靈活!
NullCacheProvider 價值
40
41
DataCacheService
http://mvc.tw
 IDataCacheService 方法簽章
DataCacheService
42
public interface IDataCacheService
{
/// <summary>
/// 取得Redis快取內容
/// </summary>
T GetRedisCacheData<T>(string cacheName, string cacheType, string key, Func<T> source, int expirationSecond = 1800,
bool enabledCache = true, bool cleanCache = false) where T : class;
/// <summary>
/// 取得Memory快取內容
/// </summary>
T GetMemoryCacheData<T>(string cacheName, string cacheType, string key, Func<T> source, int
memoryCacheExpirationSecond = 10, bool enabledCache = true, bool cleanCache = false) where T : class;
}
http://mvc.tw
DataCacheService
43
public class DataCacheService : IDataCacheService
{
public T GetMemoryCacheData<T>(string cacheName, string cacheType, string key, Func<T> source, int
memoryCacheExpirationSecond = 10, bool enabledCache = true, bool cleanCache = false) where T : class
{
T returnResult;
//// 沒有開啟cache的話就直接回傳
if (enabledCache == false)
{
returnResult = source();
return returnResult;
}
string fullCacheName = string.Format("{0}-{1}-{2}", cacheName, cacheType, key);
var memoryCache = MemoryCache.Default;
if (cleanCache) { memoryCache.Remove(fullCacheName); }
var memoryCacheObject = memoryCache.Get(fullCacheName);
//// 找不到Cache時直接取得資料
if (memoryCacheObject == null || cleanCache) { …. }
….
return returnResult;
}
}
http://mvc.tw
public class DataCacheService : IDataCacheService
{
public T GetMemoryCacheData<T>(string cacheName, string cacheType, string key, Func<T> source, int
memoryCacheExpirationSecond = 10, bool enabledCache = true, bool cleanCache = false) where T : class
{
T returnResult;
//// 沒有開啟cache的話就直接回傳
if (enabledCache == false)
{
returnResult = source();
return returnResult;
}
string fullCacheName = string.Format("{0}-{1}-{2}", cacheName, cacheType, key);
var memoryCache = MemoryCache.Default;
if (cleanCache) { memoryCache.Remove(fullCacheName); }
var memoryCacheObject = memoryCache.Get(fullCacheName);
//// 找不到Cache時直接取得資料
if (memoryCacheObject == null || cleanCache) { …. }
….
return returnResult;
}
}
DataCacheService
44
http://mvc.tw
 使用方式
DataCacheService
45
public ActionResult Index()
{
var employeeList = this._dataCacheService.GetMemoryCacheData<List<Employee>>(
"ServiceName",
"TypeName",
"Key",
() =>
{
var result = this._employeeService.GetAll();
return result;
},
expirationSecond,
enabledCache,
cleanCache);
return View(employeeList);
}
http://mvc.tw
 使用方式
DataCacheService
46
public ActionResult Index()
{
var employeeList = this._dataCacheService.GetMemoryCacheData<List<Employee>>(
"ServiceName",
"TypeName",
"Key",
() =>
{
var result = this._employeeService.GetAll();
return result;
},
expirationSecond,
enabledCache,
cleanCache);
return View(employeeList);
}
取資料
開關
Demo
47
48
ASP.NET Core Caching
http://mvc.tw
 GitHub
https://github.com/aspnet/Caching
 Implementations
In-Memory, Microsoft SQL Server, and Redis.
 以前微軟沒提供,大家各有各做法,現在有了標準實作。
ASP.NET Core Caching
49
http://mvc.tw
ASP.NET Core Caching
50
http://mvc.tw
ASP.NET Core Caching
51
http://mvc.tw
 NuGet
How to using IMemoryCache
52
Install-Package Microsoft.Extensions.Caching.Memory
http://mvc.tw
 Call AddMemoryCache in ConfigureServices
How to using IMemoryCache
53
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddMvc();
}
}
http://mvc.tw
 IMemoryCace instance in the constructor
How to using IMemoryCache
54
public class HomeController : Controller
{
private IMemoryCache _cache;
public HomeController(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
}
http://mvc.tw
 接下來就以「取得員工資料」的範例來說明。
ASP.NET Core Caching
55
56
總結 – 思考
http://mvc.tw
總結 – 思考
57Graph from https://goo.gl/aOK1UF
 快取是非常有用的工具,但也容易被濫用。
 調校邏輯所花費的時間,其實跟加入快取模組差不多。
 出現效能瓶頸時,優先考慮快取,會導致效能問題被掩蓋,
無法真正解決問題。
 不到最後一刻不要使用快取,而是優先考序使用其他方式優
化應用程式效能。
http://mvc.tw
Blog 是記錄知識的最佳平台
58
http://mvc.tw
感謝 Jetbrains 贊助贈品
59
https://www.jetbrains.com/resharper/
http://mvc.tw
感謝 OzCode 贊助贈品
60
http://www.oz-code.com/
http://mvc.tw
業界師資、實戰教學
61
http://skilltree.my
http://mvc.tw
業界師資、實戰教學
62
https://mvc.tw
謝謝各位
• 本投影片所包含的商標與文字皆屬原著作者所有。
• 本投影片使用的圖片皆從網路搜尋。
• 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣授權。閱讀本授權條款,請到
http://creativecommons.org/licenses/by-nc-sa/3.0/tw/,或寫信至Creative Commons, 444 Castro
Street, Suite 900, Mountain View, California, 94041, USA.
h t t p s : / / m v c . t w

Más contenido relacionado

La actualidad más candente

twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARPtwMVC
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC
 
twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC
 
twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC
 
twMVC#21 | 你所不知道的 Visual Studio
twMVC#21 | 你所不知道的 Visual StudiotwMVC#21 | 你所不知道的 Visual Studio
twMVC#21 | 你所不知道的 Visual StudiotwMVC
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC
 
twMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie RecommendationtwMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie RecommendationMia Chang
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC
 
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角twMVC
 
twMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS LambdatwMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS LambdatwMVC
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)beehivedata
 
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API twMVC
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2twMVC
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 

La actualidad más candente (20)

twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARP
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢
 
twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署
 
twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure Functions
 
twMVC#21 | 你所不知道的 Visual Studio
twMVC#21 | 你所不知道的 Visual StudiotwMVC#21 | 你所不知道的 Visual Studio
twMVC#21 | 你所不知道的 Visual Studio
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
twMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie RecommendationtwMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie Recommendation
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart Factory
 
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
 
twMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS LambdatwMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS Lambda
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
 
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 

Similar a twMVC#26 | 淺談 ASP.NET Caching 技術與實踐

Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)振揚 陳
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
缓存基础
缓存基础缓存基础
缓存基础dynamiclu
 
Lab 1 建立 HTTP與HTTPS網站.pdf
Lab 1 建立 HTTP與HTTPS網站.pdfLab 1 建立 HTTP與HTTPS網站.pdf
Lab 1 建立 HTTP與HTTPS網站.pdfssuser9026c8
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Asp net (1)
Asp net  (1)Asp net  (1)
Asp net (1)Kyle Lin
 
Http cache 的優化
Http cache 的優化Http cache 的優化
Http cache 的優化振揚 陳
 
Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Jinrong Ye
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存jeffz
 
test
testtest
testxieyq
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研lorisjand
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 

Similar a twMVC#26 | 淺談 ASP.NET Caching 技術與實踐 (20)

Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
缓存基础
缓存基础缓存基础
缓存基础
 
Lab 1 建立 HTTP與HTTPS網站.pdf
Lab 1 建立 HTTP與HTTPS網站.pdfLab 1 建立 HTTP與HTTPS網站.pdf
Lab 1 建立 HTTP與HTTPS網站.pdf
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Asp net (1)
Asp net  (1)Asp net  (1)
Asp net (1)
 
Http cache 的優化
Http cache 的優化Http cache 的優化
Http cache 的優化
 
Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存
 
test
testtest
test
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 

Más de twMVC

twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇twMVC
 
twMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC
 
twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC
 
twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩twMVC
 
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則twMVC
 
twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習twMVC
 
twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹twMVC
 

Más de twMVC (12)

twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇
 
twMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwright
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
 
twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩
 
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
 
twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習
 
twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹
 

twMVC#26 | 淺談 ASP.NET Caching 技術與實踐