【问题标题】:Flushing portions of a Redis cache刷新 Redis 缓存的部分
【发布时间】:2014-06-11 23:12:11
【问题描述】:

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

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

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

有没有办法使用 Redis 完成这样的设置?如果是这样,我该如何从客户端/服务器端解决这个问题?

【问题讨论】:

    标签: redis servicestack.redis


    【解决方案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 作为云中托管 Redis 服务的一个选项。我们是唯一允许您在同一订阅中设置多个专用 Redis 数据库且无需额外费用的服务提供商。

    【讨论】:

    • 感谢您这么简洁的回答!听起来运行多个实例可能是我们要走的路。关于 Redis Cloud - 如果您在加拿大有 POP, 是我们的一个选择(由于客户限制 - 我们无法在国外存储任何东西,恐怕)。跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多