使用Redis提升Windows应用性能

在现代应用程序中,缓存是提高性能和实现关键功能的重要手段。本文将解释如何在Windows上使用Redis以一种清晰的方式解决这个问题,将使用MicrosoftVisual StudioC#语言。StackExchange Redis是.NET中最好的Redis客户端之一,本文也将使用它。

以下步骤将指导如何在解决方案中包含Redis缓存

安装Redis

通过MSOpenTech页面上提供的任何版本安装Redis forWindows。此解决方案已在2.8.2104、2.8.2400和3.0.501版本上进行了测试。安装后,Windows机器的服务控制台中应该有一个Redis服务。确保此服务正在运行。

创建.NET解决方案

使用MicrosoftVisual Studio创建一个新的.NET解决方案。

添加NuGet包

使用包管理器或以下命令将StackExchange.Redis客户端和其他两个NuGet包添加到解决方案中:

PM> Install-Package StackExchange.Redis PM> Install-Package StackExchange.Redis.Extensions.Core PM> Install-Package StackExchange.Redis.Extensions.Newtonsoft

这将在项目中添加对StackExchange.Redis库的引用。

注意:如果解决方案需要强命名,请使用StackExchange.Redis.StrongName。

配置连接字符串

在App.Config(如果是Web应用程序,则为Web.Config)中添加Redis连接字符串。一个简单的连接字符串如下所示:

<connectionStrings> <clear /> <add name="RedisCacheConnection" connectionString="localhost:6379,ssl=false" /> </connectionStrings>

在Config文件中添加以下键,以显式选择特定的Redis数据库。默认情况下,单个Redis实例中有16个数据库/段(0到15)。

<appSettings> <add key="RedisDatabaseNumber" value="1" /> <add key="RedisCacheExpiration" value="20" /> </appSettings>

添加对System.Configuration库的引用。

创建连接到Redis客户端的类

创建一个新类,该类将连接到Redis客户端,类似于以下类:

using StackExchange.Redis.Extensions.Core; using StackExchange.Redis.Extensions.Newtonsoft; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; namespace RedisDemo { public class RedisClient<T> { protected string cacheConnectionString; protected int cacheObjectExpiration; protected short redisDb; public RedisClient() { cacheConnectionString = ConfigurationManager.ConnectionStrings["RedisCacheConnection"].ConnectionString; redisDb = Convert.ToInt16(ConfigurationManager.AppSettings["RedisDatabaseNumber"]); cacheObjectExpiration = Convert.ToInt32(ConfigurationManager.AppSettings["RedisCacheExpiration"]); } protected StackExchangeRedisCacheClient GetCacheClient() { var serializer = new NewtonsoftSerializer(); var cacheClient = new StackExchangeRedisCacheClient(serializer, cacheConnectionString, redisDb); return cacheClient; } public void FlushCache() { using (var cacheClient = this.GetCacheClient()) { cacheClient.FlushDb(); } } public void AddToCache(string key, T cacheObject) { using (var cacheClient = GetCacheClient()) { if (cacheClient.Exists(key)) { cacheClient.Replace(key, cacheObject, new TimeSpan(0, cacheObjectExpiration, 0)); } else { cacheClient.Add(key, cacheObject, new TimeSpan(0, cacheObjectExpiration, 0)); } } } public T GetCachedItem(string key) { using (var cacheClient = this.GetCacheClient()) { var cachedObject = cacheClient.Get<T>(key); return cachedObject; } } public IEnumerable<T> GetAllCachedItems() { using (var cacheClient = GetCacheClient()) { var keys = cacheClient.SearchKeys("*"); var dictCollection = cacheClient.GetAll<T>(keys); return dictCollection.Values.ToList(); } } } }

缓存客户端类已准备好使用。现在可以实例化它,并使用它来存储和检索缓存中的数据。

附加提示和技巧

以下是在使用Windows上的Redis时可以使用的一些额外提示和技巧。

Windows上的Redis会使用大量磁盘空间来持久化一些数据。尽管2.8.2400版本已经做了一些修复来解决这个问题,但以下是如何配置Redis不消耗任何磁盘空间的方法:

  1. 停止Redis服务。
  2. 删除位于“C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Redis”的默认Redis持久化位置的所有文件。
  3. 转到Redis服务器配置文件。文件的默认位置是"C:\Program Files\Redis\redis.windows.conf"。
  4. 取消注释文件中的这一行:save ""
  5. 注释掉这些行: save 900 1 save 300 10 save 60 10000
  6. 转到这一行: # persistence-available [(yes)|no] 在这一行下面添加: persistence-available [no]
  7. 保存文件并重新启动Redis服务。

每个Redis实例默认带有16个数据库或分区。可以在每个分区中存储相似或不同的对象。这些分区可以用来分隔应用程序可能需要缓存的不同类型对象。

如果需要启动多个Web服务器来扩展Web应用程序,管理会话会有点棘手。有各种选项,如使用粘性会话、状态服务器和SQL服务器。

同样,可以使用Redis缓存来存储会话。有一个会话状态提供程序可以使用Redis缓存。这里是,描述了如何使用它。

这里是可以用来通过命令行管理Redis的。

Redis安装位置的Redis-Cli.exe可以用来连接到Redis服务器实例。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485