iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#中StackExchange.Redis怎么用
  • 547
分享到

C#中StackExchange.Redis怎么用

2023-06-21 22:06:01 547人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关C#中StackExchange.Redis怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。安装StackExchange.Redis在 NuGet 中搜索StackExc

这篇文章将为大家详细讲解有关C#中StackExchange.Redis怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

安装StackExchange.Redis

在 NuGet 中搜索StackExchange.Redis 和 Newtonsoft.JSON,直接点击按钮安装即可。

StackExchange.Redis 是 C# 操作 Redis 数据库的客户端。

Newtonsoft.json 用来序列化 Josn 字符串及反序列化拿到对象。

C#中StackExchange.Redis怎么用

引用及初始化

引用

using StackExchange.Redis;using Newtonsoft.Json;

初始化 redis

ConnectionMultiplexer _conn = RedisConnectionHelp.Instance;//初始化var database = _conn.GetDatabase(0);//指定连接的库 0

String(字符串)

String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类。

一个 Key 对应一个 Value,string 类型是二进制安全的。Redis 的 string 可以包含任何数据,比如 jpg 图片(生成二进制)或者序列化的对象。

database.StringSet("name", "苍");//设置StringSet(key, value)string str = database.StringGet("name");//结果:苍database.StringSet("name_two", str, TimeSpan.FromSeconds(10));//设置时间,10s后过期。

存对象(对象需要序列化转成字符串,再存进库中)

取对象(反序列化)

//创建对象Demo demo = new Demo(){    Name = "苍",    Age = 18,    Height = 1.83};string demojson = JsonConvert.SerializeObject(demo);//序列化database.StringSet("model", demojson);string model = database.StringGet("model");demo = JsonConvert.DeserializeObject<Demo>(model);//反序列化

StringIncrement 增量、StringDecrement 减量(默认值同为1)

double increment = 0;double decrement = 0;for (int i = 0; i < 3; i++){    increment = database.StringIncrement("StringIncrement", 2);//增量,每次+2}for (int i = 0; i < 3; i++){    decrement = database.StringDecrement("StringIncrement");//减量,每次-1}

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部。

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。

for (int i = 0; i < 10; i++){    database.ListRightPush("list", i);//从底部插入数据}for (int i = 10; i < 20; i++){    database.ListLeftPush("list", i);//从顶部插入数据}var length = database.ListLength("list");//长度 20var rightPop = database.ListRightPop("list");//从底部拿出数据var leftpop = database.ListLeftPop("list");//从顶部拿出数据var list = database.ListRange("list");

C#中StackExchange.Redis怎么用

Hash(哈希)

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。相对于将对象的每个字段存成单个 string类型。一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。

Redis 中每个 hash 可以存储 232- 1 键值对(40多亿)。

Hash 的存储,给我的感觉类似于关系型数据库。以下面的例子为例,存储一个 user 对象(关系型数据库里的表名), cang、shan、yun (关系型数据库里的数据的主键、唯一值),json(字段)

string json = JsonConvert.SerializeObject(demo);//序列化database.HashSet("user", "cang", json);database.HashSet("user", "shan", json);database.HashSet("user", "yun", json);//获取Modelstring hashcang = database.HashGet("user", "cang");demo = JsonConvert.DeserializeObject<Demo>(hashcang);//反序列化//获取ListRedisValue[] values = database.HashValues("user");//获取所有valueIList<Demo> demolist = new List<Demo>();foreach (var item in values){    Demo hashmodel = JsonConvert.DeserializeObject<Demo>(item);    demolist.Add(hashmodel);}

发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式,可以用于消息的传输,Redis 的发布订阅机制包括三个部分,发布者,订阅者和 Channel。适宜做在线聊天、消息推送等。

发布者和订阅者都是 Redis 客户端,Channel 则为 Redis 服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息,客户端可以订阅任意数量的频道。

C#中StackExchange.Redis怎么用

ISubscriber sub = _conn.GetSubscriber();//订阅 Channel1 频道sub.Subscribe("Channel1", new Action<RedisChannel, RedisValue>((channel, message) =>{    Console.WriteLine("Channel1" + " 订阅收到消息:" + message);}));for (int i = 0; i < 10; i++){    sub.Publish("Channel1", "msg" + i);//向频道 Channel1 发送信息    if (i == 2)    {        sub.Unsubscribe("Channel1");//取消订阅    }}

因为当 i == 2 的时候取消订阅,所以收到的订阅消息只有3条。

C#中StackExchange.Redis怎么用

事务

事物开启后,会在调用 Execute 方法时把相应的命令操作封装成一个请求发送给 Redis 一起执行。

这里通过 CreateTransaction 函数(multi)来创建一个事物,调用其 Execute 函数(exec)提交事物。

其中的 "Condition.StringEqual("name", name)" 就相当于 Redis 命令中的 watch name。

string name = database.StringGet("name");string age = database.StringGet("age");var tran = database.CreateTransaction();//创建事物tran.AddCondition(Condition.StringEqual("name", name));//乐观tran.StringSetAsync("name", "海");tran.StringSetAsync("age", 25);database.StringSet("name", "Cang");//此时更改 name 值,提交事物的时候会失败。bool committed = tran.Execute();//提交事物,true成功,false回滚。

因为提交事物的过程中,name 值被修改,所以造成了回滚,所有给 name 赋值海,age 赋值25都失败了。

Batch 批量操作

batch 会把所需要执行的命令打包成一条请求发到 Redis,然后一起等待返回结果。减少网络开销。

var batch = database.CreateBatch();//批量写Task t1 = batch.StringSetAsync("name", "羽");Task t2 = batch.StringSetAsync("age", 22);batch.Execute();Task.WaitAll(t1, t2);Console.WriteLine("Age:" + database.StringGet("age"));Console.WriteLine("Name:" + database.StringGet("name"));            //批量写for (int i = 0; i < 100000; i++){    batch.StringSetAsync("age" + i, i);}batch.Execute();//批量读List<Task<RedisValue>> valueList = new List<Task<RedisValue>>();for (int i = 0; i < 10000; i++){    Task<RedisValue> tres = batch.StringGetAsync("age" + i);    valueList.Add(tres);}batch.Execute();foreach (var redisValue in valueList){string value = redisValue.Result;//取出对应的value值}

Lock(分布式锁)

由于 Redis 是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁。

RedisValue token = Environment.MachineName;//lock_key表示的是redis数据库中该锁的名称,不可重复。 //token用来标识谁拥有该锁并用来释放锁。//TimeSpan表示该锁的有效时间。10秒后自动释放,避免死锁。if (database.LockTake("lock_key", token, TimeSpan.FromSeconds(10))){    try    {        //TODO:开始做你需要的事情        Thread.Sleep(5000);    }    finally    {        database.LockRelease("lock_key", token);//释放锁    }}

StackExchange.Redis 封装

里面是封装及测试代码

链接: https://pan.baidu.com/s/1rT9z567MVtfzQtnvdUxffw 密码: 5k1b

环境:vs2013 +.net framework 4.5

相关文章:

Redis windows版下载与安装

Redis 可视化工具 Redis Desktop Manager

Redis 主从配置(Windows版)

关于“C#中StackExchange.Redis怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: C#中StackExchange.Redis怎么用

本文链接: https://www.lsjlt.com/news/300993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中StackExchange.Redis怎么用
    这篇文章将为大家详细讲解有关C#中StackExchange.Redis怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。安装StackExchange.Redis在 NuGet 中搜索StackExc...
    99+
    2023-06-21
  • C# StackExchange.Redis 用法汇总
    目录安装StackExchange.Redis引用及初始化String(字符串)List(列表)Hash(哈希)发布订阅事务Batch 批量操作Lock(分布式锁)StackExch...
    99+
    2024-04-02
  • Redis中ServiceStack.Redis和StackExchange.Redis区别是什么
    本文小编为大家详细介绍“Redis中ServiceStack.Redis和StackExchange.Redis区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis中ServiceStack.Redis和StackExcha...
    99+
    2023-06-30
  • C/C++中gtest怎么用
    这篇文章主要介绍了C/C++中gtest怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Google C++ Testing Framework(简称gtest,http...
    99+
    2023-06-17
  • c++中!怎么用
    c++ 中惊叹号 (!) 表示逻辑非运算,将布尔值取反:如果值为真,返回假;如果值为假,返回真。 C++ 中的惊叹号 (!) 用法 在 C++ 中,惊叹号 (!) 操作符表示逻辑非运算...
    99+
    2024-04-26
    c++
  • c++中?:怎么用
    条件运算符(:)在 c++ 中可根据条件执行不同操作。语法:condition true_expression : false_expression。其中,condition 是布尔表...
    99+
    2024-04-26
    c++
  • c++中::怎么用
    在 c++ 中,:: 运算符用于访问类的静态成员或全局变量。它可以让您访问静态成员,即使没有类实例,也可以访问全局变量,即使没有源文件。 :: 在 C++ 中的用途 :: 是 C++ ...
    99+
    2024-04-26
    c++
  • C++/C中#define怎么使用
    本篇内容介绍了“C++/C中#define怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 缩减代码 第一种用法与type...
    99+
    2023-07-02
  • c++中counter怎么用
    c++ 中的 counter 是一个 stl 容器,用于存储和计数不同的值。它使用整型键和值,通过 [] 运算符插入或更新值,提供遍历、查找最大值和排序元素等操作。例如,可以用来统计单词...
    99+
    2024-04-26
    c++ 键值对
  • c++中fixed怎么用
    fixed 是 c++ 中的流操作符,用于设置浮点数输出为固定小数位数。使用时将其插入输出流中,例如:std::fixed 将后续输出浮点数设置为固定小数位数格式。setprecisio...
    99+
    2024-05-12
    c++
  • C#中delegate怎么用
    小编给大家分享一下C#中delegate怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!C#语言有很多值得学习的地方,这里我们主要介绍C# delegate,包括介绍Windows Message数量的变量成本等方面。...
    99+
    2023-06-17
  • C++中decltype怎么用
    这篇文章给大家分享的是有关C++中decltype怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.语法decltype ( 实体 ) (1) (C++11 起)decltype ( 表...
    99+
    2023-06-21
  • c++中double怎么用
    c++中的double类型用于表示双精度浮点数,具有8字节存储大小、-1.7976931348623157e+308至1.7976931348623157e+308的值范围和约15-16...
    99+
    2024-05-01
    c++
  • c++中std::怎么用
    std 是 c++ 中包含标准库组件的命名空间。为了使用 std,需要使用 "using namespace std;" 语句。直接使用 std 命名空间中的符号可以简化代码,但建议仅在...
    99+
    2024-05-09
    c++ 标准库
  • C#中DataTable.Columns.Add怎么用
    在C#中,可以使用DataTable.Columns.Add方法来向DataTable对象中添加列。以下是DataTable.Col...
    99+
    2024-02-29
    c#
  • c++中/n怎么用
    c++中的换行符为\n,用于将光标移至下一行开头,可以:输出换行符:使用std::cout将\n输出到控制台或文件。在字符串中包含换行符:使用转义序列\n。读取换行符:使用std::ge...
    99+
    2024-05-01
    c++
  • c++中swap怎么用
    c++ 的 swap 函数用于交换两个变量或表达式的值,其语法为 void swap(t& x, t& y)。它简化了变量值交换,避免使用临时变量或赋值运算,从而提高代码...
    99+
    2024-05-01
    c++
  • c++中strcpy_s怎么用
    strcpy_s 函数用于安全地将字符串 src 复制到字符串 dst 中,其语法为:检查参数的有效性。调用 strcpy_s,将 src 复制到 dst 中。检查返回值以确保复制成功或...
    99+
    2024-05-08
    c++
  • c++中define怎么用
    define 是 c++ 预处理器指令,用于定义宏,是一个名称,代表值或代码块。使用方法:预处理器宏:引用宏名称替换为值或代码块。宏函数:宏定义为函数,使用宏名() 调用。优点:缩写代码...
    99+
    2024-05-12
    c++
  • c++中\b怎么用
    \b 是 c++ 中的转义字符,它用于实现两种操作:退格一个字符(backspace)启用单词边界匹配(regex) 在 C++ 中使用 \b 问题:如何在 C++ 中使用 \b? 回...
    99+
    2024-05-12
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作