2016-07-28 51 views
0

我们有一个在生产环境中运行的memcached集群,作为MySQL顶层的缓存层。现在我们正在考虑用Couchbase替换memcached以避免冷高速缓存问题(在发生崩溃的情况下),并且具有托管高速缓存集群的这一功能。Couchbase:如何使缓存持久性成为一个选项?

与此同时,我们希望最小化迁移到Couchbase的更改。我们可以尝试的一种方法是维护libmemcached API并设置一个http代理来将所有请求定向到Couchbase。这样,应用程序代码中没有任何变化。如果我理解正确,那么Couchbase基本上就是一个托管的memcache集群。我们没有利用持久性缓存项目。我们不能这样做标记某个缓存项是持久性:

# connect to couchbase like connecting to memcached 
$ telnet localhost 11211 

SET foo "foo value" # How can we make this item persistent in Couchbase? 

我想这是因为所有项目都存储在memcached的水桶。所以,问题就变成了:

  • 我们可以控制哪些项目将被存储在Couchbase桶或 内存缓存斗?为此,我们是否必须更改libmemcached API以及与此相关的所有应用程序代码?

谢谢!

回答

2

我想你应该看看运行Moxi,这是一个memcached代理couchbase。您可以使用目标couchbase存储桶配置Moxi。

couchbase集群自动启动集群感知moxi网关,您可以指向您的Web /应用程序服务器。这就是couchbase所谓的“服务器端moxi”。

或者,您可以在每个Web /应用程序服务器上安装moxi,以便它们仅连接到localhost:11211。 Moxi处理长时间连接的couchbase群集。这就是couchbase所谓的“客户端m”“。

+0

感谢您的回答。使用Moxi,如果我们想要混合使用Couchbase(持久性)和memcache(易失性)桶,我们必须定义一些类型的代理规则来选择性地保留一些项目。这能工作吗? –

+0

据我所知,没有办法根据关键字来决定moxi决定哪个桶应该被缓存。这需要一个自定义代理。 –