`StackExchange.Redis` 是 .NET 平台上最流行的 Redis 客户端库之一

71 阅读2分钟

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 数据库。