本系列博文已经全部完成,完整系列请访问:https://blog.zhuliang.ltd/tags/StackExchange-Redis%E7%B3%BB%E5%88%97/

本文转自:https://blog.zhuliang.ltd/2020/01/redis/StackExchangeRedis-BasicUsage.html

  • 本系列博文是“伪”官方文档翻译,并非完全将官方文档进行翻译,而是我在查阅、测试原始文档并转换为自己东西后进行的“准”翻译。
  • 原始文档见此:https://stackexchange.github.io/StackExchange.Redis/
  • 本系列本博文基于 redis 5.0.6,系列中部分博文跟官方文档有出入,有不同见解 / 说明不当的地方,还请大家不吝拍砖。

ConnectionMultiplexer 说明

命名空间位于:StackExchange.Redis.ConnectionMultiplexer

  • ConnectionMultiplexer 是 StackExchange.Redis 的核心对象,内部继承了 IDisposable,但建议不要用 using 以便可以愉快重用,你就认为它足够安全吧。
  • 该对象线程安全,且应该被重用,搞成单例即可,不要每次操作都创建一个。

主从库示例:

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

项目中调用实例

说明:示例基于 .NET CORE 2.1,通过 IoC 进行注入,生命周期为“单例”。

如果不通过 IoC 的话建议直接使用“单例模式”。

    public class RedisClient : ICache
{
private readonly RedisSettings _redisSettings;
private static IDatabaseAsync _db; public RedisClient(IOptions<RedisSettings> redisSettings)
{
_redisSettings = redisSettings.Value;
var redis = ConnectionMultiplexer.Connect($"{_redisSettings.Address}:{_redisSettings.Port}");
_db = redis.GetDatabase(_redisSettings.DataBase);
} #region Implementation of ICache public async Task<bool> SetStringAsync(string key, string content)
{
return true;
} public async Task<string> GetStringAsync(string key)
{
var result = await _db.StringGetAsync(key);
return result;
}
#endregion
}

其他一些建议和说明

  • StackExchange.Redis 有 3种主要使用机制:

    • 同步
    • 异步:建议优先使用异步方法而不是同步方法。
    • 即发即忘(Fire-And-Forget):当你不需要响应结果的时候,可以使用这种机制,被调用方法会立马返回,但操作会在后台进行执行。。
  • 即发即忘”机制补充:StackExchange.Redis 的方法中都有 CommandFlags 枚举,默认值是 “None”,当你需要使用“即发即忘”机制的时候,需要在方法上显示指定 CommandFlags.FireAndForget,需要注意:
    • 如果返回值是一个字符串类型,则将总是返回 null。
    • 如果返回值是一个 Int64 类型,则将总是返回 0。
    • 需要注意的是,如果返回值是一个 boolean,则返回的是 false(但操作是成功的,此时不要用该返回值作为你后续业务的判断依据)。
db.StringIncrement(cacheKey, flags: CommandFlags.FireAndForget);
  • StackExchange.Redis.IDatabase 的一些方法,是根据 Redis 的数据类型来进行命名的,如 IDatabase.StringGet,这里的 StringGet 表示的是获取一个 String ,跟 C# 中的字符串并非表示同一个东西,可参考:关于 Redis 的数据类型

发布/订阅

  • 发布/订阅不需要指定 database

例子:

客户端

private readonly RedisSettings _redisSettings;
private static IDatabaseAsync _db;
private static ConnectionMultiplexer _redis; public RedisClient(IOptions<RedisSettings> redisSettings)
{
_redisSettings = redisSettings.Value;
_redis = ConnectionMultiplexer.Connect($"{_redisSettings.Address}:{_redisSettings.Port}");
_db = _redis.GetDatabase(_redisSettings.DataBase);
} public async Task Subscribe(string channel, Action<RedisChannel, RedisValue> fun)
{
var sub = _redis.GetSubscriber();
await sub.SubscribeAsync(channel, fun);
} public async Task Publish(string channel, string message)
{
var sub = _redis.GetSubscriber();
await sub.PublishAsync(channel, message);
}

订阅者

class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var configuration = builder.Build();
var subscriber = configuration["Subscriber"];
var settings = configuration.GetSection("RedisSettings").Get<RedisSettings>(); var redisClient = new RedisClient(settings);
redisClient.Subscribe(settings.ChannelName, (channel, message) =>
{
System.Console.WriteLine($"{subscriber}:{message}");
}).Wait(); System.Console.WriteLine("started");
System.Console.ReadKey();
}
}

测试效果:

服务器命令

若要使用服务器命令,需要通过 ConnectionMultiplexer 对象获取 Server 对象,如下:

var server = _redis.GetServer($"{_redisSettings.Address}:{_redisSettings.Port},allowAdmin=true");
server.ScriptExists("scripts here");

目前支持的方法如下

StackExchange.Redis 系列 1:基础使用的更多相关文章

  1. 一、redis系列之基础知识与centos下环境搭建

    1. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的ke ...

  2. Redis系列(一)--基础API

    Redis:Remote Dictionary Server 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.C语言实现,单线程 Redis特性: 1.速度快 ...

  3. StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址.http://www.cnblogs.com/tdws/p/5815735.html 写在前面 这不是教程,分享而已,也欢迎园友们多 ...

  4. Redis系列(一)StackExchange.Redis的使用

    Redis系列(一)StackExchange.Redis的使用 一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对 ...

  5. Redis 系列 (一) StackExchange.Redis的使用

    一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象.这个类的实 ...

  6. RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用

    本文版权归博客园和作者本人吴双共同所有,转载请注明本Redis系列分享地址.http://www.cnblogs.com/tdws/tag/NoSql/ Redis Pub/Sub模式 基本介绍 Re ...

  7. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  8. StackExchange.Redis 二次封装

    在NuGet直接搜索StackExchange.Redis,下载引用包: 帮助类: public class RedisUtils { /// <summary> /// redis配置文 ...

  9. 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步

    深入理解MVC   MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...

随机推荐

  1. Maven debug异常:Source not found.

    异常 用Maven debug 时出现了Source not found.,在调试过程中尝试添加源码也没有效果 解决方案 先把当前正在运行中的项目停止 右键项目 -> Debug As -> ...

  2. iNeuOS工业互联平台,iNeuKernel(物联网核心组件)远程控制标准化设计与实现。发布v2.3版本。

    目       录 1.      概述... 2 2.      平台演示... 2 3.      控制端与iNeuKernel的交互协议... 3 4.      设备驱动实现控制业务... 4 ...

  3. LinearLayout里面的空间居中对齐

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. wordpress 如何正确升级

    http://www.admin5.com/article/20141230/578710.shtml 正确的版本升级应该是,备份数据库和文件,然后禁用所有的插件后在执行升级.这样也避免不了升级过后启 ...

  5. HDU_1556_线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 直接用了技巧来做. #include<iostream> #include<cstdio ...

  6. CCF_ 201509-2_日期计算

    水. #include<iostream> #include<cstdio> using namespace std; ] = {{,,,,,,,,,,,,},{,,,,,,, ...

  7. 基于MySQL+MHA+Haproxy部署高可用负载均衡集群

    一.MHA 概述 MHA(Master High Availability)是可以在MySQL上使用的一套高可用方案.所编写的语言为Perl 从名字上我们可以看到.MHA的目的就是为了维护Master ...

  8. NR / 5G - Downlink Carrier Waveform

  9. [redis读书笔记] 第一部分 数据结构与对象 链表

    二 链表 1.链表节点使用ListNode结构,是一个双向的链表,同时,还实现了一个控制所有ListNode的结构list: typedef struct listNode { // 前置节点 str ...

  10. Multicast

    Source Specific Multicast (SSM) The multicast that you are probably familiar with (PIM sparse and de ...