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