本来想发布下新版Luke.Net,正好刚刚再次重构了缓存的帮助类这里发布下:
测试代码
[Fact]
public
void
SimpleTest()
{
ICache<
int
,
string
> cacheMenager = MemoryCache<
int
,
string
>.Instance;
var
value = cacheMenager.Get(1, () => 1, TimeSpan.FromSeconds(10));
Assert.Equal(value, 1);
value = cacheMenager.Get(1, () => 2, TimeSpan.FromSeconds(10));
Assert.Equal(value, 1);
System.Threading.Thread.Sleep(10 * 1000);
value = cacheMenager.Get(1, () => 3, TimeSpan.FromSeconds(10));
Assert.Equal(value, 3);
}
|
接口
public
interface
ICache<TK,TV>
{
TV Get<TV>(TK cacheKey, Func<TV> getUncachedValue, DateTimeOffset dateTimeOffset);
TV Get<TV>(TK cacheKey, Func<TV> getUncachedValue, TimeSpan timeSpan);
void
Remove(TK cacheKey);
}
|
用到的单例类
public
class
SingletonProvider<T>
where
T :
new
()
{
SingletonProvider() { }
public
static
T Instance
{
get
{
return
SingletonCreator.instance; }
}
class
SingletonCreator
{
static
SingletonCreator() { }
internal
static
readonly
T instance =
new
T();
}
}
|
最后是更新后的缓存类,
public
class
MemoryCache<TK, TV> : ICache<TK, TV>
{
private
ObjectCache _memoryCache;
public
static
MemoryCache<TK, TV> Instance
{
get
{
return
SingletonProvider<MemoryCache<TK, TV>>.Instance; }
}
public
MemoryCache() :
this
(
null
) { }
public
MemoryCache(
string
name)
{
_memoryCache =
new
MemoryCache(
string
.Format(
"{0}-{1}-{2}"
,
typeof
(TK).Name,
typeof
(TV).Name, name));
}
public
TV Get<TV>(TK cacheKey, Func<TV> getUncachedValue, DateTimeOffset dateTimeOffset)
{
if
(_memoryCache.Contains(ParseKey(cacheKey)))
{
return
(TV)_memoryCache[ParseKey(cacheKey)];
}
else
{
var
v = getUncachedValue();
object
o = v;
_memoryCache.Set(ParseKey(cacheKey), o, dateTimeOffset);
return
v;
}
}
public
TV Get<TV>(TK cacheKey, Func<TV> getUncachedValue, TimeSpan timeSpan)
{
return
Get(cacheKey, getUncachedValue,
new
DateTimeOffset(DateTime.UtcNow + timeSpan));
}
public
void
Remove(TK cacheKey)
{
_memoryCache.Remove(ParseKey(cacheKey));
}
private
string
ParseKey(TK key)
{
return
key.GetHashCode().ToString();
}
}
|
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2012/07/10/2584839.html,如需转载请自行联系原作者