DiscuzNT中集成Memcached分布式缓存Word文档格式.docx
- 文档编号:16314465
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:17
- 大小:54.67KB
DiscuzNT中集成Memcached分布式缓存Word文档格式.docx
《DiscuzNT中集成Memcached分布式缓存Word文档格式.docx》由会员分享,可在线阅读,更多相关《DiscuzNT中集成Memcached分布式缓存Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
{
添加指定ID的对象
param
name="
objId"
>
/param>
o"
void
AddObject(string
objId,
object
o)
RemoveObject(objId);
if
(TimeOut
0)
MemCachedManager.CacheClient.Set(objId,
o,
System.DateTime.Now.AddMinutes(TimeOut));
}
else
o);
添加指定ID的对象(关联指定文件组)
files"
AddObjectWithFileChange(string
string[]
files)
;
添加指定ID的对象(关联指定键值组)
dependKey"
AddObjectWithDepend(string
dependKey)
移除指定ID的对象
RemoveObject(string
objId)
(MemCachedManager.CacheClient.KeyExists(objId))
MemCachedManager.CacheClient.Delete(objId);
返回指定ID的对象
returns>
/returns>
RetrieveObject(string
return
MemCachedManager.CacheClient.Get(objId);
到期时间
int
TimeOut
{
set;
get;
上面类实现的接口Discuz.Cache.ICacheStrategy定义如下:
公共缓存策略接口
interface
ICacheStrategy
files);
dependKey);
objId);
当然在MemCachedStrategy类中还有一个对象要加以说明,就是MemCachedManager,该类主要是对
Memcached一些常操作和相关初始化实例调用的“封装”,下面是是其变量定义和初始化构造方法的代码:
MemCache管理操作类
sealed
MemCachedManager
#region
静态方法和属性
private
static
MemcachedClient
mc
=
null;
SockIOPool
pool
MemCachedConfigInfo
memCachedConfigInfo
MemCachedConfigs.GetConfig();
string
[]
serverList
MemCachedManager()
CreateManager();
CreateManager()
Utils.SplitString(memCachedConfigInfo.ServerList,
"
r"
n"
);
SockIOPool.GetInstance(memCachedConfigInfo.PoolName);
pool.SetServers(serverList);
pool.InitConnections
memCachedConfigInfo.IntConnections;
//初始化链接数
pool.MinConnections
memCachedConfigInfo.MinConnections;
//最少链接数
pool.MaxConnections
memCachedConfigInfo.MaxConnections;
//最大连接数
pool.SocketConnectTimeout
memCachedConfigInfo.SocketConnectTimeout;
//Socket链接超时时间
pool.SocketTimeout
memCachedConfigInfo.SocketTimeout;
//
Socket超时时间
pool.MaintenanceSleep
memCachedConfigInfo.MaintenanceSleep;
//维护线程休息时间
pool.Failover
memCachedConfigInfo.FailOver;
//失效转移(一种备份操作模式)
pool.Nagle
memCachedConfigInfo.Nagle;
//是否用nagle算法启动socket
pool.HashingAlgorithm
HashingAlgorithm.NewCompatibleHash;
pool.Initialize();
new
MemcachedClient();
mc.PoolName
memCachedConfigInfo.PoolName;
mc.EnableCompression
false;
缓存服务器地址列表
ServerList
set
(value
!
null)
value;
get
serverList;
客户端缓存操作对象
CacheClient
get
(mc
==
mc;
Dispose()
(pool
pool.Shutdown();
上面代码中构造方法会初始化一个池来管理执行Socket链接,并提供静态属性CacheClient以便MemCachedStrategy
来调用。
当然我还在这个管理操作类中添加了几个方法分别用于检测当前有效的分布式缓存服务器的列表,向指定(或全部)
缓存服务器发送特定stats命令来获取当前缓存服务器上的数据信息和内存分配信息等,相应的方法如下(详情见注释):
获取当前缓存键值所存储在的服务器
key"
当前缓存键<
当前缓存键值所存储在的服务器<
GetSocketHost(string
key)
hostName
SockIO
sock
try
SockIOPool.GetInstance(memCachedConfigInfo.PoolName).GetSock(key);
(sock
sock.Host;
finally
sock.Close();
hostName;
获取有效的服务器地址
有效的服务器地<
GetConnectedSocketHost()
connectedHost
foreach
(string
in
serverList)
(!
Discuz.Common.Utils.StrIsNullOrEmpty(hostName))
SockIOPool.GetInstance(memCachedConfigInfo.PoolName).GetConnection(hostName);
Discuz.Common.Utils.MergeString(hostName,
connectedHost);
Discuz.Common.Utils.SplitString(connectedHost,
"
获取服务器端缓存的数据信息
返回信息<
ArrayList
GetStats()
arrayList
ArrayList();
server
arrayList.Add(server);
GetStats(arrayList,
Stats.Default,
null);
serverArrayList"
要访问的服务列表<
GetStats(ArrayList
serverArrayList,
Stats
statsCommand,
param)
statsArray
Utils.StrIsNullOrEmpty(param)
?
param.Trim().ToLower();
commandstr
stats"
//转换stats命令参数
switch
(statsCommand)
case
Stats.Reset:
stats
reset"
break;
Stats.Malloc:
malloc"
Stats.Maps:
maps"
Stats.Sizes:
sizes"
Stats.Slabs:
slabs"
Stats.Items:
Stats.CachedDump:
statsparams
Utils.SplitString(param,
if(statsparams.Length
2)
if(Utils.IsNumericArray(statsparams))
cachedump
+
param;
Stats.Detail:
if(string.Equals(param,
on"
)
||
string.Equals(param,
off"
dump"
))
detail
param.Trim();
default:
//加载返回值
Hashtable
MemCachedManager.CacheClient.Stats(serverArrayList,
commandstr);
key
stats.Keys)
statsArray.Add(key);
values
(Hashtable)stats[key];
key2
values.Keys)
statsArray.Add(key2
values[key2]);
statsArray;
Stats命令行参数
enum
Stats
显示服务器信息,
统计数据等
Default
0,
reset
清空统计数据
Reset
1,
mall
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DiscuzNT 中集 Memcached 分布式 缓存