MemoryCache内存缓存数据
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}");
}
}
}
但是如果原始数据特别大,数据不停的增长,该咋搞,数据小就没什么必要用这个!!!!!
如果有知道的留言哈!!谢谢