�����؏�����»�ߏ�������������¡�Ruby ������\������¼\��ď����� memcached �����������Џ�������������¡��½������������ Perl ���«������¼���������½Ð���»�������������«���������������������������Ï�������µ��������������������������ď���������»����·�����������Ώ��������·�����ď�¡�\������¼\��ď�����·���¼�돢�������·��������¡񏪴���»��⏪�я�¡�ActiveRecord��¡�\���\���\·\��������ҏ��½���������¾������»����·�����������Ώ��������¹��¡򏪿½�����叢������������¡�ActiveRecord ������\������¼\��ď��������µ���¹���̏����� Perl ������������������������¹��Џ����������������������������������Ï��ޏ�������¡��½�������돪�³�돢����������������¹��Џ����������������я��������������������������«������������������¡�

�����������돢���� Ruby ������»��������������� memcached ������\������¼\��ď����� set ���·���������¹��¡�

#!/usr/bin/ruby

require 'rubygems'
require 'activerecord'
require 'memcache'

class Hoge < ActiveRecord::Base
  establish_connection(
    'adapter'  => 'mysql',
    'host'     => 'localhost',
    'database' => 'test',
    'username' => 'USER',
    'password' => 'PASS',
    'encoding' => 'utf8'
  )
  set_table_name :hoge
end

cache = MemCache::new '127.0.0.1:11211'

# ������»��⏪��
cache['hogehoge'] = 'fugafuga'    

# ActiveRecord ������¼������������·������\������¼\���
hoge = Hoge.find(1)
cache['activerecord'] = hoge

# \���\���\·\���
hash = {}
hash['hoge'] = 100
hash['fuga'] = 200
cache['foo'] = hash

��������¡��³������������ Perl ������������������¹��Џ����я����������Ώ��������¹��¡�

#!/usr/bin/perl

use strict;
use warnings;
use Cache::Memcached;
use Data::Dumper;

my $cache = Cache::Memcached->new({
    servers => ['127.0.0.1:11211']    
});

warn Dumper $cache->get('hogehoge'); # fugafuga';

warn Dumper $cache->get('activerecord'); # $VAR1 = o:      Hoge:@attributes{"      name"\\"id"1:@attributes_cache{';

warn Dumper $cache->get('foo'); # $VAR1 = {"      fugai   hogeii';

���Ï��Ï���²��ď��«�����Џ��������¹��¡�\������¼\��ď���¼��؏���¼��������������������������������������������������돢�������������������������·���������������������¹��¡�¡򏪴���»��⏪�я����������я��«���������µ���·������¼��؏���¼��������������������������������������Ï��������«��𡯏��������¹���̏�¡��³�����������������㏪�����������돫����������������¹��¡��³�����я�����\³���¼\���������������¾��⏢�·�����������Ώ��������·�����ď�¡�

#!/usr/bin/perl

use strict;
use warnings;
use Cache::Memcached;
use Data::Dumper;

my $cache = Cache::Memcached->new({
    servers => ['127.0.0.1:11211']    
});

my $hash = {
    fugafuga => 1
};
my $hogehoge = $cache->get('hogehoge');
warn Dumper $hash->{$hogehoge}; # undef

\������¼\��ď��̏��µ���·������¼��؏���¼������������������������������Ð���������������������� 'fugafuga' ���̏��µ���·������¼��؏���¼������������������������������Ð������¡�undef ��������������������������¡�1 ���̏����������������������������������돢�������¹��¡��³���������؏���������돩̏����ҏ��µ�����������ď�������������¡�Ruby ������ memcache-client ������\½���¼\¹\³���¼\���������\���\��\���\������·�����������Ώ����ď��������³��������¡񏪿��򏪿³���̏��������«���������������·�����ď�¡�

# /usr/lib/ruby/gems/1.8/gems/memcache-client-1.7.5/lib/memcache.rb �����¡돫�������
alias [] get    
      
def []=(key, value)
  set key, value
end

# set
def set(key, value, expiry = 0, raw = false)
  raise MemCacheError, "Update of readonly cache" if @readonly

  value = Marshal.dump value unless raw
  with_server(key) do |server, cache_key|
    logger.debug { "set #{key} to #{server.inspect}: #{value.to_s.size}" } if logger

    if @check_size && value.to_s.size > ONE_MB
      raise MemCacheError, "Value too large, memcached can only store 1MB of data per key"
    end

    command = "set #{cache_key} 0 #{expiry} #{value.to_s.size}#{noreply}\r\n#{value}\r\n"

    with_socket_management(server) do |socket|
      socket.write command
      break nil if @no_reply
      result = socket.gets
      raise_on_error_response! result

      if result.nil?
        server.close
        raise MemCacheError, "lost connection to #{server.host}:#{server.port}"
      end

      result
    end
  end
end

#get
def get(key, raw = false)
  with_server(key) do |server, cache_key|
    logger.debug { "get #{key} from #{server.inspect}" } if logger
    value = cache_get server, cache_key
    return nil if value.nil?
    value = Marshal.load value unless raw
    return value
  end
rescue TypeError => err
  handle_error nil, err
end


�����������돢¡�[] ������ set ������\��\���\���\��\¹���·���������������������¹���̏�¡��½������ set ������������������¡�Marshal.dump ���·������\·\���\��\���\���\��돢�·���������������������¹���� raw ���� false �������������­������¡��½���·������\������¼\��ď�����¼���������½Ð���¹���������­������������ get ���·���������¹���̏�¡��½���������������� Marshal.load ���·������\���\·\���\��\���\���\��돢�·�����������������������������Ï��������¹���� raw ���� false �������������­������¡�����������������¡�Ruby ������ set ���·�����ď��������������� Perl ������������������������¼��؏���¼������������������������½������������\·\���\��\���\���\��돢�µ������������\������¼\��ď������������������½���������������������������������̏����Џ��������­���������»�����я�¡��«��������������������������¡�Perl ������ Storable \���\���\������¼\���������»�����𡯏��Ð�����䏢�µ½Ð���������½�����Ï��������¹���̏�¡����Ï�����������½Ð���������������»�����я��������·�����ď�¡�¡򏪲��㏪����������·���¼�돢�̡돫������Ï������«���������폢�·���������������»�����я�¡�

���½���³��������¡��½���������½������\·\���\��\���\���\��돢�·�����������������������Ï��������·�����������Ώ��������¹��¡��³������������ raw ������ true �����ҏ����������Џ��·�����������²���������Ð������򏫳���������¹��¡��³�����Ï��¹���������Ð��¡񏪴���»��⏪�я�����¾���¹���������������\������¼\��ď����� set, get ���������������������������­�����������я�����¹��ԏ����Ï��³����������½Ð���������������·�����ď�¡����������� ActiveRecord ������\���\���\·\���������¾���¹���������������\������¼\��ď����� set ������\��\������¼���������������������������·���������������������¹��¡�¡�����������¡�¡��½���������ď�����������\·\���\��\���\���\��돢�������¹��������������¡�(���­��\��¾)

#!/usr/bin/ruby

require 'rubygems'
require 'activerecord'
require 'memcache'

class Hoge < ActiveRecord::Base
  establish_connection(
    'adapter'  => 'mysql',
    'host'     => 'localhost',
    'database' => 'test',
    'username' => 'USER',
    'password' => 'PASS',
    'encoding' => 'utf8'
  )
  set_table_name :hoge
end

cache = MemCache::new '127.0.0.1:11211'

cache.set('hogehoge', 'fugafuga', 0, true)

hash = {}
hash['hoge'] = 100
hash['fuga'] = 200
cache.set('foo', hash, 0, true) # \��\������¼

hoge = Hoge.find(1)
cache.set('activerecord', hoge, 0, true) # \��\������¼

���µ��������¡��³���������������Ï�����¾���¹�����������������¡񏪲��������Џ�����\������¼\���·���¼�돢����»��������Ï��³������������²���·������������­���������¹��¡�XML ������ JSON ������������������������·���¼�돢�������¹��¡�����𡯏��Ð JSON ·���¼�돢���ҏ����̏����Џ��·�����������Ώ��������·�����������Ï�¡�

���³���������������Ï����� Ruby ������ \������¼\��ď����ҏ�돫�����·��¡��½������������ JSON ·���¼�돢���������С�¹���·���������¹��¡��½������\������¼\��ď�����memcached ������ set ���·���������¹��¡��³�������������­��¡񏪤���4�돫⏢ď�� (raw) ������ true ���������·��������¡�\·\���\��\���\���\��돢����¹��ԏ����������������������������Ï��������·���������������������³�������������������돪؏��·���������������������µ��������¡����������������Ώ�����������3�돫⏢ď�ԏ����� expires ���������¹���̏�¡��³������������ 0 �����������Ώ��������·������¾���¹������������������½������\������¼\��ď���¾�����𡯏��������³�����������������������������»�����я���\������¼\��ď�����\µ���¼\Ð����µ�������돢�·�����������������������������������돢����������������»����µ������������������¡�

#!/usr/bin/ruby

require 'rubygems'
require 'activerecord'
require 'memcache'

class Hoge < ActiveRecord::Base
  establish_connection(
    'adapter'  => 'mysql',
    'host'     => 'localhost',
    'database' => 'test',
    'username' => 'USER',
    'password' => 'PASS',
    'encoding' => 'utf8'
  )
  set_table_name :hoge
end

cache = MemCache::new '127.0.0.1:11211'

hash = { 
  'key1' => 'data1', 
  'key2' => 'data2'
}
cache.set('json', hash.to_json, 0, true)


���½������������¡�Perl ������\������¼\��ď�����¼��؏���¼�����������������¡�JSON ���«������\���\���\·\��������������������С�¹���¹���������³����������½Ð���������������·�����ď�¡��³���������������Ï��������¹���������Ð�돪叢��������������������������ӏ�����������\������¼\��ď���������������¼��������������ҏ��¹���������³����������½Ð���������������¹��������¡�\¹\Ð\���\·\¹��¡�

#!/usr/bin/perl

use strict;
use warnings;
use Cache::Memcached;
use JSON;
use Data::Dumper;

my $cache = Cache::Memcached->new({
    servers => ['127.0.0.1:11211']    
});

my $json = $cache->get('json');

warn Dumper from_json($json); # $VAR1 = {
                              #     'key2' => 'data2',
                              #     'key1' => 'data1'
                              # };

³\\\\¼ҏ\\\\¼\²