博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Memcached 你了解多少?
阅读量:5739 次
发布时间:2019-06-18

本文共 11734 字,大约阅读时间需要 39 分钟。

好久没有写博客了,自从年后到现在要么就是加班 要么还是在加班 基本都是到夜里1点多 通宵的干,事情太多,项目太急  。难得今天闲暇一段时间来,看看书,写一写博客,没事就再重新的研究一下关于Memcached 的使用。

一.关于Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的HashMap。其中的守护进程(daemon )是用通过C语言进行编写,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。比如.NET JAVA  PHP  Python  等开发语言都是可以进行结合到Memcached  进行使用的。其中Memcached  存储的原理是基于Key-Value 的形式进行保存到缓存里面的。

二.关于如何安装 Memcached  在Windows 或者LINUX  我就不一一的就进行介绍了,下面我主要介绍如何进行使用Memcached  我个人主要是使用.NET  C Sharp  进行开发的,所以下面我就演示一下如何使用C Sharp 如何来进行做缓存的处理。

三.我们需要首先建立一个项目我这边按照控制台应用程序为例,进行管理NuGet 添加 Memcached.Client 程序集  ISharpCode.SharpZipLib.dll  和Log4net 这些程序集。下面你就可以进行操作和使用这3个程序集里面内部封装的东西了。

四.我个人比较喜欢就行将内部的方法进行重新封装进行重写 这样会更加的方便我的使用。

1.Memcached 缓存处理类

using System;/****************************************************@作者:LowKeyC@说明: Memcached 缓存处理类@版本号:V1.0@创建日期:2018年5月25日*****************************************************/namespace Memcached.Lib{     ///      /// 缓存处理类     ///     public static class CacheHelper    {        #region 缓存供给者对象 +static ICacheProvider CacheProvider        private static ICacheProvider _cacheProvider;        ///         /// 缓存供给者对象        ///         public static ICacheProvider CacheProvider        {            get            {                if (_cacheProvider != null)                    return _cacheProvider;                lock ("CacheProvider")                {                    if (_cacheProvider != null)                        return _cacheProvider;                    return (_cacheProvider = new MemcachedProvider());                }            }        }         #endregion        #region 获取缓存数据 +static object Get(string key)        public static object Get(string key)        {            return CacheProvider.Get(key);        }        #endregion        #region 获取缓存数据 +static T Get
(string key) where T : class public static T Get
(string key) where T : class { return CacheProvider.Get
(key); } #endregion #region 设置数据缓存 +static void Set(string key, object value, DateTime absoluteExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
绝对过期时间 public static void Set(string key, object value, DateTime absoluteExpiration) { CacheProvider.Set(key, value, absoluteExpiration); } #endregion #region 设置数据缓存 +static void Set(string key, object value, TimeSpan slidingExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
最后一次访问所插入对象时与该对象到期时之间的时间间隔 public static void Set(string key, object value, TimeSpan slidingExpiration) { CacheProvider.Set(key, value, slidingExpiration); } #endregion #region 移除指定键的缓存数据 +static void Remove(string key) ///
/// 移除指定键的缓存数据 /// ///
键 public static void Remove(string key) { CacheProvider.Remove(key); } #endregion #region 清除全部缓存数据 +static void Clear() ///
/// 清除全部缓存数据 /// ///
///
public static void Clear() { CacheProvider.Clear(); } #endregion #region static void Clear(string pattern) ///
/// 清除通配键的缓存数据 /// ///
键 public static void Clear(string pattern) { CacheProvider.Clear(pattern); } #endregion }}

 2.基于HttpRuntime的缓存供给者     

using System;using System.Text.RegularExpressions;using System.Web;/****************************************************@作者:LowKeyC@说明: 基于HttpRuntime的缓存供给者@版本号:V1.0@创建日期:2018年5月25日*****************************************************/namespace Memcached.Lib{    ///     /// 基于HttpRuntime的缓存供给者    ///     public class DefaultCacheProvider : ICacheProvider    {        #region 获取缓存数据 +object Get(string key)        ///         /// 获取缓存数据        ///         /// 键        /// 
System.Object.
public object Get(string key) { var cache = HttpRuntime.Cache; return cache[key]; } #endregion #region 获取缓存数据 +T Get
(string key) where T : class ///
/// 获取缓存数据 /// ///
数据类型
///
键 ///
指定数据类型的对象
public T Get
(string key) where T : class { var obj = Get(key); return obj as T; } #endregion #region 设置数据缓存 +void Set(string key, object value, DateTime absoluteExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
绝对过期时间 public void Set(string key, object value, DateTime absoluteExpiration) { var cache = HttpRuntime.Cache; cache.Insert(key, value, null, absoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);//TimeSpan.Zero); } #endregion #region 设置数据缓存 +void Set(string key, object value, TimeSpan slidingExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
最后一次访问所插入对象时与该对象到期时之间的时间间隔 public void Set(string key, object value, TimeSpan slidingExpiration) { var cache = HttpRuntime.Cache; cache.Insert(key, value, null, DateTime.MaxValue, slidingExpiration); } #endregion #region 移除指定键的缓存数据 +void Remove(string key) ///
/// 移除指定键的缓存数据 /// ///
键 public void Remove(string key) { var cache = HttpRuntime.Cache; cache.Remove(key); } #endregion #region 清除全部缓存数据 +void Clear() ///
/// 清除全部缓存数据 /// public void Clear() { var cache = HttpRuntime.Cache; var cacheEnum = cache.GetEnumerator(); while (cacheEnum.MoveNext()) { cache.Remove(cacheEnum.Key.ToString()); } } #endregion #region 清除通配键的缓存数据 +void Clear(string pattern) ///
/// 清除通配键的缓存数据 /// ///
键 public void Clear(string pattern) { var cache = HttpRuntime.Cache; var cacheEnum = cache.GetEnumerator(); while (cacheEnum.MoveNext()) { var key = cacheEnum.Key.ToString(); if (Regex.IsMatch(key, pattern)) cache.Remove(key); } } #endregion public void Dispose() { } }}

 3.缓存供给者约束接口

using System;/****************************************************@作者:LowKeyC@说明: 缓存供给者约束接口@版本号:V1.0@创建日期:2018年5月25日*****************************************************/namespace Memcached.Lib{    ///     /// 缓存供给者约束接口    ///     public interface ICacheProvider : IDisposable    {        #region 获取缓存数据 +object Get(string key)        ///         /// 获取缓存数据        ///         /// 
/// 2013-11-23 22:03 Created By iceStone ///
/// 键 ///
System.Object.
object Get(string key); #endregion #region 获取缓存数据 +T Get
(string key) where T : class ///
/// 获取缓存数据 /// ///
数据类型
///
键 ///
指定数据类型的对象
T Get
(string key) where T : class; #endregion #region 设置数据缓存 +void Set(string key, object value, DateTime absoluteExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
绝对过期时间 void Set(string key, object value, DateTime absoluteExpiration); #endregion #region 设置数据缓存 +void Set(string key, object value, TimeSpan slidingExpiration) ///
/// 设置数据缓存 /// ///
键 ///
缓存对象 ///
最后一次访问所插入对象时与该对象到期时之间的时间间隔 void Set(string key, object value, TimeSpan slidingExpiration); #endregion #region 移除指定键的缓存数据 +void Remove(string key) ///
/// 移除指定键的缓存数据 /// ///
键 void Remove(string key); #endregion #region 清除全部缓存数据 +void Clear() ///
/// 清除全部缓存数据 /// void Clear(); #endregion #region 清除通配键的缓存数据 +void Clear(string pattern) ///
/// 清除通配键的缓存数据 /// ///
键 void Clear(string pattern); #endregion }}

 4. 然后在进行具体使用的地方进行调用即可,缓存操作助手类。     

using System;using System.Collections.Generic;using System.Text;using Memcached.Client;/****************************************************@作者:LowKeyC@说明: 缓存操作助手类@版本号:V1.0@创建日期:2018年5月25日*****************************************************/namespace Memcached.Lib{    ///     /// 缓存操作助手类    ///     public class MemcachedProvider : ICacheProvider    {        static MemcachedClient client;        static SockIOPool pool;        static MemcachedProvider()        {            //创建连接池对象            pool = SockIOPool.GetInstance("xxx");            #region 设置连接池各项常用参数            //设置缓存服务地址            pool.SetServers(new[] { "IP+端口" });            //设置连接池初始数目、最小连接数目和连接数目            pool.InitConnections = 3;            pool.MinConnections = 3;            pool.MaxConnections = 50;            //设置Socket连接超时时间、Socket连接超时时间            pool.SocketConnectTimeout = 1000;            pool.SocketTimeout = 3000;            //设置维护线程运行的睡眠时间。如果设置为0,那么维护线程将不会启动            pool.MaintenanceSleep = 30;            //如果设置为false,则得到一个套接字如果存在的话。否则返回NULL,如果它无法连接到请求的服务器。            pool.Failover = true;            //如果为false,对所有创建的套接字关闭Nagle的算法            pool.Nagle = false;            #endregion            //初始化连接池            pool.Initialize();            client = new MemcachedClient();            client.EnableCompression = true; //是否启用压缩数据            client.PoolName = "micua";//此处需要与连接池名称相同,注意!!!        }        public object Get(string key)        {            var cache = client.Get(key) as _CacheItem;            if (cache == null) return null;            if (cache.SlidingExpiration != TimeSpan.Zero)                client.Set(key, cache, DateTime.Now.Add(cache.SlidingExpiration));            return cache.Data;        }        public T Get
(string key) where T : class { return Get(key) as T; } public void Set(string key, object value, DateTime absoluteExpiration) { var cache = new _CacheItem { Data = value, SlidingExpiration = TimeSpan.Zero }; client.Set(key, cache, absoluteExpiration); } public void Set(string key, object value, TimeSpan slidingExpiration) { var cache = new _CacheItem { Data = value, SlidingExpiration = slidingExpiration }; client.Set(key, cache, DateTime.Now.Add(slidingExpiration)); } public void Remove(string key) { client.Delete(key); } public void Clear() { client.FlushAll(); } public void Clear(string pattern) { client.FlushAll(); } public void Dispose() { pool.Shutdown(); } } [Serializable] class _CacheItem { public object Data { get; set; } public TimeSpan SlidingExpiration { get; set; } }}

                                                              以上内容基本都是原创,部分引用了维基百科,和其他博客的观点。 

                                                                         2018/05/13    01:23:13  创作

 

转载于:https://www.cnblogs.com/LowKeyCXY/p/9031310.html

你可能感兴趣的文章
网络公司易优专员介绍几种SEO工具
查看>>
关于Java线程池异常不打印问题
查看>>
jQuery插件的使用方法
查看>>
Python学习笔记-基础篇
查看>>
4款超强大素材资源网站,收藏起来刻不容缓!
查看>>
Linux的.a、.so和.o文件
查看>>
浅谈数据标注平台运营模式
查看>>
怎么解决汽车制造业CAD图纸安全外发问题?
查看>>
Tech 助力Fin ,大数据风控系统赋能掌众金服!
查看>>
关于uiview
查看>>
sublime text3使用心得
查看>>
文字转换成语音,这里有简单的方法
查看>>
ZooKeeper 概念篇:你不知道的ZooKeeper,网友回复:精辟
查看>>
建筑论文发表多少钱
查看>>
Docker入门教程
查看>>
支持高并发的短信接口-kewail
查看>>
[java] Could not find the main class的问题处理
查看>>
和为n连续正数序列
查看>>
golang学习的点点滴滴:匿名函数
查看>>
【51CTO技术论坛】Android应用程序开发 实用案例50则
查看>>