首页后端开发ASP.NET【愚公系列】2023年02月 WMS智能仓储系统-004.内存缓存的使用

【愚公系列】2023年02月 WMS智能仓储系统-004.内存缓存的使用

时间2023-03-24 17:30:28发布访客分类ASP.NET浏览885
导读:文章目录前言一、内存缓存的简单使用1.安装包2.简单使用二、内存缓存的简单封装使用1.注入2.封装类3.使用前言缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术...

文章目录

  • 前言
  • 一、内存缓存的简单使用
    • 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 TaskIActionResult>
 GetAsync()
    {
    
        string nowTime1 = _cache.Getstring>
    ("t1");

        if (String.IsNullOrEmpty(nowTime1))
        {
    
            nowTime1 = DateTime.Now.ToString();
    
            _cache.Set("t1", nowTime1);

        }
    
        return Ok();

    }

}
    

二、内存缓存的简单封装使用

1.注入

#region 添加HttpContext上下文缓存管理类
services.AddSingletonCacheManager>
    ();
    
services.AddSingletonIMemoryCache>
    (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 GetT>
(string key)
    {
    
        if (string.IsNullOrWhiteSpace(key))
            throw new ArgumentNullException(nameof(key));
    
        T value;
    
        _cache.TryGetValueT>
    (key, out value);
    
        return value;

    }
    


    /// summary>
    
    /// 设置缓存(无过期时间)
    /// /summary>
    
    /// param name="key">
    key/param>
    
    /// param name="value">
    value/param>
    
    public void Set_NotExpireT>
(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_SlidingExpireT>
(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_AbsoluteExpireT>
(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_SlidingAndAbsoluteExpireT>
(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_ExistT>
(int userID, string type, int expireMinute)
    {

        var  key = $"ModernWMS_{
type}
_{
userID}
    ";
    
        if (string.IsNullOrWhiteSpace(key))
            throw new ArgumentNullException(nameof(key));
    
        T value;
    
        if (_cache.TryGetValueT>
(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 Taskbool>
 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 TaskIActionResult>
 GetAsync()
    {
    
        string nowTime1 = _cache.Getstring>
    ("t1");

        if (String.IsNullOrEmpty(nowTime1))
        {
    
            nowTime1 = DateTime.Now.ToString();
    
            _cache.Set_NotExpire("t1", nowTime1);

        }
    
        return Ok();

    }

}
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

缓存asp

若转载请注明出处: 【愚公系列】2023年02月 WMS智能仓储系统-004.内存缓存的使用
本文地址: https://pptw.com/jishu/273.html
正式开始学习ASP.NET Core 6 Razor Pages 介绍 安全攻防 | MSF生成Payload方式总结

游客 回复需填写必要信息