.net6.0-使用CSRedisCore
一、安装CSRedisCore
二、创建链接、初始化
//创建链接
var csRedis = new CSRedis.CSRedisClient("127.0.0.1:6379,password="",defaultDatabase=1,poolsize=50,ssl=false,writeBuffer=10240");
//初始化RedisHelper
RedisHelper.Initialization(csRedis);
三、使用
1.字符串(string)
//添加字符串键值对
RedisHelper.Set("name", "张三");
//根据键获取对应的值
RedisHelper.Get<String>("name");
//在指定key的value末尾追加字符串
RedisHelper.Append("name", "你好");
//移除元素
RedisHelper.Del("name");
2.列表(list)
列表可以有序的存储多个字符串等操作, 列表是通过链表来实现的,所以它添加新元素的速度非常快。
// 从右端推入元素
RedisHelper.RPush("my-list", "item1", "item2", "item3", "item4");
// 从右端弹出元素
RedisHelper.RPop("my-list");
// 从左端推入元素
RedisHelper.LPush("my-list", "leftPushItem");
// 从左端弹出元素
RedisHelper.LPop("my-list");
// 遍历链表元素(start:0,end:-1即可返回所有元素)
foreach (var item in RedisHelper.LRange("my-list", 0, -1))
{
Console.WriteLine(item);
}
Console.WriteLine("------");
// 按索引值获取元素(当索引值大于链表长度,返回空值,不会报错)
Console.WriteLine($"{RedisHelper.LIndex("my-list", 1)}");
Console.WriteLine("------");
//修剪指定范围内的元素(start: 0,end: 1)
RedisHelper.LTrim("my-list", 0, 1);
foreach (var item in RedisHelper.LRange("my-list", 0, -1))
{
Console.WriteLine(item);
}
运行结果:
3.集合(set)
集合以无序的方式存储各不相同的元素,也就是说在集合中的每个元素的Key
都不重复。在redis中可以快速地对集合执行添加、移除等操作。
// 实际上只插入了两个元素("item1","item2")
RedisHelper.SAdd("my-set", "item1", "item1", "item2");
// 集合的遍历
foreach (var item in RedisHelper.SMembers("my-set"))
{
Console.WriteLine($"集合成员:{item}");
}
// 判断元素是否存在
string member = "item1";
Console.WriteLine($"{member}是否存在:{RedisHelper.SIsMember("my-set", member)}");
// 移除元素
RedisHelper.SRem("my-set", member);
Console.WriteLine($"{member}是否存在:{RedisHelper.SIsMember("my-set", member)}");
运行结果:
4.哈希(hash)
在redis中我们可以使用哈希将多个键-值对存储在一个redis键上,从而达到将一系列相关数据存放在一起的目的。例如添加一个redis键Article:1001
,然后在这个键中存放ID为1001的文章的标题、作者等信息。我们可以把这样数据集看作是关系数据库中的行。
//将哈希表 key 中的字段 field 的值设为 value
RedisHelper.HSet("ArticleID:10001", "Title", "在.NET Core中使用CSRedis");
RedisHelper.HSet("ArticleID:10001", "Author", "张三");
//获取存储在哈希表中指定字段的值
Console.WriteLine(RedisHelper.HGet("ArticleID:10001", "Title"));
Console.WriteLine("------");
//获取在哈希表中指定 key 的所有字段和值
foreach (var item in RedisHelper.HGetAll("ArticleID:10001"))
{
Console.WriteLine($"字段:{item.Key},值:{item.Value}");
}
Console.WriteLine("------");
//查看哈希表 key 中,指定的字段是否存在
Console.WriteLine(RedisHelper.HExists("ArticleID:10001", "Title"));
运行结果:
HGet
和HSet
方法执行一次只能处理一个键值对,而HMGet
和HMSet
是他们的多参数版本,一次可以处理多个键值对。
var keys = new string[] { "Title", "Author" };
//获取存储在哈希表中多个字段的值
foreach (var item in RedisHelper.HMGet("ArticleID:10001", keys))
{
Console.WriteLine(item);
}
运行结果:
虽然使用HGetAll
可以取出所有的value,但是有时候哈希表包含的值可能非常大,容易造成服务器的堵塞,为了避免这种情况,我们可以使用HKeys
取到哈希表的所有键(HVals可以取出所有值
),然后再使用HGet
方法一个一个地取出键对应的值。
//获取所有哈希表中的字段
foreach (var item in RedisHelper.HKeys("ArticleID:10001"))
{
Console.WriteLine($"{item} - {RedisHelper.HGet("ArticleID:10001", item)}");
}
运行结果:
和处理字符串一样,我们也可以对哈希表中的值进行自增、自减操作,原理同字符串是一样的。
RedisHelper.HSet("ArticleID:10001", "Votes", "257");
//为哈希表 key 中的指定字段的整数值加上增量 increment
RedisHelper.HIncrBy("ArticleID:10001", "Votes", 40);
Console.WriteLine(RedisHelper.HGet("ArticleID:10001", "Votes"));
运行结果:297
5.有序集合
有序集合可以看作是可排序的哈希,不过有序集合的val成为score分值,集合内的元素就是基于score进行排序的,score以双精度浮点数的格式存储。
//向有序集合添加元素
RedisHelper.ZAdd("Quiz", (79, "Math"));
RedisHelper.ZAdd("Quiz", (98, "English"));
RedisHelper.ZAdd("Quiz", (99 ,"lgorithm"));
RedisHelper.ZAdd("Quiz", (84, "Database"));
RedisHelper.ZAdd("Quiz", (59, "Operation System"));
//获取有序集合的成员数量
Console.WriteLine(RedisHelper.ZCard("Quiz"));
Console.WriteLine("------");
//获取集合中指定范围(90~100)的元素集合
foreach (var item in RedisHelper.ZRangeByScore("Quiz", 90, 100))
{
Console.WriteLine(item);
}
Console.WriteLine("------");
//获取集合所有元素并升序排序
foreach (var item in RedisHelper.ZRangeWithScores("Quiz", 0, -1))
{
Console.WriteLine($"成员:{item.member},分数:{item.score}");
}
运行结果:
//移除集合中的元素
RedisHelper.ZRem("Quiz", "Math");
Console.WriteLine(RedisHelper.ZScore("Quiz", "Math").HasValue);
运行结果:
6.管道(pipeline)
redis的事务可以通过pipeline实现的,使用pipeline时,客户端会自动调用MULTI
和EXEX
命令,将多条命令打包并一次性地发送给redis,然后redis再将命令的执行结果全部打包并一次性返回给客户端,这样有效的减少了redis与客户端的通信次数,提升执行多次命令时的性能。
var pipe = RedisHelper.StartPipe();
for (int i = 0; i < 8; i++)
{
pipe.IncrBy("key-one"); // 将key-one中的值自增COUNT次,产生了COUNT条IncrBy命令
}
pipe.EndPipe(); // 在管道结束的位置,将COUNT条命令一次性发送给redis
Console.WriteLine($"{RedisHelper.Get("key-one")}");
运行结果:8
需要特别说明的是,redis中的事务不同于数据库的事务,如果执行命令期间发生错误,redis并不会回滚。
7.Key的过期
redis还允许我们为key设置有效期,当key过期之后,key就不存在了。
RedisHelper.Set("MyKey", "hello,world",5);
Console.WriteLine(RedisHelper.Get("MyKey"));
Thread.Sleep(6000); // 暂停6秒
Console.WriteLine(RedisHelper.Exists("MyKey"));
运行结果:
本文参考自https://www.cnblogs.com/xscape/p/10208638.html
posted on 2023-04-27 11:06 一只向上爬的小蜗牛 阅读(1477) 评论(0) 编辑 收藏 举报