• 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
        }
  • 相关阅读:
    java执行shell命令,chmod 777 xxx,改变权限无效的解决办法。
    SpringBoot配置双数据源(一个项目同时连接操作两台数据库)
    《机器学习》周志华西瓜书习题参考答案:第2章
    《机器学习》周志华西瓜书学习笔记(二):模型评估与选择
    只用一套解决方案,就可解决80%的交通物流行业信息难题
    原码、反码、补码
    400+节点的Elasticsearch集群运维
    史上最全PostgreSQL体系结构
    IDEA创建JAVAFX并打包成exe
    DB2 Zos 浅谈
  • 原文地址:https://www.cnblogs.com/suger/p/3454735.html
Copyright © 2020-2023  润新知