C#使用CSRedisCore的实现示例

 更新时间:2025年11月02日 15:53:45   作者:Yashar Qian  
CSRedisCore是高效的.NET Redis客户端,支持单节点、哨兵和集群模式,本文详细介绍了其安装配置方法和基础操作,感兴趣的可以了解一下

CSRedisCore 是一个功能强大的 .NET Redis 客户端。以下是详细的使用指南:

1. 安装

首先通过 NuGet 安装 CSRedisCore:

dotnet add package CSRedisCore

2. 基本配置

单节点 Redis 配置

using CSRedis;

// 创建 Redis 客户端实例
var redis = new CSRedisClient("127.0.0.1:6379,password=yourpassword,defaultDatabase=0");

// 设置为全局实例(推荐)
RedisHelper.Initialization(redis);

哨兵模式配置

var redis = new CSRedisClient(
    "mymaster,password=123456",
    new[] { "192.168.1.10:26379", "192.168.1.11:26379", "192.168.1.12:26379" });

RedisHelper.Initialization(redis);

集群模式配置

var redis = new CSRedisClient(
    "127.0.0.1:6379,password=123456,defaultDatabase=0",
    "127.0.0.1:6380,password=123456,defaultDatabase=0",
    "127.0.0.1:6381,password=123456,defaultDatabase=0");

RedisHelper.Initialization(redis);

3. 基本使用

字符串操作

// 设置值
RedisHelper.Set("name", "张三");
RedisHelper.Set("age", 25, TimeSpan.FromMinutes(10)); // 带过期时间

// 获取值
string name = RedisHelper.Get("name");
int age = RedisHelper.Get<int>("age");

// 批量操作
RedisHelper.MSet("key1", "value1", "key2", "value2");
var values = RedisHelper.MGet<string>("key1", "key2");

// 原子操作
long newValue = RedisHelper.IncrBy("counter", 1);

哈希操作

// 设置哈希字段
RedisHelper.HSet("user:1", "name", "李四");
RedisHelper.HSet("user:1", "age", 30);

// 获取哈希字段
string userName = RedisHelper.HGet<string>("user:1", "name");
int userAge = RedisHelper.HGet<int>("user:1", "age");

// 获取所有字段
var allFields = RedisHelper.HGetAll<string>("user:1");

// 批量设置
RedisHelper.HMSet("user:2", new Dictionary<string, object>
{
    ["name"] = "王五",
    ["age"] = 28,
    ["email"] = "wangwu@example.com"
});

列表操作

// 添加元素
RedisHelper.LPush("mylist", "item1");
RedisHelper.RPush("mylist", "item2", "item3");

// 获取元素
string firstItem = RedisHelper.LPop<string>("mylist");
string lastItem = RedisHelper.RPop<string>("mylist");

// 获取范围
var items = RedisHelper.LRange<string>("mylist", 0, -1);

集合操作

// 添加成员
RedisHelper.SAdd("myset", "member1", "member2", "member3");

// 获取所有成员
var members = RedisHelper.SMembers<string>("myset");

// 判断成员是否存在
bool exists = RedisHelper.SIsMember("myset", "member1");

// 集合运算
RedisHelper.SInterStore("result_set", "set1", "set2");

有序集合操作

// 添加成员和分数
RedisHelper.ZAdd("leaderboard", 
    (100, "player1"),
    (85, "player2"),
    (95, "player3")
);

// 获取排名
var topPlayers = RedisHelper.ZRange<string>("leaderboard", 0, 2);
var topPlayersWithScores = RedisHelper.ZRangeWithScores<string>("leaderboard", 0, 2);

// 获取成员排名
long rank = RedisHelper.ZRevRank("leaderboard", "player1");

4. 高级功能

发布订阅

// 订阅
var sub = RedisHelper.Subscribe(("channel1", msg => 
{
    Console.WriteLine($"收到消息: {msg.Body}");
}));

// 发布
RedisHelper.Publish("channel1", "Hello, Redis!");

// 取消订阅
sub.Unsubscribe();

管道操作

// 使用管道批量执行命令
var pipe = RedisHelper.StartPipe();
pipe.Set("key1", "value1");
pipe.Set("key2", "value2");
pipe.IncrBy("counter", 1);
object[] results = pipe.EndPipe();

事务操作

var tran = RedisHelper.Multi();
tran.Set("key1", "value1");
tran.Set("key2", "value2");
tran.Exec();

Lua 脚本

var script = @"
    local current = redis.call('GET', KEYS[1])
    if current then
        redis.call('SET', KEYS[1], current + ARGV[1])
    else
        redis.call('SET', KEYS[1], ARGV[1])
    end
    return redis.call('GET', KEYS[1])
";

var result = RedisHelper.Eval<string>(script, "mycounter", 1);

5. 在 ASP.NET Core 中使用

配置服务

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// 配置 CSRedis
var redisConnection = builder.Configuration.GetConnectionString("Redis");
var redis = new CSRedisClient(redisConnection);
RedisHelper.Initialization(redis);

// 注册为服务
builder.Services.AddSingleton(redis);

// 或者使用依赖注入
builder.Services.AddScoped<IRedisService, RedisService>();

创建服务类

public interface IRedisService
{
    Task<T> GetAsync<T>(string key);
    Task SetAsync<T>(string key, T value, TimeSpan? expiry = null);
    Task<bool> RemoveAsync(string key);
}

public class RedisService : IRedisService
{
    public async Task<T> GetAsync<T>(string key)
    {
        return await RedisHelper.GetAsync<T>(key);
    }

    public async Task SetAsync<T>(string key, T value, TimeSpan? expiry = null)
    {
        if (expiry.HasValue)
            await RedisHelper.SetAsync(key, value, expiry.Value);
        else
            await RedisHelper.SetAsync(key, value);
    }

    public async Task<bool> RemoveAsync(string key)
    {
        return await RedisHelper.DelAsync(key) > 0;
    }
}

在控制器中使用

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private readonly IRedisService _redisService;

    public UsersController(IRedisService redisService)
    {
        _redisService = redisService;
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetUser(string id)
    {
        var cacheKey = $"user:{id}";
        var user = await _redisService.GetAsync<User>(cacheKey);
        
        if (user == null)
        {
            // 从数据库获取
            user = await _userRepository.GetByIdAsync(id);
            if (user != null)
            {
                await _redisService.SetAsync(cacheKey, user, TimeSpan.FromMinutes(30));
            }
        }
        
        return Ok(user);
    }
}

6. 配置选项

var connectionString = 
    "127.0.0.1:6379,password=123456,defaultDatabase=0," +
    "prefix=myapp_,poolsize=50,ssl=false,writeBuffer=10240";

var redis = new CSRedisClient(connectionString);

主要配置参数:

  • password: Redis 密码
  • defaultDatabase: 默认数据库
  • prefix: 键前缀
  • poolsize: 连接池大小
  • ssl: 是否使用 SSL
  • writeBuffer: 写入缓冲区大小

这样你就掌握了 CSRedisCore 的基本和高级用法,可以在项目中灵活使用了。

到此这篇关于C#使用CSRedisCore的实现示例的文章就介绍到这了,更多相关C#使用CSRedisCore内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • WPF+ASP.NET SignalR实现动态折线图的绘制

    WPF+ASP.NET SignalR实现动态折线图的绘制

    这篇文章将以一个简单的动态折线图示例,简述如何通过ASP.NET SignalR实现后台通知功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-01-01
  • C#编程获取资源文件中图片的方法

    C#编程获取资源文件中图片的方法

    这篇文章主要介绍了C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#绘制椭圆的方法

    C#绘制椭圆的方法

    这篇文章主要介绍了C#绘制椭圆的方法,涉及C#图形绘制的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 结合Visual C#开发环境讲解C#中事件的订阅和取消订阅

    结合Visual C#开发环境讲解C#中事件的订阅和取消订阅

    这篇文章主要介绍了C#中事件的订阅和取消订阅,结合Visual C#开发环境来进行讲解,Visual C#被集成在微软的IDE程序Visual Studio中,需要的朋友可以参考下
    2016-01-01
  • 枚举的用法详细总结

    枚举的用法详细总结

    本篇文章主要是对枚举的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 细说C#中的枚举:转换、标志和属性

    细说C#中的枚举:转换、标志和属性

    枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向大家具体讲解一下枚举的知识,需要的朋友可以参考下
    2020-02-02
  • C#两个相同属性的类赋值方法

    C#两个相同属性的类赋值方法

    这篇文章主要介绍了C#两个相同属性的类赋值方法的相关资料,需要的朋友可以参考下
    2016-08-08
  • C#将html table 导出成excel实例

    C#将html table 导出成excel实例

    C#将html table 导出成excel实例,需要的朋友可以参考一下
    2013-04-04
  • C#中GraphicsPath的Warp方法用法实例

    C#中GraphicsPath的Warp方法用法实例

    这篇文章主要介绍了C#中GraphicsPath的Warp方法用法,实例分析了Warp方法的相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • C#中DataTable实现筛选查询的示例

    C#中DataTable实现筛选查询的示例

    本文主要介绍了C#中DataTable实现筛选查询的示例,主要是DataTable进行过滤筛选,常用的一些方法为:Select,dataview,具有一定的参考价值,感兴趣的可以了解一下
    2023-04-04

最新评论