背景:
这件事要从早之前说起,先前,我们考试系统中说要一起讲一下底层的东西。当时,组长给我和一清分的这个Memcached这个东西,要我们整理一下,然后给大家讲一讲。起初的东西不知道如何下手,因为没有资料、没有视频等等,我就找了九期的师哥要了一些资料,通过这些资料,我们做出了一些Demo,当时我们做出来之后,就没有真正运用到项目中,后来ITOO项目3.0开始后,底层说要叫几个负责模块的人,因为当时我做过这个方面,我就担任了底层缓存的任务。
第一版本:
我们底层之前是这样写的,在底层类库中:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="enyim.com">
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</sectionGroup>
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</configSections>
<enyim.com>
<memcached>
<servers>
<add address="127.0.0.1" port="11211" />
</servers>
<socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
</memcached>
</enyim.com>
<memcached keyTransformer="Enyim.Caching.TigerHashTransformer, Enyim.Caching">
<servers>
<add address="127.0.0.1" port="11211" />
</servers>
<socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
</memcached>
</configuration></span>
写入我们自己封装的Memecached类:
<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Enyim.Caching;
using Enyim.Caching.Memcached;
using Enyim.Caching.Configuration;
namespace ITOO.Library.Core.Memcache
{
public static class MemcacheHelper
{
private static MemcachedClient mc;
static MemcacheHelper()
{
mc=new MemcachedClient();
}
/// <summary>
/// 当缓存中没有数据的时候将数据写入缓存
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool Add(string key, object value)
{
return mc.Store(StoreMode.Add, key, value);
}
/// <summary>
/// 当缓存中没有数据的时候将数据写入缓存(含过期时间)
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiresAt">过期时间</param>
/// <returns></returns>
public static bool Add(string key, object value, DateTime expiresAt)
{
return mc.Store(StoreMode.Add, key, value,expiresAt);
}
/// <summary>
/// 替换缓存中的数据
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool Replace(string key, object value)
{
return mc.Store(StoreMode.Replace, key, value);
}
/// <summary>
/// 替换缓存中的数据(含过期时间)
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiresAt">过期时间</param>
/// <returns></returns>
public static bool Replace(string key, object value, DateTime expiresAt)
{
return mc.Store(StoreMode.Replace, key, value, expiresAt);
}
/// <summary>
/// 尝试获取缓存
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool TryGet(string key, out object value)
{
return mc.TryGet(key, out value);
}
/// <summary>
/// 获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T Get<T>(string key)
{
return mc.Get<T>(key);
}
/// <summary>
/// 获取缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static object Get(string key)
{
return mc.Get(key);
}
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public