探索缓存之路(2):拥抱Memcached

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wucdsg/article/details/87364890
1.引言

上一篇【探索缓存之路(1):牵手Memcached】中主要介绍了Memcached的安装部署以及使用过程中的一些注意事项,本篇将围绕代码操作Memcached展开,当然代码连接操作Memcached的方式有很多,诸如:Memcached客户端的.Net版,EnyimMemcached等,下面将使用EnyimMemcached完成一些简单的操作。个人再次声明:文章旨在方便本人日后查阅复习,不在于传道解惑,如果你发现文中有错误纰漏,请留言指出,不必留情哦。

2.EnyimMemcached
  1. Nuget下载EnyimMemcached包
    在这里插入图片描述
  2. 配置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>
  1. 代码操作(简单的封装了一个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的相关性能。

猜你喜欢

转载自blog.csdn.net/wucdsg/article/details/87364890