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

在.NET Core Web Api中使用redis

1. 引入 Redis 依赖

在 Water.Api 项目中安装 Redis 客户端包:右键项目 → 管理 NuGet 包 → 安装 StackExchange.Redis(主流 Redis 客户端)。

2. 配置 Redis 连接在 

appsettings.json 中添加 Redis 连接字符串:

{"ConnectionStrings": {"DefaultConnection": "数据库连接字符串","Redis": "localhost:6379,password=你的密码,defaultDatabase=0" // Redis 连接串 没有设置密码就删除password选项}
}

3. 注册 Redis 服务(Program.cs)

using StackExchange.Redis;// 注册 Redis 连接
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{var configuration = builder.Configuration.GetConnectionString("Redis");return ConnectionMultiplexer.Connect(configuration);
});

4:改造业务层(添加缓存逻辑)在 

WaterInfoService 中注入 Redis 并实现 “先查缓存、再查数据库、后写缓存” 的逻辑:

using AutoMapper;
using StackExchange.Redis;
using System.Text.Json;
using Water.Application.Contracts.WaterInfo;
using Water.Application.Contracts.WaterInfo.Dtos;
using Water.Application.Contracts.WaterInfo.Vos;
using Water.Domain.Repositories;
using Microsoft.Extensions.Logging;namespace Water.Application.WaterInfo.Services;public class WaterInfoService : IWaterInfoService
{private readonly IWaterInfoRepository _waterInfoRepository;private readonly IMapper _mapper;private readonly IDatabase _redisDb;private readonly ILogger<WaterInfoService> _logger;private const string CachePrefix = "water:info:list:";private const int CacheExpirySeconds = 300; // 缓存过期时间(5分钟)public WaterInfoService(IWaterInfoRepository waterInfoRepository, IMapper mapper,IConnectionMultiplexer redisMultiplexer,ILogger<WaterInfoService> logger){_waterInfoRepository = waterInfoRepository;_mapper = mapper;_redisDb = redisMultiplexer.GetDatabase();_logger = logger;}public async Task<List<WaterInfoListVo>> GetWaterInfoListAsync(WaterInfoQueryDto waterInfoQueryDto){string cacheKey;// 生成缓存键(区分“全部商品”和“按分类查询”)if (waterInfoQueryDto.CategoryId.HasValue){cacheKey = $"{CachePrefix}category:{waterInfoQueryDto.CategoryId.Value}";}else{cacheKey = $"{CachePrefix}all";}try{// 尝试从 Redis 读取缓存var cachedData = await _redisDb.StringGetAsync(cacheKey);if (!cachedData.IsNull){return JsonSerializer.Deserialize<List<WaterInfoListVo>>(cachedData)!;}}catch (Exception ex){_logger.LogError(ex, "Redis 查询失败,降级到数据库查询");// 异常时继续执行数据库查询逻辑}// 缓存不存在,查询数据库var domainEntities = await _waterInfoRepository.GetWaterInfoListAsync(categoryId: waterInfoQueryDto.CategoryId,name: waterInfoQueryDto.Name);var voList = _mapper.Map<List<WaterInfoListVo>>(domainEntities);// 仅当未传“商品名称”时,才写入缓存(模糊查询不缓存)if (string.IsNullOrEmpty(waterInfoQueryDto.Name)){await _redisDb.StringSetAsync(key: cacheKey,value: JsonSerializer.Serialize(voList),expiry: TimeSpan.FromSeconds(CacheExpirySeconds));}return voList;}
}

5:处理缓存失效(可选,数据更新时清理缓存)

当商品数据发生变更(新增、修改、删除)时,需主动删除对应缓存,示例(假设存在修改方法):

// 在 WaterInfoService 中新增修改方法(示例)
public async Task<bool> UpdateWaterInfoAsync(WaterInfoUpdateDto updateDto)
{// 1. 执行数据库修改逻辑(略)var isSuccess = await _waterInfoRepository.UpdateAsync(updateDto);// 2. 删除缓存(确保下次查询获取最新数据)var cacheKeys = new List<string> { $"{CachePrefix}all" }; // 先删除“全部商品”缓存if (updateDto.CategoryId.HasValue){cacheKeys.Add($"{CachePrefix}category:{updateDto.CategoryId.Value}"); // 再删除“对应分类”缓存}foreach (var key in cacheKeys){await _redisDb.KeyDeleteAsync(key);}return isSuccess;
}

http://www.dtcms.com/a/564751.html

相关文章:

  • .NET Core Web API开发需引入的三个基本依赖配置说明
  • 怎么在PPT里面插入网页?
  • ETL核对
  • Hangfire 入门与实战:在 .NET Core 中实现可靠后台任务处理
  • python ppt转pdf以及图片提取
  • 大连做公司网站的公司用php做网站要用什么软件
  • 中国建设银行网站口公关工资一般多少钱一个月
  • 线性矩阵不等式 (LMI)
  • 基于无六环H校验矩阵和归一化偏移minsum算法的LDPC编译码matlab性能仿真
  • Linux DMA 技术深度解析:从原理到实战
  • PsTools 学习笔记(7.14):PsFile——谁占用了我的文件?一键查清并安全释放
  • 企业级数智化解决方案:行云创新 AI-CloudOS 产品矩阵引领转型价值落地
  • 华为发布Atlas 900 DeepGreen AI服务器:单机柜100PF算力重构AI训练基础设施
  • 线性代数 - 矩阵求逆
  • 什么网站做生鲜比较好企业网站建设注意什么
  • 前端技术栈 ——nvm与Node.js环境安装
  • 具身智能(一)关于VLA模型π0
  • 企业门户网站的意义做淘宝的人就跟做网站一样
  • 私人做网站图片企业网站的建设与维护是什么
  • Enterprise architect工具绘制活动图时如何使用Call Behavior Actions
  • 华为openEuler 22.03 (LTS-SP3) 手动安装单点clickhouse
  • 用docker搭建selenium grid分布式环境
  • App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
  • SpringBoot中使用tess4j进行OCR(在macos上面开发)
  • Debian开发板3568配置打印机驱动
  • 基于 Debian 服务器的前端项目部署完整教程
  • Debian 服务器环境搭建全指南:从工具选型到项目部署实战
  • app网站如何做推广方案山东进一步优化
  • 长沙网站关键词seo苏州建设工程招投标网
  • 【数据结构】二维数组中的元素查重