【愚公系列】2023年02月 WMS智能仓储系统-004.内存缓存的使用
文章目录
- 前言
- 一、内存缓存的简单使用
- 1.安装包
- 2.简单使用
- 二、内存缓存的简单封装使用
- 1.注入
- 2.封装类
- 3.使用
前言
缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
ASP.NET Core 支持多种不同的缓存,最简单的缓存基于IMemoryCache,它表示存储在 Web 服务器内存中的缓存,内存缓存可以存储任何对象,存储形式键值对。
不过服务器停止,缓存内容就会消失,记得缓存不要当成数据库使用,避免重要的数据丢失,引起系统异常。
一、内存缓存的简单使用
1.安装包
Microsoft.Extensions.Caching.Memory
2.简单使用
1、注入服务
services.AddMemoryCache();
2、控制器中使用
/// <summary>
/// Home controller
/// </summary>
[Route("Home")]
[ApiController]
[ApiExplorerSettings(GroupName = "Base")]
public class HomeController : BaseController
{private IMemoryCache _cache;public HomeController(IMemoryCache memoryCache){_cache = memoryCache;}[HttpGet]public async Task<IActionResult> GetAsync(){string nowTime1 = _cache.Get<string>("t1");if (String.IsNullOrEmpty(nowTime1)){nowTime1 = DateTime.Now.ToString();_cache.Set("t1", nowTime1);}return Ok();}
}
二、内存缓存的简单封装使用
1.注入
#region 添加HttpContext上下文缓存管理类
services.AddSingleton<CacheManager>();
services.AddSingleton<IMemoryCache>(factory =>
{var cache = new MemoryCache(new MemoryCacheOptions());return cache;
});
#endregion
2.封装类
CacheManager
public class CacheManager
{//默认设置静态缓存public static CacheManager Default = new CacheManager();private IMemoryCache _cache = new MemoryCache(new MemoryCacheOptions());public CacheManager(){}/// <summary>/// 获取缓存/// </summary>/// <typeparam name="T">type of value</typeparam>/// <param name="key">key</param>/// <returns></returns>public T Get<T>(string key){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T value;_cache.TryGetValue<T>(key, out value);return value;}/// <summary>/// 设置缓存(无过期时间)/// </summary>/// <param name="key">key</param>/// <param name="value">value</param>public void Set_NotExpire<T>(string key, T value){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T v;if (_cache.TryGetValue(key, out v))_cache.Remove(key);_cache.Set(key, value);}/// <summary>/// 设置滑动过期时间/// </summary>/// <param name="key">key</param>/// <param name="value">value</param>public void Set_SlidingExpire<T>(string key, T value, TimeSpan span){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T v;if (_cache.TryGetValue(key, out v))_cache.Remove(key);_cache.Set(key, value, new MemoryCacheEntryOptions(){SlidingExpiration = span});}/// <summary>/// 设置绝对过期时间/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="value"></param>/// <param name="span"></param>/// <exception cref="ArgumentNullException"></exception>public void Set_AbsoluteExpire<T>(string key, T value, TimeSpan span){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T v;if (_cache.TryGetValue(key, out v))_cache.Remove(key);_cache.Set(key, value, span);}/// <summary>/// 设置滑动过期时间和绝对过期时间(缓存因为滑动时间访问自动续期)/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="value"></param>/// <param name="slidingSpan"></param>/// <param name="absoluteSpan"></param>/// <exception cref="ArgumentNullException"></exception>public void Set_SlidingAndAbsoluteExpire<T>(string key, T value, TimeSpan slidingSpan, TimeSpan absoluteSpan){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T v;if (_cache.TryGetValue(key, out v))_cache.Remove(key);_cache.Set(key, value, new MemoryCacheEntryOptions(){SlidingExpiration = slidingSpan,AbsoluteExpiration = DateTimeOffset.Now.AddMilliseconds(absoluteSpan.TotalMilliseconds)});}/// <summary>/// 通过key移除缓存/// </summary> /// <param name="key">key</param>public void Remove(string key){if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));_cache.Remove(key);}/// <summary>/// 销毁/// </summary>public void Dispose(){if (_cache != null)_cache.Dispose();GC.SuppressFinalize(this);}#region TokenHelper/// <summary>/// 判断Token是否存在/// </summary>/// <typeparam name="T"></typeparam>/// <param name="userID"></param>/// <param name="type"></param>/// <param name="expireMinute"></param>/// <returns></returns>/// <exception cref="ArgumentNullException"></exception>public bool Is_Token_Exist<T>(int userID, string type, int expireMinute){var key = $"ModernWMS_{type}_{userID}";if (string.IsNullOrWhiteSpace(key))throw new ArgumentNullException(nameof(key));T value;if (_cache.TryGetValue<T>(key, out value)){Set_SlidingExpire(key, value, TimeSpan.FromMinutes(expireMinute) );return true;}return false;}/// <summary>/// Token设置/// </summary>/// <param name="userID"></param>/// <param name="type"></param>/// <param name="token"></param>/// <param name="expireMinute"></param>/// <returns></returns>public async Task<bool> TokenSet(int userID, string type, string token, int expireMinute){string key = $"ModernWMS_{type}_{userID}";try{Set_AbsoluteExpire(key, token, TimeSpan.FromMinutes(expireMinute));}catch{return false;}return true;}#endregion
}
3.使用
/// <summary>
/// Home controller
/// </summary>
[Route("Home")]
[ApiController]
[ApiExplorerSettings(GroupName = "Base")]
public class HomeController : BaseController
{private CacheManager _cache;public HomeController(CacheManager memoryCache){_cache = memoryCache;}[HttpGet]public async Task<IActionResult> GetAsync(){string nowTime1 = _cache.Get<string>("t1");if (String.IsNullOrEmpty(nowTime1)){nowTime1 = DateTime.Now.ToString();_cache.Set_NotExpire("t1", nowTime1);}return Ok();}
}
【愚公系列】2023年02月 WMS智能仓储系统-004.内存缓存的使用相关推荐
- 【愚公系列】2023年02月 WMS智能仓储系统-011.数据库文档设计
文章目录 前言 一.数据库文档设计 1.chm版本 2.PDF版本 3.html版本 二.数据库表目录 表结构 __EFMigrationsHistory asn asnsort category c ...
- 【愚公系列】2023年02月 WMS智能仓储系统-018.收获管理和发货管理(完结篇)
文章目录 前言 一.收获管理和发货管理 1.收获管理 1.1 页面代码 1.2 接口代码 2.发货管理 1.1 页面代码 1.2 接口代码 前言 WMS智能仓储收货管理和发货管理是非常重要的两个功能 ...
- 【愚公系列】2023年02月 WMS智能仓储系统-007.Swagger接口文档的配置
文章目录 前言 一.Swagger接口文档的配置 1.安装包 2.注入 2.1 Swagger服务的注入 2.2 appsetting.json的配置 2.3 Swagger服务的封装 2.3.1 S ...
- 【愚公系列】2023年02月 WMS智能仓储系统-017.仓内作业(库存冻结、库存调整、库存盘点)
文章目录 前言 一.仓内作业 1.库存冻结 1.1 页面代码 1.2 接口代码 2.库存调整 2.1 页面代码 2.2 接口代码 3.库存盘点 3.1 页面代码 3.2 接口代码 前言 这节主要分为两 ...
- 【愚公系列】2023年02月 WMS智能仓储系统-016.库存管理和仓内作业(库存管理、仓内加工、库存移动)
文章目录 前言 一.库存管理 1.1 页面代码 1.2 接口代码 二.仓内作业 1.仓内加工 1.1 页面代码 1.2 接口代码 2.库存移动 2.1 页面代码 2.2 接口代码 前言 这节主要分为两 ...
- 【愚公系列】2023年02月 WMS智能仓储系统-010.全局过滤、中间件、格式化配置
文章目录 前言 一.全局过滤 1.全局行为过滤的概念 2.全局行为过滤的注册方式 2.1 方法注册 2.2 控制器注册 2.3 全局注册 2.4 TypeFilter 和 ServiceFilter ...
- 【愚公系列】2023年02月 WMS智能仓储系统-001.NLog日志的使用
文章目录 前言 一.NLog日志的使用 1.安装包 2.配置文件nlog.config 3.使用 前言 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以监视系统中发生的事件.用户可以通过它来 ...
- 【愚公系列】2023年02月 WMS智能仓储系统-012.登录功能的实现
文章目录 前言 1.业务流程说明 2.登录业务的相关技术点 3.登录-token原理分析 4.前端框架设计 一.登录功能的实现 1.登录页面设计 2.登录逻辑功能实现 2.1 登录逻辑页面 2.2 接 ...
- 【愚公系列】2023年02月 WMS智能仓储系统-015.基础设置(货主信息、运费设置、客户信息)
文章目录 前言 一.基础设置 1.货主信息 1.1 页面代码 1.2 接口代码 2.运费设置 2.1 页面代码 2.2 接口代码 3.客户信息 3.1 页面代码 3.2 接口代码 前言 基础设置主要分 ...
最新文章
- Shell练习(七)
- python 命令行参数-python中命令行参数
- 数十家公司超10亿数据外泄,2019年数据安全不再“纸上谈兵”
- 技巧速看!如何帮助“表哥”快速玩转报告美化?
- PowerBI随笔(7)-lookupvalue、divide
- 华为云GaussDB,11.11让企业无后顾之忧
- 百度北京一面2016-3-18
- C++ primer第六章6.6函数匹配
- -bash: make: command not found
- 笔记 - 收藏集 - 掘金
- 14-STM32F1 iic 24c02
- 基于STM32的串口通信详解
- eclipse SVN javaHL not available 问题解决
- JAVA中ResourceBundle使用详解(一)
- 网上邻居搜索到计算机无法打开,网上邻居无法访问您可能没有权限使用网络资源...
- 电脑知识:DOS命令使用
- 【ES系列五】——集群搭建(多机集群单机多节点集群)
- 内存管理-之启动-基于linux3.10
- openwrt路由器挂载sdcard为overlay
- java(jsp技术)