`
zizipo
  • 浏览: 23127 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

ruby元编程的首次尝试和 memcached的使用。

阅读更多
今天做项目中遇到一个很常见问题,很多平均值比如:评分,送货时间平均值需要缓存,计算消耗的代价过大,也没有实时性的要求所以也没有必要。因为ruby目前部署服务器还是已多进程的方式为主的故选择memcached做缓存来实现进程间的数据共享(如果以后是多线程的部署方式,通过一个全局的hash效率应该会高)。
memcached安装sudo apt-get install memcached(注意,虽然项目名是memcache,但这里memcached)
ruby 客户端安装:
sudo apt-get install libsasl2-dev
gem install memcached
memcached有专门用于计数的函数(猜想效率会高)。
memcached一次取多条数据效率会高。
因为缓存是个常见问题,故希望通过元编程解决这个问题。可以缓存任何函数的结果。并设置过期时间。
代码
module MethodCached
  def method_cached(fun,time)
    define_method :"#{fun}_cached",->(*splat){str_key =(self.id.to_s+fun.to_s+splat.map{|o| o.to_s}.join("_"))
    begin
       return $cache.get str_key
    rescue
      $cache.set str_key,(res=self.send(fun,*splat)),time
      return res
    end
    }
  end
end

使用,在类里面:
extend MethodCached
method_cached :function_name,10

10代表10秒过期
直接就可以调用 function_name_cached
extend 将模块里面的方法变成类方法
include 将模块里面的方法变成实例方法
在ruby编程里,当前上下境的self很重要,所有的函数调用都是基于该self.
module被extend之后,method_cached是类方法,里面self指向类,故define_method定义的是实例方法(类对象的单例类define_method是定义类方法)在define_method的内部,self指向实例,self.send(fun)调用的是实例方法。
测试:
assert_equal 4.5,stores(:one).ontime_score_cached
orders(:one).store_ontime_scores.build(:score=>3)
orders(:one).save
assert_equal 4.5,stores(:one).ontime_score_cached
sleep(1)
assert_equal 4.5,stores(:one).ontime_score_cached
sleep(6)
assert_equal 4.0,stores(:one).ontime_score_cached

1
0
分享到:
评论

相关推荐

    Memcached使用--使用

    1. **语言支持**:Memcached有多种编程语言的客户端库,如PHP、Python、Java、Ruby、Node.js、C++等。 2. **操作接口**:客户端库提供了基本的`get`、`set`、`delete`、`incr`(自增)、`decr`(自减)等操作,以及...

    Memcached的Ruby客户端Dalli.zip

    Dalli 是一个高性能的 Memcached 的 Ruby 客户端,支持 Memcached 1.4 ,使用新的二进制协议。 支持: JRuby 1.6 Ruby 1.9.3 Rubinius 2.0 示例代码: require 'dalli' options = { :namespace => "app...

    Memcached原理和使用详解

    文件详细描述了Memcached相关原理和使用方法,内容包括:Memcached原理介绍、Memcached安装和使用说明、Memcached使用的技巧等。

    Memcached 原理和使用详解

    2. **简单的协议**:Memcached使用自定义的文本协议,简洁明了,易于实现和调试。客户端可以轻松地与Memcached进行交互,存储和检索数据。 3. **基于libevent的事件处理**:libevent是一个跨平台的事件通知库,用于...

    danga memcached使用

    **标题:“danga memcached使用”** memcached是一款高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,通过在内存中缓存数据和对象来减少读取数据库的次数。Danga是memcached的原始...

    memcached使用说明.doc

    对于小型或单服务器应用,没有分布式需求和数据共享需求的情况,使用 Memcached 可能会导致额外的系统开销,反而降低效率。 **四、安装步骤(Windows 环境)** 1. 下载 Memcached 的 Windows 稳定版,解压缩到指定...

    memcached缓存使用演示

    在开发中,我们通常会使用编程语言提供的客户端库来操作Memcached。例如,对于Python,可以使用`python-memcached`库,Java有`spymemcached`,PHP有`php-memcached`等。以下是一些基本操作: - **添加缓存**:使用`...

    JAVA+MYSQL+Memcached

    在IT领域,尤其是在Web开发中,Java、MySQL和Memcached是三个非常重要的技术组件。本文将深入探讨这些技术,以及如何将它们结合使用。 首先,Java是一种广泛使用的面向对象的编程语言,尤其在企业级应用中占据主导...

    memcached服务器端memcached.exe 下载

    memcached支持多种编程语言的客户端,包括PHP、Python、Java、Ruby等,其核心特性包括: 1. **分布式**:memcached可以自动将数据分发到不同的服务器,平衡负载。 2. **内存存储**:所有的数据都存储在内存中,提供...

    查看、分析memcached使用状态

    通过两篇文章《Memcache 和 mysql 交互流程操作原理》和《让 memcached 和 mysql 更好的工作》,我们可以深入了解如何使用 Memcached 与 MySQL 配合工作。 为了监控和分析 Memcached 的运行状态,我们可以利用其...

    memcached.exe及memcached.dll

    Memcached提供了多种语言的客户端库,如PHP、Python、Java、Ruby等,使得开发者可以方便地在各种编程语言中使用Memcached。这些客户端库提供了API来执行添加、删除、获取和更新缓存数据的操作。 **六、安全考虑** ...

    Memcached 学习资料(memcached Memcached使用手册 Memcached源码剖析笔记)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻...它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。

    memcached原理和使用详解

    资源名称:memcached原理和使用详解内容简介: Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库...

    多台tomcat服务的session共享 memcached

    4. Ruby:Memcached提供了Ruby的API,方便 Ruby 开发者使用 Memcached。 5. C#:Memcached提供了C#的API,方便 C# 开发者使用 Memcached。 6. C/C++:Memcached提供了C/C++的API,方便 C/C++ 开发者使用 Memcached。...

    java使用memcached的实例

    在Java项目中,通常会使用Spring框架来管理Memcached的配置和集成。以下是从给定文件中摘录的配置文件`application_memcached.xml`的一个示例: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

    memcached和redis比较

    - **Memcached** 使用CAS(Compare-And-Swap)机制来确保数据的一致性,当多个客户端尝试同时更新同一项数据时,CAS可以确保只有一个客户端的更新会被成功提交,从而避免了数据冲突的问题。 - **Redis** 支持简单的...

    java使用memcached demo

    Java 使用 Memcached 演示 Memcached 是一个高性能、分布式的内存对象缓存系统,广泛应用于减轻数据库负载,提高Web应用的响应速度。在Java中,我们可以借助各种客户端库来与Memcached进行交互。本篇文章将深入探讨...

    memcached和activeMQ的JAVA示例代码

    标题"memcached和activeMQ的JAVA示例代码"表明这是一个关于使用Java编程语言实现的,针对memcached缓存系统和activeMQ消息中间件的示例项目。这通常是为了帮助开发者理解如何在实际应用中整合这两种技术。 描述中的...

Global site tag (gtag.js) - Google Analytics