阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在Linux平台上用ASP.NET 5 连接Redis服务器

90次阅读
没有评论

共计 2195 个字符,预计需要花费 6 分钟才能阅读完成。

最近在做一个 Linux 平台上基于 ASP.Net 5 中间件 +Redis+MySQL 架构的系统,研究使用了 StackExchange.Redis 作为 asp.net5 连接 redis 的工具。作者在前几天开了一个新的分支“CoreCLR”开始对 asp.net5 的进行升级开发。并且有一个 pull request 跟踪相关的问题。在 Windows 开发机上测试一切都可以正常执行。迁移到 Linux 上的 Docker 容器里执行后发现,asp.net5 的中间件程序在通过 StackExchange.Redis 连接本地的 redis 服务时会发生如下错误:

System.PlatformNotSupportedException: Operation is not supported on this platform.
at System.Net.Sockets.SocketPal.Ioctl(SafeCloseSocket handle, Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue, Int32& optionLength)
at System.Net.Sockets.SocketPal.Ioctl(SafeCloseSocket handle, Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue, Int32& optionLength)
at System.Net.Sockets.Socket.IOControl(Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue)
at StackExchange.Redis.SocketManager.SetFastLoopbackOption(Socket socket)

研究后发现,Github 上托管的.Net 代码中有这样一段:

public static SocketError Ioctl(SafeCloseSocket handle, int ioControlCode, byte[] optionInValue, byte[] optionOutValue, out int optionLength)
{
    // TODO: can this be supported in some reasonable fashion?
    throw new PlatformNotSupportedException();
}

OK,看来虽然准备实现,但确实还未实现。好吧,暂时自己动手和改下 StackExchange.Redis 代码。改为:


        internal SocketToken BeginConnect(EndPoint endpoint, ISocketCallback callback, ConnectionMultiplexer multiplexer, TextWriter log)
        {
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try {SetFastLoopbackOption(socket); } catch {}
            socket.NoDelay = true;
            try
            {
 …

这是一个暂时的绕过方案,使你至少可以在 Linux 上跑的 asp.net5 程序可以顺利连接 Redis。缺点是,连接本地 Redis 服务时,并未使用环回(Loopback)方式,使得原本应该有的本地连接性能提升没有体现出来。相信.net5 的 Sockets 基础类进一步改进后。该性能提升还是会有的。

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis 安装部署学习笔记 http://www.linuxidc.com/Linux/2014-07/104306.htm

Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-12/126811.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2195字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中