zoukankan      html  css  js  c++  java
  • webservice 缓存机制

    WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存

    一、输出缓存
    输出缓存的使用非常简单,比较适用于WebService的参数比较少,结果比较单一的情况,并且很少改动的,天气预报,则可以设置30分钟甚至数小时的缓存:在WebMethod属性上指定CacheDuration属性即可,例如

     这样,600秒内这个WebService的所有输出数据都将从缓存中读取,不会真正做数据处理,如果事务代码是访问数据库的话,现在这种方法就会比每次都访问数据库快得多。这种缓存适合初接触WebService的新手使用。

    [WebMethod(Description = “天气预报”,CacheDuration=600)]
    public string Weather()
    {
    return “weather”;

    要注意的是,不是所有服务都适合使用这种缓存,例如每次结果都不一样的,访问数极高的服务,缓存将会变得非常大,占用很多服务器的内存,却没有实际效果。

    二、数据缓存
    想将你的WebService某些运行数据保存起来?如果不使用本地的数据库或者文件,那么缓存是最好的选择。这种缓存不同于上面提到的输出缓存,它需要编写代码来实现,但是相对应的,它的功能非常强大,可以存放任何类型的信息,并且你可以在任何时候检索它。

    虽然也可以使用Application来模拟缓存,但是这需要你自己管理内存释放、用户并发问题,在.net时代已经被抛弃,WebService下的缓存使用Cache这个集合

    [WebMethod(Description = @"优惠分类或者消费类型")]
    [ScriptMethod]
    public CorpCategory[] SearchCouponCategory()
    {
    try
    {
    CorpCategory[] corpCategory = (CorpCategory[])Utils.CacheManage.GetFromCache("corpCategory");
    if (corpCategory == null || corpCategory.Length <= 0)
    {
    CorpCategoryDao categoryDao = new CorpCategoryDao();
    corpCategory = categoryDao.GetCorpCategorys();
    Utils.CacheManage.SetCache("corpCategory",corpCategory, 60);
    }

    return corpCategory;
    }
    catch (Exception ex)
    {
    Log.Info("优惠分类:Default —> SearchCouponCategory", ex);
    return null;
    }
    }

    public class CacheManage
    {
    /// <summary>
    /// 从缓存获取
    /// </summary>
    /// <param name="objectkey"></param>
    /// <returns></returns>
    public static object GetFromCache(string objectkey)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    return objCache[objectkey];
    }
    /// <summary>
    /// 添加到缓存
    /// </summary>
    /// <param name="objectkey"></param>
    /// <param name="objObject"></param>
    public static void SetCache(string objectkey, object objObject)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Insert(objectkey, objObject);
    }

    /// <summary>
    /// 添加到缓存
    /// </summary>
    /// <param name="objectkey"></param>
    /// <param name="objObject"></param>
    /// <param name="minutes">分钟</param>
    public static void SetCache(string objectkey, object objObject, int minutes)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Insert(objectkey, objObject, null, DateTime.Now.AddMinutes(minutes), TimeSpan.Zero);
    }

    public static void ClearCache(string objectkey)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Remove(objectkey);
    }
    }

    Cache.Insert方法用于将数据加入缓存。这个方法一共有4种重载,在这个例子中,我们使用的是功能最全面的重载版本,我们以此为例:每一个参数分别是键名(使用方法类似于Session)(objectkey),值(objObject),依赖性(null),绝对过期时间(DataTime.MaxValue),可变过期时间( DateTime.Now.AddMinutes(minutes)),缓存优先级,缓存项目删除时的委托方法绝对过期时间是固定的,此处TimeSpan.Zero表示不使用可变过期。

  • 相关阅读:
    说一说Java的Unsafe类
    阿里云CentOS下安装jdk
    LeetCode 5
    五种方法实现Java的Singleton单例模式
    聊聊Java的final关键字
    LeetCode 4
    Java9都快发布了,Java8的十大新特性你了解多少呢?
    【Spring】mvc:annotation-driven 使用
    【gradle】【maven】gradle 转 maven pom.xml
    [GIT]比较不同分支的差异
  • 原文地址:https://www.cnblogs.com/lucky_dai/p/2471650.html
Copyright © 2011-2022 走看看