本系列博文已经全部完成,完整系列请访问: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. 『开源协议』Creative Commons Attribution 3.0 License . 协议的个人理解,并 转载分享 4000个 精美可商用小图标

    为什么会研究 Creative Commons Attribution 3.0 License Creative Commons Attribution 3.0 License 简称 CC3,是 一种 ...

  2. 最好用的web端代码文本编辑器ACE

    使用足够简单,功能足够强大,体验足够优秀 之前有一个系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,总共发了四篇文章介绍了三个非常棒的插件,分别是bootstrap-duallistbox ...

  3. Node.js实战--资源压缩与zlib模块

    Blog:<NodeJS模块研究 - zlib> Github:https://github.com/dongyuanxin/blog nodejs 的 zlib 模块提供了资源压缩功能. ...

  4. mplayer的参数

    播放文件 使用 MPlayer 播放媒体文件最简单的方式是: mplayer <somefile>  MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播 ...

  5. AWS的边缘计算平台GreenGrass和IoT

    AWS的边缘计算平台GreenGrass和IoT 为什么需要有边缘计算? 如今公有云和私有云平台提供的服务已经连接上了绝大多数的桌面设备和移动设备.但是更多的设备比如,车辆,工程机械,医疗设备,无人机 ...

  6. python学习方法

    python学习体系 python相关书籍若干本 了解python基础数据类型 熟悉各种类型的操作方法 理解函数与类的概念 练习练习再练习 前期以被动学习为主,把每个知识点都认真的学过去,后期慢慢再把 ...

  7. 《Python学习手册 第五版》 -第8章 列表与字典

    前面已经讲过数值类型(第5章)和字符串类型(第7章),本章继续其他数据类型的讲解:列表和字典 本章的核心内容 1.列表 1)什么是列表 2)基本列表操作 3)列表迭代和推导 4)索引.分片和矩阵 5) ...

  8. Go语言实现:【剑指offer】左旋转字符串

    该题目来源于牛客网<剑指offer>专题. 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左 ...

  9. Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间

    1.引言在实际开发中,每条数据的创建时间和修改时间,尽量不需要应用程序去记录,而由数据库获取当前时间自动记录创建时间,获取当前时间自动记录修改时间. 2.创建语句(1)–添加CreateTime 设置 ...

  10. 博客圆美化主题推荐之Slience

    博客圆美化主题推荐之Slience 一.前言 本博客美化主题作者为:Esofar,本文仅在教导如何快速把该美化主题应用到自己的博客中,详细部署内容见Silence - 专注于阅读的博客园主题. 二.博 ...