.net 服务端缓存 Cache/CacheHelper

服务端缓存公共类

/// <summary>
    /// 公共缓存类
    /// </summary>
    public static class CacheHelper
    {
        private static ObjectCache cache = MemoryCache.Default;

        /// <summary>
        /// 查询缓存是否存在
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <returns>是否存在</returns>
        public static bool ExistsCache(string key)
        {
            return cache.Contains(key);
        }

        /// <summary>
        /// 根据缓存键移除缓存对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="key">缓存键</param>
        public static void RemoveCache(string key)
        {
            if (!cache.Contains(key)) return;

            cache.Remove(key);
        }

        /// <summary>
        /// 设置缓存对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="key">缓存键</param>
        /// <param name="obj">缓存对象</param>
        /// <param name="expires">过期时间(单位:分钟)</param>
        public static void SetCache<T>(string key, T obj, double expires = 20) where T : class
        {
            CacheItemPolicy policy = new CacheItemPolicy()
            {
                AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(expires)
            };

            cache.Set(key, obj, policy);
        }

        /// <summary>
        /// 根据缓存键获取缓存对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="key">缓存键</param>
        /// <returns>缓存对象</returns>
        public static T GetCache<T>(string key) where T : class
        {
            if (!cache.Contains(key)) return null;
            var item = cache.GetCacheItem(key);
            if (item != null)
            {
                return item.Value as T;
            }
            return null;
        }

        /// <summary>
        /// 获取缓存对象,如果不存在,则重新设置
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="key">缓存键</param>
        /// <param name="func">缓存委托</param>
        /// <param name="expires">过期时间(单位:分钟)</param>
        /// <returns>缓存对象</returns>
        public static T GetCache<T>(string key, Func<T> func, double expires = 20) where T : class
        {
            if (!cache.Contains(key))
            {
                CacheItemPolicy policy = new CacheItemPolicy()
                {
                    AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(expires)
                };

                T obj = null;

                if (func != null)
                {
                    obj = func();

                    if (obj != null)
                    {
                        cache.Set(key, obj, policy);
                    }
                }

                return obj;
            }
            else { return cache.GetCacheItem(key).Value as T; };
        }
    }

原文地址:https://www.cnblogs.com/jiangqw/p/12121245.html

时间: 2024-10-05 05:18:46

.net 服务端缓存 Cache/CacheHelper的相关文章

服务端缓存HttpRuntime.Cache的使用

HttpRuntime.Cache.Insert("缓存key", "缓存content", null, DateTime.Now.AddMinutes(3), TimeSpan.Zero);//存入本地服务端 string cacheContent = string.Empty; if (HttpRuntime.Cache["缓存key"] == null)//当缓存为空的时候执行的逻辑 { Response.AddHeader("r

ABP开发框架前后端开发系列---(15)ABP框架的服务端和客户端缓存的使用

缓存在一个大型一点的系统里面是必然会涉及到的,合理的使用缓存能够给我们的系统带来更高的响应速度.由于数据提供服务涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器无法快速处理这些并发请求,那么将会增加客户端的请求时间,严重者可能导致数据库服务或者应用服务直接瘫痪.缓存方案就是为这个而诞生,随着缓存的引入,可以把数据库的IO耗时操作,转换为内存数据的快速响应操作,或者把整个页面缓存到缓存系统里面.本篇随笔主要介绍利用ABP框架的支持实现

Apache Httpd服务器之缓存粗解

当我们通过浏览器输入一个网址,然后服务器响应给我们内容时,服务器会有一个非常复杂的处理过程.服务器并不是每次都会根据我们请求的页面在磁盘上读取页面内容,然后将这些内容返回给浏览器供我们浏览.如果这样,那么当浏览器的并发请求特别多时,会对服务器造成很大的负载.那么服务器如何在并发请求特别大时还能保持响应水准呢?为了解决这一问题,http协议引进了缓存标准.而apache httpd服务器实现了http协议的这一标准.当然,请求和响应是双向的,所以缓存也不仅仅是在服务器这一端来实现,目前的主流浏览器

用http请求thrift服务端出现了内存溢出的情况

记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机,来解决内存溢出的痛苦吗? 你经历过一个BUG,百思不得其解,头发一根一根脱落的烦恼吗? 我知道,你有过! 但是我还是要来说说我的故事.................. 背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务

vue服务端渲染页面缓存和组件缓存的实例详解

vue缓存分为页面缓存.组建缓存.接口缓存,这里我主要说到了页面缓存和组建缓存 页面缓存: 在server.js中设置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 const LRU = require('lru-cache') const microCache

vue服务端渲染添加缓存的方法

什么是服务器端渲染(SSR)? Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序. 服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行. 缓存 虽然 Vue 的服务

服务端控制各种浏览器禁止缓存页面资源 学习笔记

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Demo2 extends HttpServlet { public voi

Spring Cloud官方文档中文版-服务发现:Eureka服务端

官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR3/#spring-cloud-eureka-server 文中例子我做了一些测试在:http://git.oschina.net/dreamingodd/spring-cloud-preparation Service Discovery: Eureka Server 服务发现:Eureka服务端 How to Include Eureka Server 如何创建Eurek

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现

一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者在学习时期和客户端美术策划的小伙伴一起做的游戏,笔者主要负责游戏服务端开发,客户端也参与了一部分,同时也是这个项目的发起和负责人.这次主要分享这款游戏的服务端相关的设计与实现,从整体的架构设计,到服务器网络通信底层的搭建,通信协议.模型定制,再到游戏逻辑的分层架构实现.同时这篇博客也沉淀了笔者在游戏公司实践五