当前位置: 首页 > news >正文

MemoryCache内存缓存数据

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e0e102ea5b624ec7925d2a41e8c474eb.png

MemoryCache的使用

MemoryCache
MemoryCache 是 .NET 框架提供的一个内存缓存类,位于 System.Runtime.Caching 命名空间下。它允许开发人员在应用程序的内存中存储数据,以减少对数据源(如数据库)的频繁访问,从而提高应用程序的性能。MemoryCache 是进程内缓存,即缓存数据仅存在于当前应用程序进程的内存中。
Redis
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储数据库,通常用作缓存、消息队列、数据库和分布式锁等。它将数据存储在内存中,但也支持将数据持久化到磁盘,以防止数据丢失。Redis 是一个独立的服务,可以通过网络与应用程序进行通信,属于进程外缓存。

MemoryCache是进程内缓存,只能在当前应用程序进程中共享数据
Redis 是进程外缓存,多个应用程序实例可以通过网络连接到同一个 Redis 服务器,实现缓存数据的共享.

使用

历史表有大量的数据,且查询条件不固定、查询时间不固定还需要分页时,可以按以下步骤操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;

// 假设这是数据模型
public class DataItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class CacheManager
{
    private readonly MemoryCache _cache = MemoryCache.Default;
    private const string CacheKey = "MyDataCache";

    // 初始化缓存数据
    public void InitializeCache(List<DataItem> data)
    {
          // 将数据添加到缓存中,设置 1小时后过期
        _cache.Add(CacheKey, data, DateTimeOffset.Now.AddHours(1));
    }

    // 根据条件查询并分页
    public List<DataItem> QueryAndPaginate(Func<DataItem, bool> queryCondition, int pageNumber, int pageSize)
    {
        var allData = _cache.Get(CacheKey) as List<DataItem>;
        if (allData == null)
        {
            return new List<DataItem>();
        }

        // 根据查询条件筛选数据
        var filteredData = allData.Where(queryCondition).ToList();

        // 计算分页的起始索引
        int startIndex = (pageNumber - 1) * pageSize;

        // 进行分页
        return filteredData.Skip(startIndex).Take(pageSize).ToList();
    }
}

class Program
{
    static void Main()
    {
        // 模拟初始化数据
        var data = new List<DataItem>
        {
            new DataItem { Id = 1, Name = "Alice", Age = 25 },
            new DataItem { Id = 2, Name = "Bob", Age = 30 },
            new DataItem { Id = 3, Name = "Charlie", Age = 35 },
            new DataItem { Id = 4, Name = "David", Age = 40 },
            new DataItem { Id = 5, Name = "Eve", Age = 45 }
        };

        var cacheManager = new CacheManager();
        // 初始化缓存
        cacheManager.InitializeCache(data);

        // 定义查询条件(这里以年龄大于 30 为例)
        Func<DataItem, bool> queryCondition = item => item.Age > 30;

        // 分页参数
        int pageNumber = 1;
        int pageSize = 2;

        // 执行查询并分页
        var result = cacheManager.QueryAndPaginate(queryCondition, pageNumber, pageSize);

        // 输出结果
        foreach (var item in result)
        {
            Console.WriteLine($"Id: {item.Id}, Name: {item.Name}, Age: {item.Age}");
        }
    }
}

但是如果原始数据特别大,数据不停的增长,该咋搞,数据小就没什么必要用这个!!!!!
如果有知道的留言哈!!谢谢

相关文章:

  • 算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器
  • 【苍穹外卖】问题笔记
  • Pytorch框架06-现有网络模型(修改/使用/保存/加载)
  • Ubuntu 安装 Nginx并配置反向代理
  • 工作中遇到的设计模式整理
  • Uniapp 小程序接口封装与使用
  • 使用 Postman 访问 Keycloak 端点
  • 强化学习演进:GRPO 从何而来
  • 数组总结【代码随想录】
  • Docker数据卷操作实战
  • centos22.04 dpkg -l 输出状态标识含义
  • HTTP非流式请求 vs HTTP流式请求
  • 金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
  • 深入解析Tomcat目录结构
  • Grok 3 vs. DeepSeek vs. ChatGPT:2025终极AI对决
  • 【MATLAB中的图像数据结构】
  • 【奥卡姆剃刀原理-如何理解云计算和边缘计算 关键字摘取】
  • MATLAB下载安装教程(附安装包)2025最新版(MATLAB R2024b)
  • 网络安全之日志审计 网络安全审计制度
  • 山东大学软件学院ai导论实验之生成对抗网络
  • 全国电影工作会:聚焦扩大电影国际交流合作,提升全球影响力
  • 事关稳就业稳经济,10张海报看懂这场发布会的政策信号
  • 稳就业稳经济五方面若干举措将成熟一项出台一项
  • 经济日报金观平:统筹国内经济工作和国际经贸斗争
  • 当代视角全新演绎,《风雪夜归人》重归首都剧场
  • 政治局会议深读|首提“持续巩固房地产市场稳定态势”,楼市政策还有哪些优化空间