MemCache快取和C#自帶的Cache快取
1、MemCache
//初始化 static SockIOPool _pool;
// 建立Memcached private static MemcachedClient Create(string poolName) { CreateServer("abc11666", "127.0.0.1:11666");//建立了一個Memcache客戶端的代理類。 MemcachedClient mc = new MemcachedClient(); mc.PoolName = poolName; mc.EnableCompression = false;//是否壓縮return mc; } // 配置Memcached private static void CreateServer(string poolName, string ip) {
if (_pool != null) { } else { ArrayList serverlist = new ArrayList(); CacheUtils c = new CacheUtils(); serverlist.Add(ip);//初始化memcache伺服器池 _pool = SockIOPool.GetInstance(poolName); //設定Memcache池連線點伺服器端。 _pool.SetServers(serverlist); //各伺服器之間負載均衡的設定 _pool.SetWeights(new int[] { 1 }); //初始化時建立的連線數 _pool.InitConnections = 5; //最小連線數 _pool.MinConnections = 40; //最大連線數 _pool.MaxConnections = 5000; //連線的最大空閒時間,下面設定為6個小時(單位ms),超過這個設定時間,連線會被釋放掉 _pool.MaxIdle = 1000 * 60 * 60 * 6; //通訊的超時時間,下面設定為3秒(單位ms),.NET版本沒有實現 _pool.SocketTimeout = 1000 * 3; //socket連線的超時時間,下面設定表示連線不超時,即一直保持連線狀態 _pool.SocketConnectTimeout = 0; //是否對TCP/IP通訊使用Nalgle演算法,.NET版本沒有實現 _pool.Nagle = false; //維護執行緒的間隔啟用時間,下面設定為60秒(單位s),設定為0表示不啟用維護執行緒 _pool.MaintenanceSleep = 60; //設定SocktIO池的故障標誌 _pool.Failover = true; //socket單次任務的最大時間,超過這個時間socket會被強行中斷掉(當前任務失敗) _pool.MaxBusy = 1000 * 10; _pool.Initialize(); } } // 獲取 public static object GetCache(string poolName, string key) { MemcachedClient mc = Create(poolName); if (mc.KeyExists(key)) { return mc.Get(key); } else { return ""; } } // 儲存 public static bool SetCache(string poolName, string key, string value, int minutes) { MemcachedClient mc = Create(poolName); return mc.Set(key, value, DateTime.Now.AddMinutes(minutes)); } // 刪除 public static bool DelCache(string poolName, string key) { MemcachedClient mc = Create(poolName); return mc.Delete(key); }
呼叫:
//儲存 SetCache("abc11666", "abc", "123", 1440); //取值 GetCache("abc11666","abc").ToString(); //刪除 DelCache("abc11666", "abc"); //將ArrayList轉換成IList<NoticeModel> IList<NoticeModel> noticelist = new List<NoticeModel>(); //獲取,取出的格式是ArrayList ArrayList a1 = cacheUtils.GetCache("notice"); //方法一 noticelist = a1.Cast<NoticeModel>().ToList(); //方法二 foreach (var item in a1) { noticelist.Add(item as NoticeModel); }
2、memcached分散式快取的設定與應用
string[] servers = { "127.0.0.1:11666", "127.0.0.1:11667" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); //設定伺服器列表 pool.SetServers(servers); //各伺服器之間負載均衡的設定比例 pool.SetWeights(new int[] { 1, 10 });
注:1)在172.18.5.66,與192.168.10.121兩臺機器上裝 memcached 服務端。
2)pool.SetWeights 這裡的1跟10意思是,負載均衡比例,假如11000條資料,大致資料分佈為:172.18.5.66分佈1000條資料左右。另外一臺為10000條左右。
3)memcached 服務端並不具備負載均衡的能力,而是 memcachedClient 實現的,具體存取資料實現的核心是採用一致性Hash演算法,把 key-value 分佈到某一臺伺服器中裡邊。
3、C#自帶的Cache快取
noticelist 存入快取的前提是,model 必須是可序列化的,在 model 上面必須新增此特性:[System.Serializable]
//name是key string name = "notice"; Cache cache = HttpRuntime.Cache; //如果是DataSet型別 DataSet dst = (DataSet)cache.Get("CachedDataSet"); IList<NoticeModel> list = (IList<NoticeModel>)cache.Get(name); //判斷是否為空,如果為空,說明沒有快取存入或者快取已經過期了。 if (list == null) { NoticeModel notice = new NoticeModel(); NoticeDAO noticedao = new NoticeDAO(); //公告 notice.type = "1"; pageInfo.pageSize = 4; IList<NoticeModel> noticelist = noticedao.getNoticeList(notice); //設定在記憶體中的儲存時間 cache.Insert(name, noticelist, null, DateTime.Now.AddHours(1), TimeSpan.Zero); return noticelist; } else { return list; }
相關推薦
MemCache快取和C#自帶的Cache快取
1、MemCache //初始化 static SockIOPool _pool; // 建立Memcached private static MemcachedClient Create(string poolName) { CreateServer("abc11666", "12
myBatis自帶的快取配置(Cache)
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/sotong006/article/details/78878820 如果要實現 mybatis 的二級快取,一般來說有如下兩種方式: 1. 採用 mybatis 內
使用Redis做快取資料庫來存放資料和Mybatis自帶的二級快取,兩者相比各自有什麼優勢?
Redis方案: 1.擴充套件性號,資料量大的時候做主從複製,或者叢集來進行擴充套件。 2.不易丟失,可以週期性持久化。 3.降低風險,被快取的記憶體和應用程式的記憶體分開,有助於風險分攤。 4.靈活多變,對於快取失效和更新操作可自主控制。 5.
HttpRuntime.Cache .Net自帶的快取類
1 using System; 2 using System.Collections; 3 using System.Web; 4 using System.Web.Caching; 5 /** 6 * author:qixiao 7 * cr
C語言和C++自帶排序比較(qsort和sort)
我們先來看看C語言的,qsort函式,下面是具體的實現。 #include <stdio.h> #include <stdlib.h> /*const 讓它不能被修改,以只讀型別被用 如果函式引數是任意型別指標,就用void* */ /*qsor
GIS演算法(二)運用C#自帶的函式繪製五角星和多邊形(C#)
前言: 當我們敲下第一行程式碼向計算機世界說一句—–Hello World 我們就打開了一扇通往計算機世界的大門。 計算機的世界總是充滿著未知和挑戰, 當我們的程式碼第一次出現在漆黑的控制檯; 當我們第一次實現和計算機的互動; 當我們第一次完成自己的
SA:T1編寫主函數法和T2Matlab自帶的SA工具箱GUI法,兩種方法實現對二元函數優化求解——Jason niu
lin plot itl 最優解 IT 主函數 alt 圖片 gui %SA:T1法利用Matlab編寫主函數實現對定義域[-5,5]上的二元函數求最優解—Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 +
day-9 sklearn庫和python自帶庫實現最近鄰KNN算法
-m 寬度 ont 產生 res 長度 比較 target 1.2 K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)
對Swoole、Workerman和php自帶的socket的理解
開源項目 局限性 ole 來源 worker 建議 般的 detail 管理 為什麽php自帶的socket不怎麽聽說,基本都是用swoole,workerman去實現? 1、PHP的socket擴展是一套socket api,僅此而已。 swoole,用C實現,它的s
ios 對於修改navigationItem的顏色和系統自帶的navigationItem的rightBarButtonItem的顏色的問題
對於iOS的navigationItem的tittle的顏色修改: 首先建一個工程,建一個UINavigationController然後對navigationBar上tittle修改 只需要帶程式碼中新增如下程式碼即可 : //修改navigationItem的顏色
【Java】Spring和Tomcat自帶的連線池實現資料庫操作
@[toc] 前言 前面我們已經用Spring和傳統的Jdbc實現資料庫操作、Spring和JdbcTemplate實現資料庫操作。但是這些都是基於直連的資料來源進行的,現在我們將介紹基於連線池的資料來源進行資料庫操作。前面幾個步驟都相同。 建立資料庫 首先建立我們的資料庫(這裡我使用的是Mysql)
解決maven中servlet-api.jar和容器自帶的servlet-api.jar的依賴衝突
在學習maven時,給maven新增tomcat7-maven-plugin外掛後,新建了一個專案並且嘗試執行,但出現下列異常: 通過在百度的搜尋,得知這是由於servlet-api.jar和容器自帶的servlet-api.jar產生了依賴衝突。但是,在百度中沒有
用video.js和windows自帶播放外掛MediaPlayer實現視訊播放
由於本人在搜尋資料沒有找到video.js外掛支援ie8的方法,所以在做檢視視訊的功能時想法是這樣的,對於谷歌和IE10以上用video.js的方法實現,而IE9及IE8用MediaPlayer實現。下面是實現程式碼(只測試過mp4格式的): 1.video.js實現 &
一種用C++自帶的類生成服從正態分佈的隨機數。
今天寫關於深度學習的程式碼時,裡面要用服從標準正態分佈的隨機數初始化權值,就是matlab裡面那個randn函式,網上找了很多方法,最後發現C++本身就有自帶的方法生成服從正態分佈的隨機數序列。下面給出C++程式碼: C++程式碼: #include &
C++自帶string類的常用方法
#include<iostream>#include<string>using namespace std;int main(){ string str1 = "hello"; string* str2 = new string("hell
matlab中自定義檔名和系統自帶檔名重複的處理
最近在安裝第三方toolbox時, 發現該第三方toolbox中的run.m檔案和matlab自帶的\MATLAB\R2010b\toolbox\matlab\lang\run.m檔名重複, 導致系統自帶的run檔案無法執行。 在網上查詢到解決方案:
Gson庫和Android自帶JSON解析對轉義字元的處理存在不同
遇到一坑,以前用的是Gson庫,現在改為Android自帶的JSON解析,後端收到資料有時會解析失敗,查詢原因,發現Gson庫和Android自帶JSON解析對轉義字元的處理存在稍許的不同。 舉例如下: String s1 = "https://blog
python+opencv計算程式碼執行時間:time庫和opencv自帶方法getTickCount
import cv2 import time ############################## 利用opencv的兩個函式進行時間耗費計算 # cv2.getTickCount()記錄當前
Qt實用技巧:使用QMediaPlayer和Windows自帶元件播放swf、rmvb、mpg、mp4等視訊檔案
需求 做軟體時,點選進入介面需要播放一段視訊,該視訊的格式可相容swf、rmvb、mpg、mp4等視訊檔案。 原理 使用QMediaPlayer播放rmvb、mpg、mp4格式 使用windows Media Player
SpringMVC整合Quartz實現定時任務和Spring自帶Task定時任務
在java中我們常用Timer和TimerTask實現定時功能,而在JavaEE專案中可以使用Spring整合Quartz定時器、Spring的Task任務。相比於Spring自帶的任務,Quartz非