版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wucdsg/article/details/87364890
1.引言
上一篇【探索缓存之路(1):牵手Memcached】中主要介绍了Memcached的安装部署以及使用过程中的一些注意事项,本篇将围绕代码操作Memcached展开,当然代码连接操作Memcached的方式有很多,诸如:Memcached客户端的.Net版,EnyimMemcached等,下面将使用EnyimMemcached完成一些简单的操作。个人再次声明:文章旨在方便本人日后查阅复习,不在于传道解惑,如果你发现文中有错误纰漏,请留言指出,不必留情哦。
2.EnyimMemcached
- Nuget下载EnyimMemcached包
- 配置Config(具体的配置信息可以参照Nuget中EnyimMemcached相关配置信息)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="enyim.com">
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</sectionGroup>
</configSections>
<enyim.com>
<memcached protocol="Text">
<servers>
<add address="126.33.9.26" port="11211"/>
</servers>
<socketPool minPoolSize="5" maxPoolSize="10"/>
</memcached>
</enyim.com>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
- 代码操作(简单的封装了一个MemcachedHelper类,你可以自己写一个哦)
using Enyim.Caching;
using Enyim.Caching.Memcached;
using System;
namespace MemcachedDemo
{
public class MemcachedHelper
{
private static MemcachedClient _memCachedClient;
private static readonly object _lockobject = new object();
//单例模式
public static MemcachedClient GetInstance()
{
if (_memCachedClient == null)
{
lock(_lockobject)
{
if (_memCachedClient == null)
{
_memCachedClient = new MemcachedClient();
}
}
}
return _memCachedClient;
}
/// <summary>
/// 插入键值(存在即替换)
/// </summary>
/// <param name="key">键名</param>
/// <param name="value">键值</param>
/// <param name="minutes">过期时间,默认一周</param>
/// <returns></returns>
public static bool Insert(string key,object value,int minutes=10080)
{
MemcachedClient mc = GetInstance();
object data = mc.Get(key);
DateTime exptime = DateTime.Now.AddMinutes(minutes);
if (data == null)
return mc.Store(StoreMode.Add, key, value, exptime);
else
return mc.Store(StoreMode.Replace, key, value, exptime);
}
/// <summary>
/// 获取缓存值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static object Get(string key)
{
return GetInstance().Get(key);
}
/// <summary>
/// 删除指定缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Remove(string key)
{
return GetInstance().Remove(key);
}
/// <summary>
/// 清空服务上所有缓存
/// </summary>
public static void FlushCache()
{
GetInstance().FlushAll();
}
}
}
需要注意的一点是,如果需要缓存对象,应该在类上贴上序列化标签【Serializable】
using System;
namespace MemcachedDemo
{
[Serializable]
public class Coder
{
public string Name { get; set; }
public int WorkingAge { get; set; }
public Coder(string name,int workingAge)
{
this.Name = name;
this.WorkingAge = workingAge;
}
public override string ToString()
{
return $"程序狗:{this.Name},工龄:{this.WorkingAge}";
}
}
}
3.结语
关于上述Memcached的两篇介绍,都是很浅显的,涉及到的问题并不深,一则是项目的使用上并没有深入要求,二则是个人在这方面也还处于探索中。后面讲介绍Redis,并对比Redis和Memcached的相关性能。