StackExchange.Redis 是 .NET 平台上最流行的 Redis 客户端库之一,由 Stack Exchange 团队开发。它用于在 .NET 应用中高效、可靠地连接和操作 Redis 数据库,支持多种 Redis 功能,包括字符串、哈希、列表、集合、发布/订阅等。
主要特点:
- 高性能、线程安全
- 支持连接池和集群
- 支持异步操作
- 丰富的 API,覆盖 Redis 常用命令
- 社区活跃,文档完善
用法举例
1. 连接 Redis 并读写字符串
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
// 连接到本地 Redis 服务
var redis = ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();
// 写入字符串
db.StringSet("mykey", "Hello Redis!");
// 读取字符串
string value = db.StringGet("mykey");
Console.WriteLine(value); // 输出: Hello Redis!
}
}
2. 异步操作示例
using StackExchange.Redis;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var redis = await ConnectionMultiplexer.ConnectAsync("localhost");
var db = redis.GetDatabase();
await db.StringSetAsync("asyncKey", "Async Value");
string value = await db.StringGetAsync("asyncKey");
Console.WriteLine(value); // 输出: Async Value
}
}
说明:
- 通过
ConnectionMultiplexer管理连接,推荐全局单例使用。 - 支持同步和异步 API。
- 可操作 Redis 的各种数据类型。
更多用法可参考官方文档:StackExchange.Redis 官网。
下面是一个在 ASP.NET Core Web API 中使用 StackExchange.Redis 进行简单读写的示例。
1. 安装 NuGet 包
dotnet add package StackExchange.Redis
2. 在 appsettings.json 配置 Redis 连接
{
"Redis": {
"ConnectionString": "localhost:6379"
}
}
3. 注册 Redis 连接(推荐单例)
using StackExchange.Redis;
var builder = WebApplication.CreateBuilder(args);
// 注册 Redis 连接为单例
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{
var configuration = builder.Configuration.GetSection("Redis")["ConnectionString"];
return ConnectionMultiplexer.Connect(configuration);
});
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
4. 控制器中使用 Redis
using Microsoft.AspNetCore.Mvc;
using StackExchange.Redis;
[ApiController]
[Route("[controller]")]
public class RedisDemoController : ControllerBase
{
private readonly IDatabase _db;
public RedisDemoController(IConnectionMultiplexer redis)
{
_db = redis.GetDatabase();
}
[HttpGet("{key}")]
public async Task<IActionResult> Get(string key)
{
var value = await _db.StringGetAsync(key);
if (value.IsNullOrEmpty)
return NotFound();
return Ok(value.ToString());
}
[HttpPost]
public async Task<IActionResult> Set([FromQuery] string key, [FromQuery] string value)
{
await _db.StringSetAsync(key, value);
return Ok("写入成功");
}
}
说明:
- 通过依赖注入获取 Redis 连接。
- 提供了简单的读写接口:
GET /RedisDemo/{key}读取,POST /RedisDemo?key=xxx&value=yyy写入。 - 推荐将
ConnectionMultiplexer注册为单例,避免重复连接。
如需更复杂的数据结构或发布/订阅等功能,可参考 StackExchange.Redis 官方文档。
是的,Redis 是一个典型的内存数据库(in-memory database)。它的数据主要存储在内存中,读写速度非常快,适合做缓存、会话存储、排行榜等高性能场景。
不过,Redis 也支持持久化机制(如 RDB 快照和 AOF 日志),可以将内存中的数据定期或实时保存到磁盘,防止数据丢失。因此,Redis 既可以作为纯内存数据库,也能兼顾持久化需求。
总结:
Redis 以内存为主,支持持久化,是高性能的 NoSQL 数据库。