Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使redis缓存在部署在IIS Express上但在本地主机上工作的asp.net核心web上工作_C#_Asp.net Core_Redis_Iis Express - Fatal编程技术网

C# 如何使redis缓存在部署在IIS Express上但在本地主机上工作的asp.net核心web上工作

C# 如何使redis缓存在部署在IIS Express上但在本地主机上工作的asp.net核心web上工作,c#,asp.net-core,redis,iis-express,C#,Asp.net Core,Redis,Iis Express,我正在使用“Redis-x64-3.0.504”,并试图在IIS Express上本地托管我的asp.net core 2.2 web应用程序,但Redis缓存在IIS上无法正常工作,因为在访问缓存或在缓存中保存时,我似乎无法加载。然而,当我作为本地主机运行VisualStudio时,它工作得非常好 我添加了一个Microsoft.extensions.Caching.StackExchangeRedis(2.2.5)nuget,并在ConfigureServices(IServiceColle

我正在使用“Redis-x64-3.0.504”,并试图在IIS Express上本地托管我的asp.net core 2.2 web应用程序,但Redis缓存在IIS上无法正常工作,因为在访问缓存或在缓存中保存时,我似乎无法加载。然而,当我作为本地主机运行VisualStudio时,它工作得非常好

我添加了一个Microsoft.extensions.Caching.StackExchangeRedis(2.2.5)nuget,并在
ConfigureServices(IServiceCollection服务)
中添加了一个用于配置的代码

代码如下所示:

services.addStackExchangeDiscache(选项=>
{
options.Configuration=“localhost”;
options.InstanceName=“SampleInstance”;
});
然后我创建了一个
CacheHelper
类,作为访问缓存的方法的泛型:

公共静态类CacheHelper
{
公共静态void SaveInCache(IDistributedCache memoryCache,字符串键,T值)
{
var graphJSON=JsonConvert.SerializeObject(值);
memoryCache.SetStringAsync(key,graphJSON);
}
公共静态T GetFromCache(IDistributedCache memoryCache,字符串键)
{
var cacheValue=memoryCache.GetStringAsync(键);
返回JsonConvert.DeserializeObject(cacheValue.Result!=null?cacheValue.Result:string.Empty);
}
公共静态T GetMatchFromCache(IDistributedCache memoryCache,字符串匹配键)
{
var redis=StackExchange.redis.ConnectionMultiplexer.Connect(“localhost”);
var db=redis.GetDatabase();
var serverEndpoints=redis.GetEndPoints()[0];
var keys=redis.GetServer(serverEndpoints.keys)(模式:“*”);
foreach(var键入键)
{
if(key.ToString()包含(matchKey))
{
var trimmedKey=key.ToString().Substring(key.ToString().IndexOf(matchKey));
返回GetFromCache(memoryCache、trimmedKey);
}
}
返回默认值(T);
}
公共静态列表GetAllMatchFromCache(IDistributedCache memoryCache,字符串匹配键)
{
列表内容列表=新列表();
var redis=StackExchange.redis.ConnectionMultiplexer.Connect(“localhost”);
var db=redis.GetDatabase();
var serverEndpoints=redis.GetEndPoints()[0];
var keys=redis.GetServer(serverEndpoints.keys)(模式:“*”);
foreach(var键入键)
{
if(key.ToString()包含(matchKey))
{
var trimmedKey=key.ToString().Substring(key.ToString().IndexOf(matchKey));
var cacheReturn=GetFromCache(memoryCache,trimmedKey);
if(cacheReturn!=null)
{
contentList.Add(cacheReturn);
}
}
}
返回内容列表;
}
}

我很困惑为什么这不是在IIS上工作,而是在我的本地主机上工作。如何在IIS主机上执行此操作?

在建立连接时尝试以下操作:

using (var muxer = ConnectionMultiplexer.Connect("localhost,resolvedns=1"))
        {
            muxer.PreserveAsyncOrder = preserveOrder;
            RedisKey key = "MBOA";
            var conn = muxer.GetDatabase();
            muxer.Wait(conn.PingAsync());

            Action<Task> nonTrivial = delegate
            {
                Thread.SpinWait(5);
            };
            var watch = Stopwatch.StartNew();
            for (int i = 0; i <= AsyncOpsQty; i++)
            {
                var t = conn.StringSetAsync(key, i);
                if (withContinuation) t.ContinueWith(nonTrivial);
            }
            int val = (int)muxer.Wait(conn.StringGetAsync(key));
            watch.Stop();

            Console.WriteLine("After {0}: {1}", AsyncOpsQty, val);
            Console.WriteLine("({3}, {4})\r\n{2}: Time for {0} ops: {1}ms; ops/s: {5}", AsyncOpsQty, watch.ElapsedMilliseconds, Me(),
                withContinuation ? "with continuation" : "no continuation", preserveOrder ? "preserve order" : "any order",
                AsyncOpsQty / watch.Elapsed.TotalSeconds);
        }
使用(var muxer=ConnectionMultiplexer.Connect(“localhost,resolvedns=1”))
{
muxer.preserveAncyOrder=preserveOrder;
RedisKey=“MBOA”;
var conn=muxer.GetDatabase();
Wait(conn.PingAsync());
操作非平凡=委托
{
线程等待(5);
};
var watch=Stopwatch.StartNew();

对于(int i=0;听起来您甚至不太清楚IIS和IIS Express之间的区别。整个问题在全文中使用IIS/IIS Express,但不知道问题是发生在IIS还是IIS Express上。