步步为营-79-缓存

缓存Cache,一种空间换取时间的技术,适用于经常访问,不常修改的数据.

1 写入缓存

1.1 方法一 Cache["message"]="ab";

1.2 方法二 Cache.insert("message","ab");

1.3 其他重载 Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

参数:   key:用于引用该对象的缓存键。
           value: 要插入缓存中的对象。
           dependencies: 该项的文件依赖项或缓存键依赖项。 当任何依赖项更改时,该对象即无效,并从缓存中移除。 如果没有依赖项,则此参数包含 null。
           absoluteExpiration:所插入对象将到期并被从缓存中移除的时间。  如果使用绝对到期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。
            slidingExpiration: 最后一次访问所插入对象时与该对象到期时之间的时间间隔。如果使用可调到期,则 absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。
            priority:该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。 该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。
            onRemoveCallback: 在从缓存中移除对象时将调用的委托(如果提供)。 当从缓存中删除应用程序的对象时,可使用它来通知应用程序。

1.4 缓存移除的4个原因

CacheItemRemovedReason:

Removed = 1, System.Web.Caching.Cache.Remove(System.String) 方法调用从缓存中移除的。
       Expired = 2,从缓存移除该项的原因是它已过期。
       Underused = 3, 之所以从缓存中移除该项,是因为系统要通过移除该项来释放内存。
       DependencyChanged = 4, 从缓存移除该项的原因是与之关联的缓存依赖项已更改。
       
 2 例子

2.1 Demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Caching;

namespace CacheTest
{
    public partial class CacheDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //01 假设字符串abc是来自于数据库
            string str = "abc,来至于数据库";
            //02 将数据写入缓存中
            if (Cache["message"] == null)
            {
                Cache.Insert("message", str, null, DateTime.Now.AddSeconds(5), Cache.NoSlidingExpiration, CacheItemPriority.Low, RemoveCache);
                Response.Write("数据来自于数据库");
            }
            else {
                Response.Write("数据来自于缓存");
            }
        }

        //根据委托构造方法
        private void RemoveCache(string key, object value, CacheItemRemovedReason reason)
        {
            if (reason ==CacheItemRemovedReason.Expired )
            {

            }
        }
    }
}

1

2.2 页面缓存
<%@ OutputCache Duration="5" VaryByParam="*" %>

Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效

VaryByParam=“id”,表示对于相同页面的不同的id参数进行单独缓存。如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如VaryByParam=“id;number”.如果想让任何不同的查询字符串都创建不同的缓存,则设置VaryByParam="*"

这个缓存是在服务器缓存的,不是在客户端,因为客户端还不断向服务器提交的请求的,只不过服务器看到有缓存就没有再执行页面类。

2.3 文件缓存依赖(当页面被访问时,从文本文件中读取数据)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Caching;
using System.IO;

namespace CacheTest
{
    public partial class _03文件缓存依赖 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //01获取文件
            string filePath = Request.MapPath("被访问的文本文件.txt");
            if (Cache["fileContent"] == null)
            {

                //读取文件
                string fileContent = File.ReadAllText(filePath);
                //文件缓存依赖---如果文件发生变化,就会清楚缓存
                CacheDependency cdd = new CacheDependency(filePath);
                Cache.Insert("fileContent", fileContent, cdd);
                Response.Write("数据来自于文件");
            }
            else {
                Response.Write("数据来自于缓存" + Cache["fileContent"].ToString());
            }
        }
    }
}

3

时间: 2024-10-10 06:44:30

步步为营-79-缓存的相关文章

Java读源码之Netty深入剖析

第1章 课程介绍 介绍本课程需要的前提知识和内容概要 1-1 Netty深入剖析 第2章 Netty基本组件 使用一个简单的socket例子概括Netty里面的基本组件,包括NioEventLoop,Channel,ByteBuf,Pipeline,ChannelHandler 2-1 一个简单的socket例子 2-2 Netty对于socket的抽象 2-3 Netty组件简单介绍 第3章 Netty服务端启动 分析服务端启动流程,包括服务端Channel的创建,初始化,以及注册到selec

数据字典实现缓存

数据字典的好处很多比如: 1.可以减少使用表,来专门记录类型. 2.类型使用key检索,或者报表统计分析,在一定程度上相比汉字来讲,效率好得多. 3.使用缓存的数据字典.也可以减少不少的io操作. 等等.... 首先,库表设计就智者见智了.不多说.爱怎么设计就怎么设计. 完整的数据字典设计 ,需要 1.生成select 自定义标签. 2.list页面,或者get页面, 一个key转 value的标签 使用自定义标签,搭配上缓存的数据字典是最方便.最完美的解决办法, 接下来,就直接贴代码了. 一.

在网站中数据缓存的重要性

通过计算斐波那契数列明白缓存在网站开发中的重要性 1 .首先测试一下没有使用数据缓存来计算斐波那契数列. var count = 0; function fib(n) { count++; if(n === 0 || n === 1) { return 1; } return fib(n - 1) + fib(n - 2); } fib(40); console.log(count);//count是函数fib运算次数,当fib(40)时候运行次数高达:331160281次,感兴趣的可以检测一下

第八章 企业项目开发--分布式缓存memcached

注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——Direct3D中的顶点缓存和索引缓存

第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物体模型的基本单元,而一个三角形有3个顶点,为了能够使用大量三角形组成三角形网格来描述物体,需要首先定义号三角形的顶点(Vertex),3个顶点确定一个三角形,顶点除了定义每个顶点的坐标位置外,还还含有颜色等其他属性. 在Direct3D中,顶点的具体表现形式是顶点缓存,顶点缓存保存了顶点数据的内存空

Varnish[反向代理,缓存基于内存或文件]

下载软件包:http://pan.baidu.com/s/1nuCfCud#tar -xf lnmp_soft-2016-7-20.tar.gz#cd lnmp_soft#install_lnmp.sh  选择7 配置文件:主配置文件(定义前端配置)#vim /etc/sysconfig/varnish60:VARNISH_VCL_CONF=/etc/varnish/default.vcl #vcl文件路径66:ARNISH_LISTEN_PORT=80  端口73:VARNISH_SECRET

缓存淘汰算法--LRU算法

1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部: 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部: 3. 当链表满的时候,将链表尾部的数据丢弃. 1.3. 分析 [命中率] 当存在热点数据时,LRU的效率很好,但偶发性的

cache缓存

ob,输出缓冲区,是output buffering的简称 FileCache.php 1 <?php 2 //本文件用来存储和读取文件中的数据 3 class FileCache{ 4 //使用单例(一个静态变量->保存对象:一个静态方法->判断是否属于自身) 5 private static $config;//用来存储配置信息 6 private static $obj; 7 private function __construct() {//禁止外部实例化对象 8 self::$

使用redis缓存加索引处理数据库百万级并发

使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据,这里不再细说.我大概的做法是这样的,编码使用多线程访问我的数据库,在访问数据库前先访问redis缓存没有的话在去查询数据库,需要注意的是redis最大连接数最好设置为300,不然会出现很多报错. 贴一下代码吧 1 2 3 4 5 6 7 8 9 10 1

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin