C# 使用 CSRedisCore指南
CSRedisCore 是一个功能强大的 .NET Redis 客户端。以下是详细的使用指南:
1. 安装
首先通过 NuGet 安装 CSRedisCore:
bash
dotnet add package CSRedisCore
2. 基本配置
单节点 Redis 配置
csharp
using CSRedis;
// 创建 Redis 客户端实例
var redis = new CSRedisClient("127.0.0.1:6379,password=yourpassword,defaultDatabase=0");
// 设置为全局实例(推荐)
RedisHelper.Initialization(redis);
哨兵模式配置
csharp
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);
集群模式配置
csharp
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. 基本使用
字符串操作
csharp
// 设置值
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);
哈希操作
csharp
// 设置哈希字段
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"
});
列表操作
csharp
// 添加元素
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);
集合操作
csharp
// 添加成员
RedisHelper.SAdd("myset", "member1", "member2", "member3");
// 获取所有成员
var members = RedisHelper.SMembers<string>("myset");
// 判断成员是否存在
bool exists = RedisHelper.SIsMember("myset", "member1");
// 集合运算
RedisHelper.SInterStore("result_set", "set1", "set2");
有序集合操作
csharp
// 添加成员和分数
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. 高级功能
发布订阅
csharp
// 订阅
var sub = RedisHelper.Subscribe(("channel1", msg =>
{
Console.WriteLine($"收到消息: {msg.Body}");
}));
// 发布
RedisHelper.Publish("channel1", "Hello, Redis!");
// 取消订阅
sub.Unsubscribe();
管道操作
csharp
// 使用管道批量执行命令
var pipe = RedisHelper.StartPipe();
pipe.Set("key1", "value1");
pipe.Set("key2", "value2");
pipe.IncrBy("counter", 1);
object[] results = pipe.EndPipe();
事务操作
csharp
var tran = RedisHelper.Multi();
tran.Set("key1", "value1");
tran.Set("key2", "value2");
tran.Exec();
Lua 脚本
csharp
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 中使用
配置服务
csharp
// 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>();
创建服务类
csharp
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;
}
}
在控制器中使用
csharp
[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. 配置选项
csharp
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: 是否使用 SSLwriteBuffer: 写入缓冲区大小
这样你就掌握了 CSRedisCore 的基本和高级用法,可以在项目中灵活使用了。