mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
Initial version of an alternative Ruby client added
This commit is contained in:
parent
1350d27e59
commit
4a327b4af9
74
client-libraries/ruby_2/rubyredis.rb
Normal file
74
client-libraries/ruby_2/rubyredis.rb
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# RubyRedis is an alternative implementatin of Ruby client library written
|
||||||
|
# by Salvatore Sanfilippo.
|
||||||
|
#
|
||||||
|
# The aim of this library is to create an alternative client library that is
|
||||||
|
# much simpler and does not implement every command explicitly but uses
|
||||||
|
# method_missing instead.
|
||||||
|
|
||||||
|
require 'socket'
|
||||||
|
|
||||||
|
class RedisClient
|
||||||
|
BulkCommands = {
|
||||||
|
"set"=>true, "setnx"=>true, "rpush"=>true, "lpush"=>true, "lset"=>true,
|
||||||
|
"lrem"=>true, "sadd"=>true, "srem"=>true, "sismember"=>true,
|
||||||
|
"echo"=>true, "getset"=>true, "smove"=>true
|
||||||
|
}
|
||||||
|
|
||||||
|
def initialize(opts={})
|
||||||
|
opts = {:host => 'localhost', :port => '6379', :db => 0}.merge(opts)
|
||||||
|
@host = opts[:host]
|
||||||
|
@port = opts[:port]
|
||||||
|
@db = opts[:db]
|
||||||
|
@sock = connect_to_server
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
"Redis Client connected to #{@host}:#{@port} against DB #{@db}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def connect_to_server
|
||||||
|
TCPSocket.new(@host, @port, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(*argv)
|
||||||
|
call_command(argv)
|
||||||
|
end
|
||||||
|
|
||||||
|
def call_command(argv)
|
||||||
|
bulk = nil
|
||||||
|
argv[0] = argv[0].to_s.downcase
|
||||||
|
if BulkCommands[argv[0]]
|
||||||
|
bulk = argv[-1]
|
||||||
|
argv[-1] = bulk.length
|
||||||
|
end
|
||||||
|
@sock.write(argv.join(" ")+"\r\n")
|
||||||
|
@sock.write(bulk+"\r\n") if bulk
|
||||||
|
read_reply
|
||||||
|
end
|
||||||
|
|
||||||
|
def read_reply
|
||||||
|
line = @sock.gets
|
||||||
|
case line[0..0]
|
||||||
|
when "-"
|
||||||
|
raise line.strip
|
||||||
|
when "+"
|
||||||
|
line[1..-1].strip
|
||||||
|
when ":"
|
||||||
|
line[1..-1].to_i
|
||||||
|
when "$"
|
||||||
|
bulklen = line[1..-1].to_i
|
||||||
|
return nil if bulklen == -1
|
||||||
|
data = @sock.read(bulklen)
|
||||||
|
@sock.read(2) # CRLF
|
||||||
|
data
|
||||||
|
when "*"
|
||||||
|
objects = line[1..-1].to_i
|
||||||
|
return nil if bulklen == -1
|
||||||
|
res = []
|
||||||
|
objects.times {
|
||||||
|
res << read_reply
|
||||||
|
}
|
||||||
|
res
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user