Sha256: 7a00f07193b6c7798d9e67a53774f15e1cb10311dff52751d2c69f9de07acf70

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module Counter
  module Cache
    module Credis

      def self.included(receiver)
        receiver.extend ClassMethods
      end

      module ClassMethods

        def defind_column_getter(column)
          self.class_eval do
            define_method("get_#{column}_cache") do
              self.send(column) + RedisCli.new.get("#{self.class.table_name}/#{column}#{self.id}").to_i
            end
          end
        end

        def counter_cache_redis(options = {})
          mattr_accessor :column_delay
          delay = options[:delay] || 20
          column = options[:column] || 'views_count'
          self.column_delay = {} if self.column_delay.nil?
          self.column_delay[column] = delay
          defind_column_getter(column)
          include Counter::Cache::Credis::InstanceMethods
        end

      end

      module InstanceMethods

        # 修改值
        def update_counter(column = 'views_count')
          redis = RedisCli.new
          p redis
          views_count_redis = redis.get("#{self.class.table_name}/#{column}#{self.id}").to_i
          views_count_redis = 0 if !views_count_redis
          views_count_redis += 1
          if views_count_redis >= column_delay[column]
            # 计算出总读数
            views_count_temp = views_count_redis + (self.send(column) || 0)
            views_count_redis = 0
            self.send("#{column}=", views_count_temp)
            self.save
          end

          redis.set("#{self.class.table_name}/#{column}#{self.id}", views_count_redis)

        end
      end
    end
  end
end


ActiveRecord::Base.send :include, Counter::Cache::Credis

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
counter-cache-credis-0.0.4 lib/counter/cache/credis/counter.rb