Module: Remix::Stash::Protocol
Constant Summary collapse
- HEADER_FORMAT =
"CCnCCnNNQ"
- REQUEST =
Magic codes
0x80
- RESPONSE =
0x81
- GET =
Command codes
0x00
- SET =
0x01
- ADD =
0x02
- REPLACE =
0x03
- DELETE =
0x04
- INCREMENT =
0x05
- DECREMENT =
0x06
- QUIT =
0x07
- FLUSH =
0x08
- GET_Q =
0x09
- NO_OP =
0x0A
- VERSION =
0x0B
- GET_K =
0x0C
- GET_K_Q =
0x0D
- APPEND =
0x0E
- PREPEND =
0x0F
- STAT =
0x10
- SET_Q =
0x11
- ADD_Q =
0x12
- REPLACE_Q =
0x13
- DELETE_Q =
0x14
- INCREMENT_Q =
0x15
- DECREMENT_Q =
0x16
- QUIT_Q =
0x17
- FLUSH_Q =
0x18
- APPEND_Q =
0x19
- PREPEND_Q =
0x20
- NO_ERROR =
Response codes
0x0000
- KEY_NOT_FOUND =
0x0001
- KEY_EXISTS =
0x0002
- VALUE_TOO_LARGE =
0x0003
- INVALID_ARGUMENTS =
0x0004
- ITEM_NOT_STORED =
0x0005
- INCR_ON_NON_NUMERIC_VALUE =
0x0006
- UNKNOWN_COMMAND =
0x0081
- OUT_OF_MEMORY =
0x0082
- COUNTER_FAULT_EXPIRATION =
Extras
0xFFFFFFFF
- ADD_PACKET =
HEADER_FORMAT + 'NNa*a*'
- DECR_PACKET =
HEADER_FORMAT + 'NNQNa*'
- DELETE_PACKET =
HEADER_FORMAT + 'a*'
- FLUSH_PACKET =
HEADER_FORMAT + 'N'
- GET_PACKET =
HEADER_FORMAT + 'a*'
- GET_BODY =
4..-1
- INCR_PACKET =
HEADER_FORMAT + 'NNQNa*'
- SET_PACKET =
HEADER_FORMAT + 'NNa*a*'
Instance Method Summary collapse
- #add(io, key, data, ttl = 0) ⇒ Object
- #decr(io, key, step) ⇒ Object
- #delete(io, key, ttl = 0) ⇒ Object
- #flush(io) ⇒ Object
- #get(io, key) ⇒ Object
- #incr(io, key, step) ⇒ Object
- #set(io, key, data, ttl = 0) ⇒ Object
Instance Method Details
#add(io, key, data, ttl = 0) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/remix/stash/protocol.rb', line 54 def add(io, key, data, ttl = 0) header = [REQUEST, ADD, key.size, 8, 0, 0, data.size + key.size + 8, 0, 0, 0, ttl, key, data].pack(ADD_PACKET) io.write(header) resp = read_resp(io) resp[:status] == NO_ERROR end |
#decr(io, key, step) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/remix/stash/protocol.rb', line 62 def decr(io, key, step) low, high = split64(step) header = [REQUEST, DECREMENT, key.size, 20, 0, 0, key.size + 20, 0, 0, high, low, 0, COUNTER_FAULT_EXPIRATION, key].pack(DECR_PACKET) io.write(header) resp = read_resp(io) if resp[:status] == NO_ERROR parse_counter(resp[:body]) end end |
#delete(io, key, ttl = 0) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/remix/stash/protocol.rb', line 73 def delete(io, key, ttl = 0) header = [REQUEST, DELETE, key.size, 0, 0, 0, key.size, 0, 0, key].pack(DELETE_PACKET) io.write(header) resp = read_resp(io) resp[:status] == NO_ERROR end |
#flush(io) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/remix/stash/protocol.rb', line 81 def flush(io) header = [REQUEST, FLUSH, 0, 4, 0, 0, 4, 0, 0, 0].pack(FLUSH_PACKET) io.write(header) resp = read_resp(io) resp[:status] == NO_ERROR end |
#get(io, key) ⇒ Object
90 91 92 93 94 95 |
# File 'lib/remix/stash/protocol.rb', line 90 def get(io, key) header = [REQUEST, GET, key.size, 0, 0, 0, key.size, 0, 0, key].pack(GET_PACKET) io.write(header) resp = read_resp(io) resp[:status] == NO_ERROR ? resp[:body][GET_BODY] : nil end |
#incr(io, key, step) ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/remix/stash/protocol.rb', line 98 def incr(io, key, step) low, high = split64(step) header = [REQUEST, INCREMENT, key.size, 20, 0, 0, key.size + 20, 0, 0, high, low, 0, COUNTER_FAULT_EXPIRATION, key].pack(INCR_PACKET) io.write(header) resp = read_resp(io) if resp[:status] == NO_ERROR parse_counter(resp[:body]) end end |
#set(io, key, data, ttl = 0) ⇒ Object
109 110 111 112 113 114 |
# File 'lib/remix/stash/protocol.rb', line 109 def set(io, key, data, ttl = 0) header = [REQUEST, SET, key.size, 8, 0, 0, data.size + key.size + 8, 0, 0, 0, ttl, key, data].pack(SET_PACKET) io << header resp = read_resp(io) resp[:status] == NO_ERROR end |