C# 中的缓存初相识

前言

    公司的项目中有一个模块比较稳定,读取数据比较频繁,更新数据频率低,这就需要用到缓存技术,下面来了解一下.Net中的缓存。

正文

为什么出现缓存?

    很久很久以前,用户经常去请求一个对象,从数据库中去取,随着时间的推移,对象的数据越来越多,对象也越来越大,用户请求这个对象等待响应的时间越来越长,数据库一直在工作,他也觉得很累,不想干了~~于是缓存就出现了,他可以
- 降低延迟
     从客户端的缓存中请求数据比从源服务器请求数据所用时间更少,呈现速度更快,提高了用户体验度。
- 降低网络传输
     缓存就相当于一个数据的副本,不用从服务器请求数据会大大降低用户的宽带使用,减低了网络流量的使用。

什么是缓存?

    大部分的业务场景下,80%的访问量都集中在20%的热数据上(二八原则),我们把这20%的频繁访问的数据存在一个临时的地方,缓存就是这个地方。每次在获取原始数据代价太大,所以我们需要将临时数据或最终结果保存下来使用。
     在离线访问QQ空间动态的时候,我们会看到最近一次更新的数据,这次的保留数据就被放在缓存中,以供用户再次访问时提高访问速度。

缓存分类

这里写图片描述

WebService的缓存机制

  • 输出缓存
    使用简单,适用于WebService的参数比较少,结果比较单一、改动较少的情况。
  • 数据缓存
    功能强大,可以存放任何类型的信息,并且可以在任何时候检索它。

应用举例

    数据缓存主要是存储在Context.Cache之中,WebService的缓存使用Cache这个集合。
    我在项目中写了一个CacheHelper类对缓存进行操作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;

namespace WebApplication6.Comment
{
    public class CacheHelper
    {
        /// <summary>
        /// 读取缓存数据
        /// </summary>
        /// <param name="cacheKey"></param>
        /// <returns></returns>
        public static object GetCache(string cacheKey)
        {
            var objCache = HttpRuntime.Cache.Get(cacheKey);
            return objCache;
        }

        /// <summary>
        /// 设置缓存数据
        /// </summary>
        /// <param name="cacheKey"></param>
        /// <param name="content"></param>
        public static void SetCache(string cacheKey, object content)
        {
            var objCache = HttpRuntime.Cache;
            objCache.Insert(cacheKey, content);
        }

        /// <summary>
        /// 设置缓存数据并且设置默认过期时间
        /// </summary>
        /// <param name="cacheKey"></param>
        /// <param name="content"></param>
        /// <param name="timeOut"></param>
        public static void SetCache(string cacheKey, object content, int timeOut = 3600)
        {
            try
            {
                if (content == null)
                {
                    return;
                }
                var objCache = HttpRuntime.Cache;
                //设置绝对过期时间
                //绝对时间过期。DateTime.Now.AddSeconds(10)表示缓存在3600秒后过期,TimeSpan.Zero表示不使用平滑过期策略。
                objCache.Insert(cacheKey, content, null, DateTime.Now.AddSeconds(timeOut), TimeSpan.Zero, CacheItemPriority.High, null);
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 移除指定缓存
        /// </summary>
        /// <param name="cacheKey"></param>
        public static void RemoveAllCache(string cacheKey)
        {
            var objCache = HttpRuntime.Cache;
            objCache.Remove(cacheKey);
        }

        /// <summary>
        /// 删除全部缓存
        /// </summary>
        public static void RemoveAllCache()
        {
            var objCache = HttpRuntime.Cache;
            var cacheEnum = objCache.GetEnumerator();
            while (cacheEnum.MoveNext())
            {
                objCache.Remove(cacheEnum.Key.ToString());
            }
        }

    }
}

参数说明

objCache.Insert()方法中有7个参数,下面是对参数的一些描述。
1. 参数“key”代表缓存数据项的键值,必须是唯一的。
2. 参数“value”代表缓存数据的内容,可以是任意类型。
3. 参数“dependencies”表示缓存的依赖项,也就是此项的更改意味着缓存内容已经过期。如果没有依赖项,可将此值设置为NULL。
4. 参数“absoluteExpiration”是日期型数据,表示缓存过期的时间,.NET 2.0提供的缓存在过期后是可以使用的,能使用多长时间,就看这个参数的设置。
5. 参数“slidingExpiration”的类型表示一段时间间隔,表示缓存参数将在多长时间以后被删除,此参数与absoluteExpiration参数相关联。
6. 参数“priority”表示撤销缓存的优先值,此参数的值取自枚举变量“CacheItemPriority”,优先级低的数据项将先被删除。此参数主要用在缓存退出对象时。
7. 参数“onRemoveCallback”表示缓存删除数据对象时调用的事件,一般用做通知程序。

总结

    缓存的知识先了解到这里,咱们下回接着聊,看我在项目中用到的一级缓存和二级缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 50
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值