C# MemcachedHelper 帮助类 控制台程序
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                C# MemcachedHelper 帮助类  控制台程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                ?
參考資料鏈接:
https://www.bbsmax.com/A/pRdBaBbD5n/
https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Usage
https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration
Memcached 可視化界面 TreeSoft? ?TreeNMS 。由于他是使用java語言寫的,所以當我們存入C#的值進去,會被序列化成對象,無法查看他的值。
1、Redis和Memcached的配置不能同時存在app.config中 否者會報錯,找不到 RedisConfig
2、App.config
<?xml version="1.0"?> <configuration><!-- Memcached start --><configSections><sectionGroup name="enyim.com"><section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection,Enyim.Caching"/><section name="RedisConfig" type="TY_RealTimeDBInterface.RedisConfigInfo, TY_RealTimeDBInterface"/></sectionGroup></configSections><enyim.com><memcached protocol="Text"><servers><add address="127.0.0.2" port="11211"/></servers><!-- minPoolSize:打開到每個Memcached服務器的最小連接數。默認值為10 --><!--maxPoolSize:可以打開到每個Memcached服務器的最大連接數。默認值為20。--><!--connectionTimeout:客戶端等待建立與內存緩存服務器的連接的時間。如果超時,則當前操作將失敗,并且該節點將被標記為無響應。默認值為00:00:10。deadTimeout:客戶端等待檢查無響應節點狀態的時間。默認值為00:00:10。queueTimeout:當池到達時,客戶端等待獲取套接字的時間maxPoolSize。如果超時,則當前操作將失敗,并且該節點將被標記為無響應。默認值為00:00:00.100(100毫秒)。2.8+的新功能--><socketPool minPoolSize="10" maxPoolSize="1000" connectionTimeout="00:00:10" deadTimeout="00:02:00"/></memcached></enyim.com><!-- end --> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration>3、?使用Nuget 添加相關的包:EnyimMemcached?
?
MemcachedHelper:
using Enyim.Caching; using System; using System.Collections.Generic; using System.Linq; using Enyim.Caching.Memcached; using System.Text;namespace TestMemcached {/// <summary>/// MemcachedClient 幫組類 對外提供接口方法/// </summary>public class MemcachedHelper{private static MemcachedClient MemClient;static readonly object padlock = new object();//線程安全的單例模式public static MemcachedClient getInstance(){if (MemClient == null){lock (padlock){if (MemClient == null){try{MemClient = new MemcachedClient();//app.config中存在默認配置部分 ,所以不需要去找IP和Port// MemClient = new MemcachedClient("enyim.com/memcached");}catch (Exception ex){throw ex;}}}}return MemClient;}/// <summary>/// 刪除指定緩存/// </summary>/// <param name="key"></param>/// <returns></returns>public static bool Remove(string key){MemcachedClient mc = getInstance();return mc.Remove(key);}/// <summary>/// 清空緩存服務器上的緩存/// </summary>public static void FlushCache(){MemcachedClient mc = getInstance();mc.FlushAll();}#region 存取值 /// <summary>/// 獲取緩存值/// </summary>/// <param name="key"></param>/// <returns></returns>public static object Get(string key){if (key == null || key.Trim() == "") return null;MemcachedClient mc = getInstance();return mc.Get(key);}public static bool Set(string key, object value){if (key == null || key.Trim() == "") return false;MemcachedClient mc = getInstance();var data = mc.Get(key);if (data == null)return mc.Store(StoreMode.Add, key, value);elsereturn mc.Store(StoreMode.Replace, key, value);}public static bool Set<T>(string key, T value){if (key == null || key.Trim() == "") return false;MemcachedClient mc = getInstance();var data = mc.Get(key);if (data == null)//如果返回false 可以查看我的另外一篇文章 專門講解了這個錯誤 坑return mc.Store(StoreMode.Add, key, value, new TimeSpan(0, 5, 0));elsereturn mc.Store(StoreMode.Replace, key, value);}public static bool Set<T>(string key, T value,TimeSpan timeSpan){if (key == null || key.Trim() == "") return false;MemcachedClient mc = getInstance();var data = mc.Get(key);if (data == null)return mc.Store(StoreMode.Add, key, value, timeSpan);elsereturn mc.Store(StoreMode.Replace, key, value);}/// <summary>/// 通過key 來得到一個對象(前類型)/// </summary>/// <typeparam name="T">類型</typeparam>public static T Get<T>(string key){MemcachedClient mc = getInstance();return mc.Get<T>(key);}#endregion} }3、在 Programma中獲取值。我測試了多種數據類型的存取。供參考
namespace TestMemcached {class Program{static void Main(string[] args){// 程序調用 groupName用來區分不同的服務或應用場景// MemcachedHelper.SetValue( "1","sun", "ting", DateTime.Now.AddMinutes(5));//var restr = MemcachedHelper.GetValue("1", "sun");// var obj = MemcachedHelper.GetValue<Product>(groupName, "p001");// MemcachedHelper.Set( "1","sun");var restr = MemcachedHelper.Get("1");// User u = new User();// u.name = "sun";// u.sex = "gril";//string str = Newtonsoft.Json.JsonConvert.SerializeObject(u);// bool isok= MemcachedHelper.Set("user",str);// string restr = MemcachedHelper.Get("user").ToString();// User user =Newtonsoft.Json.JsonConvert.DeserializeObject<User>(restr);// Console.WriteLine(user);List<string> list = new List<string>();list.Add("as1");list.Add("as2");list.Add("as3");//List<int> list = new List<int>();//list.Add(1);//list.Add(1);//list.Add(1);//list.Add(1);//bool isok = MemcachedHelper.Set<List<string>>("list", list);//List<string> list2 = MemcachedHelper.Get<List<string>>("list");//Console.WriteLine(list2);//var s = MemcachedHelper.Get("list");//List<string> list2 = new List<string>(s.ToString().Split(','));//Console.WriteLine(list2);//User u = new User();//u.name = "sun";//u.sex = "gril";//bool isok = MemcachedHelper.Set<User>("user",u);//User us= MemcachedHelper.Get<User>("user");//Console.WriteLine(us);//float[] a = new float[] { 2,1,4};//bool isok2= MemcachedHelper.Set<float[]>("a",a);//var aa= MemcachedHelper.Get<float[]>("a");//Console.WriteLine(aa);User u = new User();u.name = "sun";u.sex = "gril";List<User> users = new List<User>();users.Add(u);users.Add(u);//bool isok3 = MemcachedHelper.Set<List<User>>("users", users);//List<User> list3 = MemcachedHelper.Get<List<User>>("users");//Console.WriteLine(list3);bool isok3 = MemcachedHelper.Set("users", users);List<User> list3 = MemcachedHelper.Get<List<User>>("users");bool isok4 = MemcachedHelper.Set("qw", 1234434);bool isok5= MemcachedHelper.Set("as4", "sun4");Console.WriteLine(list3);}}[Serializable]class User{public string name;public string sex;}?
總結
以上是生活随笔為你收集整理的C# MemcachedHelper 帮助类 控制台程序的全部內容,希望文章能夠幫你解決所遇到的問題。