Rails自带memcache-client,作为操作memcached缓存的客户端,然而最近我却在糗事百科的后台中发现大量的MemCacheError,我起初以为是memcached的问题,以保守参数重新编译了memcached,发现问题依旧。
最后通过替换成libmemcached才解决了这个问题(至今没有搞明白为什么)
并且在使用memcache-client的过程中发现了两个问题。
1. 如果通过Rails中的mem_cache_store来调用memcache-client,那么increment和decrement操作只能针对使用了:raw=>true参数的缓存才有效,因为mem_cache_store是默认将数据使用Marshal进行序列化的。
2. memcache-client支持get_multi,也就是向memcached一次请求多个key,但是其文档中明确说明,默认获取数据进行过Marshal的,raw数据就只能自己写multiget了。然而libmemcached可以直接通过get操作获取多个key,并且支持指定是否要序列化。
测试下来,我推荐最好使用Ruby的memcached这个gem来操作memcached,因为它这个gem是一个使用了libmemcached的C扩展,相对于纯ruby的memcache-client效率高出很多,而且功能更加强大,可以使用二进制协议和udp协议,能最大限度发挥memcached的效率。
要在Rails中使用libmemcached作为cache store,可以安装LibmemcacheStore 的Rails插件,然后指定以下配置,API符合Cache Store标准
config.cache_store = :libmemcached_store
分享到:
相关推荐
Dalli库由Mike Perham开发,它取代了早期的memcache-client库,旨在提供更好的性能和稳定性。在使用Dalli时,开发者可以轻松地将数据存储到memcached服务器上,以实现快速访问和缓存管理。 ### 主要特性 1. **完全...
- 安装 `ruby-json` 和 `memcache-client`: - `gem install ruby-json` - `gem install memcache-client` #### 注意事项 - 在安装过程中,需要注意路径的准确性,确保所有文件都放置在指定位置。 - 安装完成后...
2. **手动复制缺失文件:**如果安装Gem后仍然出现问题,可以尝试从互联网上下载`memcache_util.rb`文件,并将其放置在Gem的`lib`目录下(例如`/usr/local/lib/ruby/gems/1.8/gems/memcache-client-1.7.0/lib/`)。...
安装先决条件: sudo apt-get install ruby-redcarpet ruby-memcache-client memcachedsudo service memcached start在您的 cgi-bin 目录中安装Markdown.cgi sudo cp Markdown.cgi /usr/lib/cgi-binsudo chmod +x /...
应该将其视为memcache-client gem的替代品。 这个名字是萨尔瓦多·达利(Salvador Dali)的变体,因为他着名的画作 。 Dalli的最初开发由赞助。 非常感谢他们! 支持的Ruby版本和实现 Dalli应该在以下方面做同样...
例如,Java的memcached client、spymemcached和xmemcached等客户端可以配置多个Memcache服务器地址,当一个服务器不可用时,会自动切换到其他服务器。 总结,Memcache作为一个高效的内存缓存系统,其部署和使用涉及...
ruby (+ autoconf + openssl + libffi + yaml + gdbm) [tarball 或 subversion,见RUBY_SVN变量] rubygems:rack、rails、thin、unicorn、passenger、capistrano、sqlite3、mysql、pg、psych(注释掉)、memcache-...
gem、 memcache-client和memcached 。 您只需要创建一个客户端实例并将其存储在CACHE常量中。安装作为宝石: gem install model-cache 作为插件: script/plugin install git://github.com/moskyt/model_cache.git ...
5. **Node.js** - `node-memcached` 和 `memcached-client`:Node.js的 `node-memcached` 是一个稳定且广泛使用的客户端,而 `memcached-client` 提供了更现代的API和更好的错误处理。 6. **Go** - `go-memcache`:...
Memcached 支持多种编程语言的客户端库,如 Python、Java、PHP、Ruby、Perl 等。以 Java 为例,我们可以使用 `spymemcached` 库。 - 添加 `spymemcached` 依赖到项目中(如 Maven 项目): ```xml <groupId>...
memcached 支持多种编程语言的客户端,包括 Python、Ruby、PHP、Java 和 JavaScript 等,而 `Memcache.jl` 则是 Julia 对 memcached 的实现。 ### 二、Julia 语言与 memcached 结合的优势 1. **性能**: Julia 语言...
使用这个库,开发者可以方便地在各种语言(如 PHP、Python、Java、Ruby 等)中与 Memcached 服务器进行交互,实现数据的缓存操作。 **六、使用示例** 在 Python 中,可以使用 pymemcache 库连接到 Memcached 服务器...
mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.set('key', 'value') value = mc.get('key') ``` 2. **Java**: 使用`spymemcached`库,首先通过Maven或Gradle添加依赖,然后创建MemcachedClient实例...
client = memcache.Client(['127.0.0.1:11211'], binary=True) client.set('key', 'value') value = client.get('key') ``` ## 六、监控与优化 为了监控 Memcached 的性能,可以使用 `stats` 命令: ```bash ...
mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.set('key', 'value') data = mc.get('key') ``` **四、使用Memcached优化应用** 1. **缓存热点数据**:将访问频繁且计算代价高的数据放入缓存,如热门文章...
1. **memcache扩展**:在编译PHP时启用`--enable-memcache`选项,或在Windows环境下取消php.ini中`php_memcache.dll`的注释。 2. **php-memcached-client**:这是一个无需扩展的PHP客户端,虽然效率略低,但使用更...
mc = memcache.Client(['127.0.0.1:11211'], debug=0) # 存储数据 mc.set('key', 'value') # 获取数据 data = mc.get('key') print(data) # 输出:value ``` **五、memcached的优势与局限** 优势: 1. 高性能:...
单个Ruby脚本。 仅使用Ruby核心和标准库-无需任何宝石! 设计为易于“安装”(通过curl )到任何服务器/容器都可以到达您关心的内存缓存服务器上。 在Ruby 2.0.0或更高版本下运行,因此应在旧版Linux发行版上运行...
Puppet是一种基于Ruby的自动化配置管理工具,它允许系统管理员通过声明式的配置语言来定义IT基础设施的代码,从而实现系统配置的自动化管理。通过Puppet,可以对操作系统和应用程序进行管理,确保系统资源和服务的...
JSON: Cut your client-server exchange traffic by 50% with one line of code”的文章中提到了使用MessagePack优化服务器的例子。通过采用MessagePack,可以显著降低服务器端的数据量,从而更有效地利用带宽资源...