YuebonCore快速开发框架YuebonCore快速开发框架
首页
指南
视频教程
  • vue版
  • api接口
gitee
首页
指南
视频教程
  • vue版
  • api接口
gitee
  • 指南
  • 快速了解

    • 快速了解
    • 快速使用
  • 环境部署
    • 部署
    • linux 环境部署
  • 手摸手

    • 业务设计
    • 业务数据层
    • 业务服务层
    • 业务对外 API
  • 后台开发

    • 必要配置
    • 数据库实体
    • 缓存机制
      • 缓存设置
      • 添加缓存服务
      • 具体实现
      • 如何使用
      • 缓存时间
    • 定时任务
    • 数据库操作
    • 多系统切换
    • 接口与版本控制
    • Saas 多租户
  • 前端开发

    • 基础搭建
    • 开发规范
    • 模块菜单
    • ESLint
  • 更新日志

    • 更新日志
  • 常见问题

缓存机制

系统支持Redis和MemoryCache两种缓存方式,根据配置自动识别。

缓存设置

在appsettings.json添加配置

"CacheProvider": {
    "UseRedis": true,
    "Redis_ConnectionString": "127.0.0.1:6379,allowAdmin=true,password=123456,defaultdatabase=0",
    "Redis_InstanceName": "yuebon_redis_"
  }

我们写一个类,来获取配置,CacheProvider说明:

1)、UseRedis:是否使用Redis缓存,不使用设置false即可;

2)、Redis_ConnectionString:Redis连接,按示例参数进行配置,allowadmin、password、defaultdatabase都需要,其他配置参数请查阅相关文档;

3)、Redis_InstanceName:Redis实例名称

添加缓存服务

在startup添加缓存服务,需要引用Microsoft.Extensions.Caching.Redis和StackExchange.Redis两个Redis包。

//获取缓存配置
CacheProvider cacheProvider = new CacheProvider
{
    IsUseRedis = Configuration.GetSection("CacheProvider:UseRedis").Value.ToBool(false),
    ConnectionString = Configuration.GetSection("CacheProvider:Redis_ConnectionString").Value,
    InstanceName = Configuration.GetSection("CacheProvider:Redis_InstanceName").Value
};

//判断是否使用Redis,如果不使用 Redis就默认使用 MemoryCache
if (cacheProvider.IsUseRedis)
{
    //Use Redis
    services.AddStackExchangeRedisCache(options =>
    {
        options.Configuration = cacheProvider.ConnectionString;
        options.InstanceName = cacheProvider.InstanceName;
    });
    services.AddSingleton(typeof(ICacheService), new RedisCacheService(new RedisCacheOptions
    {
        Configuration = cacheProvider.ConnectionString,
        InstanceName = cacheProvider.InstanceName
    }, 0));

}
else
{
    //Use MemoryCache
    services.AddSingleton<IMemoryCache>(factory =>
    {
        var cache = new MemoryCache(new MemoryCacheOptions());
        return cache;
    });
    services.AddSingleton<ICacheService, MemoryCacheService>();
}

具体实现

  • 1、缓存提供模式
/// <summary>
/// 缓存提供模式,使用Redis或MemoryCache
/// </summary>
public class CacheProvider
{
    private bool _isUseRedis;
    
    private string _connectionString;
    private string _instanceName;
    /// <summary>
    /// 是否使用Redis
    /// </summary>
    public bool IsUseRedis { get => _isUseRedis; set => _isUseRedis = value; }
    /// <summary>
    /// Redis连接
    /// </summary>
    public string ConnectionString { get => _connectionString; set => _connectionString = value; }
    /// <summary>
    /// Redis实例名称
    /// </summary>
    public string InstanceName { get => _instanceName; set => _instanceName = value; }
}
  • 2、缓存接口 ICacheService

不论使用Redis还是MemoryCache都需要实现该接口的方法。具体代码参考项目中的ICacheService.cs

  • 3、Redis实现ICacheService

具体代码参考项目中的RedisCacheService.cs

  • 4、MemoryCache实现ICacheService

具体代码参考项目中的MemoryCacheService.cs

  • 5、缓存使用工具类YuebonCacheHelper.cs

如何使用

在使用的时候只需要YuebonCacheHelper进行使用即可,如下面例子:

1、登录是缓存用户可以用功能菜单

YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
yuebonCacheHelper.Add("User_Function_" + user.Id, listFunction);
currentSession.Modules = listFunction;
TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);

缓存时间

在缓存时设置缓存时长

TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);

注意

默认使用的是.net的内存Cache,在用IIS发布后,由于IIS本身存在自动回收的机制,会导致系统缓存20分钟就会失效。

如遇到问题到Issues反馈

Prev
数据库实体
Next
定时任务