web开发缓存技术之B/S开发框架objectcache缓存管理(二)

B/S开发框架缓存管理分为.net自带objectcache非分布式缓存和Redis第三方结构性缓存,都是保留在Web开发框架管理的内存中,增、删、改、查是数据操作常见的几大类型,缓存技术也不除外。

B/S开发框架objectcache缓存

web开发框架 缓存的作用是只在数据第一次被访问时才从数据库中读取数据,将数据放在内存中,以后查询相同的数据则直接从内存中返回,这样速度有明显的提升。Web开发框架在数据更改时更改内存数据,同时或者规定的延时内更改数据库对应的数据,从而实现缓存和数据库数据同步。基本原理是用空间换时间,我们重点看下下面代码如何做的。

B/S开发框架objectcache代码如下:

 public class CacheManage:IDisposable
    {
        private static ICacheStrategy _cacheStrategy;
        private static volatile CacheManage instance = null;
        private static object lockHelper = new object();

        /// <summary>
        /// 默认缓存存活期
        /// </summary>
        protected int _timeOut = 3600;

        /// <summary>
        /// 期相对时间[单位: 秒] 
        /// </summary>
        public int TimeOut
        {
            set { _timeOut = value > 0 ? value : 0; }
            get { return _timeOut; }
        }
        
        /// <summary>
        /// 管理器
        /// </summary>
        private CacheManage()
        {
            lock (lockHelper)
            {
                string cacheStrategy = Config.GetStr("CacheStrategy");
                switch (cacheStrategy)
                {
                    case "Redis":
                        _cacheStrategy = new RedisStrategy();
                        break;
                    default:
                        _cacheStrategy = new DefaultStrategy();
                        break;
                }
            }
        }

        /// <summary>
        /// 当前类的实例
        /// </summary>
        /// <returns></returns>
        public static CacheManage GetCacheService()
        {
            if (instance == null)
            {
                lock (lockHelper)
                {
                    if (instance == null)
                    {
                        instance = new CacheManage();
                    }
                }
            }
            return instance;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public void Add(string key, object obj)
        {
            Add(key, obj, _timeOut);
        }

        /// <summary>
        /// 添加进缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public void Add<T>(T obj) where T : class,ICacheObject
        {
            if (obj == null)
            {
                return;
            }
            Add<T>(obj, _timeOut);
        }

        /// <summary>
        /// 添加缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public void Add<T>(T obj, int expire) where T : class,ICacheObject
        {
            if(obj==null)
            {
                return;
            }
            string key = obj.GetCacheKey();
            Add(key, obj, expire);
        }

        /// <summary>
        /// 向缓存加入新的对象
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        /// <param name="expire">到期时间,单位:秒</param>
        public virtual void Add(string key, object obj, int expire)
        {
            if (_timeOut > 0)
            {
                lock (lockHelper)
                {
                    _cacheStrategy.Add(key, obj, expire);
                }
            }
        }

        /// <summary>
        /// 取得数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public object Retrieve(string key)
        {
            return _cacheStrategy.Retrieve(key);
        }

        /// <summary>
        /// 取得数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T Retrieve<T>(string key) where T : class,ICacheObject
        {
            return _cacheStrategy.Retrieve<T>(key);
        }

        /// <summary>
        /// 删除缓存中的对象
        /// </summary>
        /// <param name="key"></param>
        public void Remove(string key)
        {
            lock (lockHelper)
            {
                //移除相应的缓存项
                _cacheStrategy.Remove(key);
            }
        }

        /// <summary>
        /// 清空缓存
        /// </summary>
        public void FlushAll()
        {
            _cacheStrategy.FlushAll();
        }

        /// <summary>
        /// 清理
        /// </summary>
        public void Dispose()
        {
            //清空缓存
            FlushAll();
        }
    }

web开发框架中为什么要使用缓存?缓存是载体,数据保留在内存中的载体,内存和数据库哪个更好哪个更快,当然是内存,所以缓存可以提升速度,数据在缓存中操作了,当然不会频繁的访问数据库,这样也减少了数据库访问频次,减少开销。

如果B/S开发框架程序将数据库数据读取后又丢弃,并不放到哪儿保留,方便下次快速读取,整个数据库服务器都在不停的运转,高IO吞吐,高CPU占用率,对资源消耗会异常的大,使得请求并发量稍微大点,系统就会假死,甚至崩掉。

标签: Web开发框架SqlServer专辑标签

网站&系统开发技术学习交流群:463167176

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:软件开发框架 » web开发缓存技术之B/S开发框架objectcache缓存管理(二)
本文标题:web开发缓存技术之B/S开发框架objectcache缓存管理(二)
本文地址:http://www.hocode.com/OrgTec/DB/0014.html

相关文章: web开发缓存技术之B/S开发框架Redis分布式缓存管理

电话
电话 18718672256

扫一扫
二维码