zoukankan      html  css  js  c++  java
  • Memcached 缓存用法实例

    本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考。具体方法如下:

    ICacheStrategy.cs文件如下:

    复制代码 代码如下:
    public interface ICacheStrategy
    {
            /// <summary>
            /// 添加数据到缓存
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            void Add(string objId, object o, int second);

            /// <summary>
            /// 添加数据到缓存 (依赖其它缓存)
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            /// <param name="dependKey">依赖缓存名称数组</param>
            void AddCacheDepend(string objId, object o, int second, string[] dependKey);

            /// <summary>
            /// 添加数据到缓存 (依赖文件)
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            /// <param name="files">依赖缓存名称文件名数组</param>
            void AddFileDepend(string objId, object o, int second, string[] files);

            /// <summary>
            /// 删除指定缓存
            /// </summary>
            /// <param name="objId"></param>
            void RemoveCache(string objId);

            /// <summary>
            /// 删除所有缓存
            /// </summary>
            void RemoveCacheAll();

            /// <summary>
            /// 删除匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            /// <returns></returns>
            void RemoveCacheRegex(string pattern);

            /// <summary>
            /// 获取所有缓存键
            /// </summary>
            /// <returns></returns>
            IList<string> GetCacheKeys();

            /// <summary>
            /// 搜索 匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            /// <returns></returns>
            IList<string> SearchCacheRegex(string pattern);

            /// <summary>
            /// 获得缓存数据
            /// </summary>
            /// <param name="objId"></param>
            /// <returns></returns>
            object GetCacheData(string objId);

            /// <summary>
            /// 判断此缓存是否有效
            /// </summary>
            /// <param name="objID"></param>
            /// <returns></returns>
            bool HasCache(string objID);
    }

    MemcachedStrategy.cs文件如下:

    复制代码 代码如下:
    public class MemcachedStrategy : ICacheStrategy
    {
            #region ICacheStrategy 成员

            /// <summary>
            /// 添加数据到缓存
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            public void Add(string objId, object o, int second)
            {
                if (second > 0)
                {
                    MemcachedManager.CacheClient.Set(objId, o, DateTime.Now.AddSeconds(second));
                }
                else
                {
                    MemcachedManager.CacheClient.Set(objId, o);
                }
            }

            #region 缓存依赖没有用到memcached
            /// <summary>
            /// 添加数据到缓存 (依赖其它缓存)
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            /// <param name="dependKey">依赖缓存名称数组</param>
            public void AddCacheDepend(string objId, object o, int second, string[] dependKey)
            {
                CacheDependency dependencies = new CacheDependency(null, dependKey, DateTime.Now);
                HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
            }

            /// <summary>
            /// 添加数据到缓存 (依赖文件)
            /// </summary>
            /// <param name="objId">缓存名称</param>
            /// <param name="o">缓存内容</param>
            /// <param name="second">缓存时间(秒)</param>
            /// <param name="files">依赖缓存名称文件名数组</param>
            public void AddFileDepend(string objId, object o, int second, string[] files)
            {
                CacheDependency dependencies = new CacheDependency(files, DateTime.Now);
                HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
            }
            #endregion

            /// <summary>
            /// 删除指定缓存
            /// </summary>
            /// <param name="objId"></param>
            public void RemoveCache(string objId)
            {
                if (MemcachedManager.CacheClient.KeyExists(objId))
                    MemcachedManager.CacheClient.Delete(objId);
            }

            /// <summary>
            /// 删除所有缓存
            /// </summary>
            public void RemoveCacheAll()
            {
                MemcachedManager.CacheClient.FlushAll();
            }

            /// <summary>
            /// 删除匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            public void RemoveCacheRegex(string pattern)
            {
                IList<string> list = SearchCacheRegex(pattern);
                foreach (var item in list)
                {
                    MemcachedManager.CacheClient.Delete(item);
                }
            }

            /// <summary>
            /// 获取所有缓存键
            /// </summary>
            /// <returns></returns>
            public IList<string> GetCacheKeys()
            {
                return MemcachedManager.GetAllKeys();
            }

            /// <summary>
            /// 搜索 匹配到的缓存
            /// </summary>
            /// <param name="pattern"></param>
            /// <returns></returns>
            public IList<string> SearchCacheRegex(string pattern)
            {
                List<string> l = new List<string>();
                IList<string> cacheKeys = MemcachedManager.GetAllKeys();
                foreach (var item in cacheKeys)
                {
                    if (Regex.IsMatch(item, pattern))
                    {
                        l.Add(item);
                    }
                }
                return l.AsReadOnly();
            }

            /// <summary>
            /// 获得缓存数据
            /// </summary>
            /// <param name="objId"></param>
            /// <returns></returns>
            public object GetCacheData(string objId)
            {
                return MemcachedManager.CacheClient.Get(objId);
            }

            /// <summary>
            /// 判断此缓存是否有效
            /// </summary>
            /// <param name="objID"></param>
            /// <returns></returns>
            public bool HasCache(string objID)
            {
                return MemcachedManager.CacheClient.KeyExists(objID);
            }
            #endregion
    }

  • 相关阅读:
    devops之 gitlab-ci + mesos + docker + marathon 持续发布③marathon常用api的使用
    centos7环境下二进制编译安装ffmpeg
    jenkins2.236 + sonarqube7.6 + sonar-scanner3.3的集成配置和生产环境使用示例
    zabbix添加top10内存和cpu资源占用情况
    Marathon基于有认证的harbor仓库创建应用
    devops之 gitlab-ci + mesos + docker + marathon 持续发布③marathon 结合 gitlab-ci的CICD持续发布
    docker拉取指定版本的centos和python镜像
    devops之 gitlab-ci + mesos + docker + marathon 持续发布②安装marathon
    devops之 gitlab-ci + mesos + docker + marathon 持续发布①mesos集群环境的搭建
    zabbix4.0监控gpu
  • 原文地址:https://www.cnblogs.com/xiaocandou/p/4602973.html
Copyright © 2011-2022 走看看