Web框架第三篇--缓存篇

缓存的优劣很大程度上决定了框架的效率,一个有节操的缓存它应该是高效的,利用率高的,具备更多扩展功能的。


一、介绍之前

计算机各个硬件的运行效率是不一样的,CPU>>一级缓存>>二级缓存>>内存>>硬盘。如何提供CPU、一级缓存、二级缓存的使用率是操作系统的课题。我们需要做的就是如何提高内存使用效率,减少磁盘IO。

目前我们熟知的跟缓存有关的产品:.Net Mvc的CacheManager,Redis,Memcached

二、使用范围

缓存的作用就是将频繁需要的数据从原先存储效率相对低的磁盘存放到存储效率高的内存中,由于磁盘相对廉价而内存相对昂贵,我们对存放进入内存的数据也应该是有取舍的。按我个人理解来说,我觉得符合以下规则的可以考虑放入缓存中:

1.数据使用频繁的

2.改变较少,查询较多的

3.数据量总体不是很大的

总体而言,缓存不应该多度占用系统正常运行所需资源,尽量提高缓存命中率,降低缓存高频更改。

三、初始化

同样的,为了解耦与具体缓存框架的关系,我们需要自己订立一套标准的缓存接口

public interface IMemoryCacheManager {
        /// <summary>
        /// 从缓存块获取缓存项
        /// </summary>
        /// <typeparam name="TKey">关联缓存的类型</typeparam>
        /// <typeparam name="TResult">存储的缓存项类型</typeparam>
        /// <param name="key">与缓存项关联的键值</param>
        /// <param name="acquire">获取配置</param>
        /// <returns></returns>
        TResult Get<TKey, TResult>(TKey key, Func<AcquireContext<TKey>, TResult> acquire);         /// <summary>
        /// 获取缓存块
        /// </summary>
        /// <typeparam name="TKey">关联缓存的类型</typeparam>
        /// <typeparam name="TResult">存储的缓存项类型</typeparam>
        /// <returns></returns>
        ICache<TKey, TResult> GetCache<TKey, TResult>();
    }

acquire的委托就是当缓存中不存在key时,通过执行acquire,将结果存入缓存,同时可以在AcquireContext<TKey>入参中设置缓存失效参数(比如失效时间、失效触发文本等会)。

目前基于这个接口,我实现了纯内存式的缓存接口和基于Redis缓存的缓存接口。

四、总结

Web框架的总结基本结束了。之后可能会针对某一个技术进行重点详细地分析。目前计划下一步介绍具体业务应用的设计和实现。

蜗牛历险记(二) Web框架(下)的更多相关文章

  1. 蜗牛历险记(二) Web框架(中)

    上篇简单介绍了框架所使用的Autofac,采用Autofac提供的Ioc管理整个Web项目中所有对象的生命周期,实现框架面向接口编程.接下来介绍框架的日志系统. 一.介绍之前 框架日志是否有存在的必要 ...

  2. 蜗牛历险记(二) Web框架(上)

    接上篇所说,本篇主要内容是讲述如何使用Autofac来管理整个平台的生命周期(初级). 一.简述 插件式Web开发的同学应该还会记得PreApplicationStartMethod这个Assembl ...

  3. Web框架下安全漏洞的测试反思

    此文已由作者王婷英授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在平时的测试中,一般情况下,我们都是比较关注功能业务测试,以及对应的接口测试,很少去关注对应的业务设计上存在 ...

  4. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  5. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  6. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  7. JEECG(二) JEECG框架下调用webservice java springmvc maven 调用 webservice

    JEECG系列教程二 如何在JEECG框架下使用webservice 本文所使用的webservice是c#开发的 其实无论是什么语言开发的webservice用法都一样 java springmvc ...

  8. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  9. 二、Web框架实现

    一.简单web(socket) 在前一篇WEB框架概述一文中已经详细了解了:从浏览器键入一个URL到返回HTML内容的整个过程.说到底,本质上其实就是一个socket服务端,用户的浏览器其实就是一个s ...

随机推荐

  1. OAuth 2 Developers Guide--reference

    Introduction This is the user guide for the support for OAuth 2.0. For OAuth 1.0, everything is diff ...

  2. Cookie API

    Cookie API All cookies created by the Nova framework are encrypted and signed with an authentication ...

  3. SQL Server 中添加用户

    在对象资源管理器中点击安全性,选择登录名-新建登录名

  4. servlet案例

    1.重定向 方式1:在servlet中写:response.setStatus(302);      response.setHeader("Location","路径& ...

  5. TextView设置动态改变颜色

    通过TextView的setTextColor方法进行文本颜色的设置, 这里可以有3种方式进行设置: 第1种:tv.setTextColor(android.graphics.Color.RED);/ ...

  6. (转)sql 时间转换格式 convert(varchar(10),字段名,转换格式)

    convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121) CONVERT为日期转换函数,一般就是在时间类型(datetime ...

  7. mysql数据库常用语句3

    一:查询指定数据库中所有的表名 数据库名:test select table_name from information_schema.tables where table_schema='test' ...

  8. CountDownLatch(闭锁)

    一.闭锁(Latch)    闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都 ...

  9. saltstack实战2--远程执行之返回(returner)

    saltstack有3大功能:远程执行,配置管理,云管理 其中远程执行又可分解为:目标,模块,返回  这3个部分. 比如下面语句 [root@master ~]# salt '*' test.ping ...

  10. nginx 错误日志分析 以及说明

    1.日志简介 nginx日志主要有两种:访问日志和错误日志.访问日志主要记录客户端访问nginx的每一个请求,格式可以自定义:错误日志主要记录客户端访问nginx出错时的日志,格式不支持自定义.两种日 ...