刷新Redis缓存的部分

时间:2014-06-11 13:44:27

标签: redis servicestack.redis

我正在调查使用ServiceStack.Redis客户端和在远程计算机上运行的单个Redis实例在asp.net mvc应用程序中使用Redis。

我们的缓存分为3个主要"区域" (Asp.net输出缓存,NHibernate二级缓存,应用程序缓存)我希望能够能够" flush"这些区域中的所有键都是单独的。

在Couchbase(我们目前使用)中,这将通过使用单独的buckets与指向每个客户端实例的客户端实例来实现。然后,我们可以使用来自相应客户端实例的单个调用来刷新这些存储桶中的所有值。

有没有办法使用Redis完成这样的设置?如果是这样,我该如何从客户端/服务器端进行此处理?

1 个答案:

答案 0 :(得分:1)

我可以想到实现这一目标的三种方法。

共享数据库 - 最差的方法(强烈建议不要追求)

Redis支持共享数据库,这些数据库基本上是由同一服务器管理的单独密钥空间。连接到Redis后,可以使用SELECT语句在数据库之间切换,并且可以使用FLUSHDB命令逐个刷新每个数据库。

临:

  • 这是获得您所需要的最简单方法。

缺点:

  • 共享数据库共享相同的Redis进程。由于Redis(大部分)是单线程的,因此不推荐使用共享数据库的做法,因为一个数据库中的操作可能会干扰在同一服务器上运行的其他数据库。
  • 目前尚不清楚在Redis的未来版本中是否会继续支持共享数据库。

(有关共享与专用Redis数据库的详细信息,请查看http://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances上的帖子

一个数据库,不同的密钥前缀 - 稍微好一些但仍然......

您可以使用单个Redis数据库,并根据它们所属的“区域”为您的密钥添加前缀(例如,进入ASP.Net区域的密钥将以'asp:'等为前缀...)。要删除区域,请使用相应的键名称模式使用SCAN命令遍历键空间,并使用DEL返回结果。

专业人士:想不出来 缺点:

  • 与上述+更多编码相同,以实现SCAN / DEL例程。

专用数据库 - 推荐方法

为每个区域使用单独的Redis实例,简单明了。设置远程计算机以运行3个Redis服务器,每个服务器管理自己的密钥空间。要刷新,请连接到相关数据库并执行FLUSHDB或FLUSHALL

优点:

  • 使用单个命令刷新区域
  • 利用远程计算机上的多个核心

缺点:

  • 可能意味着需要更多的管理工作来设置3台Redis服务器。

最后,如果您正在寻找一种无需麻烦的方法来使用Redis,我建议您考虑Redis Cloud作为Cloud中托管的Redis服务的选项。我们是唯一一家允许您在同一订阅中设置多个专用 Redis数据库的服务提供商,无需额外费用。