memcached 配置及使用
1、配置
<!--memcached 配置-->
<add key="MemcachedServerlist" value="127.0.0.1:11211"/>
<add key="InitConnections" value="3"/>
<add key="MinConnections" value="3"/>
<add key="MaxConnections" value="5"/>
<add key="SocketConnectTimeout" value="1000"/>
<add key="SocketTimeout" value="3000"/>
<add key="MaintenanceSleep" value="30"/>
<add key="Failover" value="true"/>
<add key="Nagle" value="false"/>
<add key="CacheTimeout" value="10"/>
<add key="MemcachedServerlist" value="127.0.0.1:11211"/>
<add key="InitConnections" value="3"/>
<add key="MinConnections" value="3"/>
<add key="MaxConnections" value="5"/>
<add key="SocketConnectTimeout" value="1000"/>
<add key="SocketTimeout" value="3000"/>
<add key="MaintenanceSleep" value="30"/>
<add key="Failover" value="true"/>
<add key="Nagle" value="false"/>
<add key="CacheTimeout" value="10"/>
2、memcached 管理类
/*
* Memcache管理类
* author:domo
* date:2012-04-17
*/
#region 引用
using System;
using System.Configuration;
using Memcached.ClientLibrary;
#endregion
namespace bases.cache
{
/// <summary>
/// Memcache管理类
/// </summary>
public class MemcacheManager
{
/// <summary>
/// 定义Memcache客户端
/// </summary>
internal MemcachedClient Mc = new MemcachedClient { EnableCompression = false };
/// <summary>
/// 构造 初始化参数
/// </summary>
public MemcacheManager()
{
var serverlist = ConfigurationManager.AppSettings["MemcachedServerlist"].Split(',');
var initConnections = ConfigurationManager.AppSettings["InitConnections"];
var minConnections = ConfigurationManager.AppSettings["MinConnections"];
var maxConnections = ConfigurationManager.AppSettings["MaxConnections"];
var socketConnectTimeout = ConfigurationManager.AppSettings["SocketConnectTimeout"];
var socketTimeout = ConfigurationManager.AppSettings["SocketTimeout"];
var maintenanceSleep = ConfigurationManager.AppSettings["MaintenanceSleep"];
var failover = ConfigurationManager.AppSettings["Failover"];
var nagle = ConfigurationManager.AppSettings["Nagle"];
var pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);
pool.InitConnections = Convert.ToInt32(initConnections);
pool.MinConnections = Convert.ToInt32(minConnections);
pool.MaxConnections = Convert.ToInt32(maxConnections);
pool.SocketConnectTimeout = Convert.ToInt32(socketConnectTimeout);
pool.SocketTimeout = Convert.ToInt32(socketTimeout);
pool.MaintenanceSleep = Convert.ToInt64(maintenanceSleep);
pool.Failover = Convert.ToBoolean(failover);
pool.Nagle = Convert.ToBoolean(nagle);
pool.Initialize();
}
/// <summary>
/// 添加cache
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void Add(string key, object value)
{
var cacheTimeout = ConfigurationManager.AppSettings["CacheTimeout"];
if (!Mc.KeyExists(key))
Mc.Set(key, value, DateTime.Now.AddMinutes(Convert.ToDouble(cacheTimeout)));
}
/// <summary>
/// 移除某个cache
/// </summary>
/// <param name="key"></param>
public void Delete(string key)
{
Mc.Delete(key);
}
/// <summary>
/// 获取某个cache的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public object GetValue(string key)
{
return Mc.KeyExists(key) ? Mc.Get(key) : null;
}
/// <summary>
/// 清空所有所有cache
/// </summary>
public void Flush()
{
Mc.FlushAll();
}
/// <summary>
/// 关闭sockets
/// </summary>
public void Shutdown()
{
SockIOPool.GetInstance().Shutdown();
}
}
}
* Memcache管理类
* author:domo
* date:2012-04-17
*/
#region 引用
using System;
using System.Configuration;
using Memcached.ClientLibrary;
#endregion
namespace bases.cache
{
/// <summary>
/// Memcache管理类
/// </summary>
public class MemcacheManager
{
/// <summary>
/// 定义Memcache客户端
/// </summary>
internal MemcachedClient Mc = new MemcachedClient { EnableCompression = false };
/// <summary>
/// 构造 初始化参数
/// </summary>
public MemcacheManager()
{
var serverlist = ConfigurationManager.AppSettings["MemcachedServerlist"].Split(',');
var initConnections = ConfigurationManager.AppSettings["InitConnections"];
var minConnections = ConfigurationManager.AppSettings["MinConnections"];
var maxConnections = ConfigurationManager.AppSettings["MaxConnections"];
var socketConnectTimeout = ConfigurationManager.AppSettings["SocketConnectTimeout"];
var socketTimeout = ConfigurationManager.AppSettings["SocketTimeout"];
var maintenanceSleep = ConfigurationManager.AppSettings["MaintenanceSleep"];
var failover = ConfigurationManager.AppSettings["Failover"];
var nagle = ConfigurationManager.AppSettings["Nagle"];
var pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);
pool.InitConnections = Convert.ToInt32(initConnections);
pool.MinConnections = Convert.ToInt32(minConnections);
pool.MaxConnections = Convert.ToInt32(maxConnections);
pool.SocketConnectTimeout = Convert.ToInt32(socketConnectTimeout);
pool.SocketTimeout = Convert.ToInt32(socketTimeout);
pool.MaintenanceSleep = Convert.ToInt64(maintenanceSleep);
pool.Failover = Convert.ToBoolean(failover);
pool.Nagle = Convert.ToBoolean(nagle);
pool.Initialize();
}
/// <summary>
/// 添加cache
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void Add(string key, object value)
{
var cacheTimeout = ConfigurationManager.AppSettings["CacheTimeout"];
if (!Mc.KeyExists(key))
Mc.Set(key, value, DateTime.Now.AddMinutes(Convert.ToDouble(cacheTimeout)));
}
/// <summary>
/// 移除某个cache
/// </summary>
/// <param name="key"></param>
public void Delete(string key)
{
Mc.Delete(key);
}
/// <summary>
/// 获取某个cache的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public object GetValue(string key)
{
return Mc.KeyExists(key) ? Mc.Get(key) : null;
}
/// <summary>
/// 清空所有所有cache
/// </summary>
public void Flush()
{
Mc.FlushAll();
}
/// <summary>
/// 关闭sockets
/// </summary>
public void Shutdown()
{
SockIOPool.GetInstance().Shutdown();
}
}
}
3、使用
MemcacheManager memcacheManager = new MemcacheManager();
if (memcacheManager.GetValue("test") == null)
memcacheManager.Add("test","my value");
if (memcacheManager.GetValue("test") == null)
memcacheManager.Add("test","my value");