📄 16 - caching expensive results with memcached.rb
字号:
require 'rubygems'require 'memcache'class DataLayer def initialize(*cache_servers) @cache = MemCache.new(*cache_servers) end def get(key) @cache[key] ||= expensive_get(key) end alias_method :[], :get protected def expensive_get(key) # ...do expensive fetch of data for 'key' puts "Fetching expensive value for #{key}" key.to_s.reverse endend#---layer = DataLayer.new( 'localhost:11211' )3.times do puts "Data for 'foo': #{layer['foo']}"end# Fetching expensive value for foo# Data for 'foo': oof# Data for 'foo': oof# Data for 'foo': oof#---class MyDataLayer def get(key) puts "Getting value for #{key} from data layer" return key.to_s.reverse endend#---layer = MyDataLayer.new"Value for 'foo': #{layer.get('foo')}"# Getting value for foo from data layer# => "Value for 'foo': oof""Value for 'foo': #{layer.get('foo')}"# Getting value for foo from data layer# => "Value for 'foo': oof""Value for 'foo': #{layer.get('foo')}"# Getting value for foo from data layer# => "Value for 'foo': oof"#---require 'memcache'module GetSetMemcaching SERVER = 'localhost:11211' def self::extended(mod) mod.module_eval do alias_method :__uncached_get, :get remove_method :get def get(key) puts "Cached get of #{key.inspect}" get_cache()[key] ||= __uncached_get(key) end def get_cache puts "Fetching cache object for #{SERVER}" @cache ||= MemCache.new(SERVER) end end super end def self::included(mod) mod.extend(self) super endend#---# Mix in caching to the pre-existing classMyDataLayer.extend(GetSetMemcaching)"Value for 'foo': #{layer.get('foo')}"# Cached get of "foo"# Fetching cache object for localhost:11211# Getting value for foo from data layer# => "Value for 'foo': oof""Value for 'foo': #{layer.get('foo')}"# Cached get of "foo"# Fetching cache object for localhost:11211# => "Value for 'foo': oof""Value for 'foo': #{layer.get('foo')}"# Cached get of "foo"# Fetching cache object for localhost:11211# => "Value for 'foo': oof"#---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -