在 .NET Core 中使用 Redis

目录

[步骤 1:使用 Docker 运行 Redis](#步骤 1:使用 Docker 运行 Redis)

[步骤 2:添加 Redis NuGet 包](#步骤 2:添加 Redis NuGet 包)

[步骤 3:配置 RedisProgram.cs](#步骤 3:配置 RedisProgram.cs)

[步骤 4:创建 Redis 服务](#步骤 4:创建 Redis 服务)

[步骤 5:在控制器中使用 Redis](#步骤 5:在控制器中使用 Redis)

步骤六:测试

结论


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

Redis 是一个速度极快的内存键值存储系统,常用于缓存 、会话管理 和实时应用程序 。在本指南中,我们将通过一个简单的示例学习如何将 Redis 集成到**.NET Core Web API中。**

步骤 1:使用 Docker 运行 Redis

docker run --name redis-demo -d -p 6379:6379 redis

步骤 2:添加 Redis NuGet 包

dotnet add package StackExchange.Redis

步骤 3:配置 RedisProgram.cs

using StackExchange.Redis;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>

{

var configuration = builder.Configuration.GetConnectionString("Redis");

return ConnectionMultiplexer.Connect(configuration);

});

builder.Services.AddScoped<RedisCacheService>();

builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

添加连接字符串appsettings.json:

{

"ConnectionStrings": {

"Redis": "localhost:6379"

}

}

步骤 4:创建 Redis 服务

RedisCacheService.cs

using StackExchange.Redis;

using System.Text.Json;

public class RedisCacheService

{

private readonly IDatabase _db;

public RedisCacheService(IConnectionMultiplexer redis)

{

_db = redis.GetDatabase();

}

public async Task SetAsync<T>(string key, T value, TimeSpan? expiry = null)

{

var json = JsonSerializer.Serialize(value);

await _db.StringSetAsync(key, json, expiry);

}

public async Task<T?> GetAsync<T>(string key)

{

var value = await _db.StringGetAsync(key);

if (value.IsNullOrEmpty) return default;

return JsonSerializer.Deserialize<T>(value!);

}

public async Task RemoveAsync(string key)

{

await _db.KeyDeleteAsync(key);

}

}

步骤 5:在控制器中使用 Redis

Controllers/ProductsController.cs

using Microsoft.AspNetCore.Mvc;

ApiController

Route("api/\[controller\]")

public class ProductsController : ControllerBase

{

private readonly RedisCacheService _cache;

public ProductsController(RedisCacheService cache)

{

_cache = cache;

}

HttpGet("{id}")

public async Task<IActionResult> GetProduct(int id)

{

string key = $"product:{id}";

var product = await _cache.GetAsync<Product>(key);

if (product != null)

return Ok(product);

// Simulate DB fetch

product = new Product { Id = id, Name = $"Product {id}" };

await _cache.SetAsync(key, product, TimeSpan.FromMinutes(1));

return Ok(product);

}

}

public record Product

{

public int Id { get; set; }

public string Name { get; set; }

}

步骤六:测试

运行应用程序:

dotnet run

现在调用 API:

GET https://localhost:5001/api/products/1

首次请求 → 从数据库加载产品(模拟)。

下一个请求 → 会立即从 Redis 中响应。

结论

Redis + .NET Core =更快的应用和更好的可扩展性。

可用于缓存、会话、发布/订阅和实时应用。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
java_nnnn2 小时前
分布式系统进阶:数据库分库分表、微服务与架构演进总结
数据库·redis·微服务·架构
时间静止不是简史6 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428049 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
Web极客码12 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
一条泥憨鱼20 小时前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读
java·数据库·redis·缓存·lua
每天一道题20 小时前
Redis 缓存为什么会出问题?穿透、击穿、雪崩与缓存一致性
数据库·redis·缓存
Qianxueban21 小时前
pexpire key底层逻辑是如何实现这个延迟功能?
redis
charlotte102410241 天前
Redis 简介:从诞生到数据类型,再到缓存三大问题
数据库·redis·缓存
一嘴一个橘子1 天前
redis stream
redis