AlcaLabs

[[docs:memcacheq_tech_test]]

Traccia: » MemCacheQ

Ti trovi qui: Alca Labs » docs » MemCacheQ

Login

Non sei ancora collegato! Inserisci il tuo nome utente e la tua password per autenticarti. E' necessario che il tuo browser abbia i cookie abilitati.

Entra

Hai dimenticato la password? Richiedine una nuova: Invia nuova password

MemCacheQ

Intro

MemCacheQ è un servizio di cache code implementato con il protocollo MemCache. Per questo motivo è facilmente utilizzabile mediante i binding memcache disponibili per vari linguaggi (tra cui Ruby).

http://memcachedb.org/memcacheq/

Pro

  • veloce
  • semplice
  • load balancing implementato nativamente
  • supporta più queue contemporanee

Contro

  • non è possibile sapere il numero di elementi presenti in coda

Da una rapida analisi dei sorgenti di memcacheq e della documentazione relativa a berkeley db (http://www.oracle.com/technology/documentation/berkeley-db/db/index.html) sembra che non sia possibile reperire la grandezza di una coda senza dover scorrere tutto il file berkeley db.

Installazione

Dipendenze

MemcacheQ dipende da libevent e libdb4.7

apt-get install libevent-dev libdb4.7-dev

La compilazione è basato sugli autotools:

./configure --enable-threads
make
make install

Avvio

L'avvio richiede i seguenti parametri tipo:

./memcacheq -d -r -H data1/memcacheq -N -v -L 1024 -B 1024 > data1/mq_error.log 2>&1

Interazione

Telnet

telnet 127.0.0.1 22201
Trying 127.0.0.1...
Connected to ubik.laptop.
Escape character is '^]'.
stats
STAT pid 8992
STAT uptime 5450
STAT time 1228401773
STAT version 0.1.1
STAT pointer_size 32
STAT rusage_user 0.080005
STAT rusage_system 0.080005
STAT curr_connections 5
STAT total_connections 8
STAT connection_structures 6
STAT get_cmds 14
STAT get_hits 5
STAT set_cmds 5
STAT set_hits 5
STAT bytes_read 329
STAT bytes_written 6880
STAT threads 4
END
stats queue
STAT q1
END
set q1 0 0 4   
1234
STORED
get q1
VALUE q1 0 4
1234
END

Ruby

rpl@ubik:~/Code/GMC/Queue/memcacheq-0.1.1$ irb -rubygems
irb(main):001:0> require 'memcache'
=> true
irb(main):002:0> queue_srv = MemCache.new "127.0.0.1:22201"
=> <MemCache: 1 servers, 1 buckets, ns: nil, ro: false>
irb(main):003:0> queue_srv["q1"] = 1234
=> 1234
irb(main):004:0> queue_srv["q1"]       
=> 1234
irb(main):005:0> queue_srv["q1"]
=> nil