1. 程式人生 > >MemCache快取和C#自帶的Cache快取

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++排序比較(qsortsort)

我們先來看看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、Workermanphp的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】SpringTomcat的連線池實現資料庫操作

@[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.jswindows播放外掛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庫AndroidJSON解析對轉義字元的處理存在不同

遇到一坑,以前用的是Gson庫,現在改為Android自帶的JSON解析,後端收到資料有時會解析失敗,查詢原因,發現Gson庫和Android自帶JSON解析對轉義字元的處理存在稍許的不同。 舉例如下: String s1 = "https://blog

python+opencv計算程式碼執行時間:time庫opencv方法getTickCount

import cv2 import time ############################## 利用opencv的兩個函式進行時間耗費計算 # cv2.getTickCount()記錄當前

Qt實用技巧:使用QMediaPlayerWindows元件播放swf、rmvb、mpg、mp4等視訊檔案

需求         做軟體時,點選進入介面需要播放一段視訊,該視訊的格式可相容swf、rmvb、mpg、mp4等視訊檔案。 原理         使用QMediaPlayer播放rmvb、mpg、mp4格式         使用windows Media Player

SpringMVC整合Quartz實現定時任務SpringTask定時任務

在java中我們常用Timer和TimerTask實現定時功能,而在JavaEE專案中可以使用Spring整合Quartz定時器、Spring的Task任務。相比於Spring自帶的任務,Quartz非