zoukankan      html  css  js  c++  java
  • 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
        }
  • 相关阅读:
    List 集合的常用方法总结
    springboot 整合 web 项目找不到 jsp 文件
    Web 安全
    微服务开放平台接口设计
    SpringCloud Hystrix 参数
    SpringCloud Eureka 配置
    ELK 日志收集系统
    网盘搜索引擎原理
    jsPlumb.jsAPI阅读笔记(官方文档翻译)
    ionic获取ios唯一设备id的解决方案
  • 原文地址:https://www.cnblogs.com/suger/p/3454735.html
Copyright © 2011-2022 走看看