2012-01-12 1 views
1

Я собираюсь использовать эту клиентскую библиотеку: https://github.com/ezmobius/redis-rbRedis-гь очередь клиент

На странице GitHub, он ничего не знает о очередях не говорят. Это поведение по умолчанию? Когда я добавляю ключ/значение в красный цвет, он автоматически использует очередь datastrucutre?

Кроме того, у redis есть BLPOP и BRPOP, которые позволяют блокировать до появления нового значения в очереди. Это доступно в redis-rb? Если нет, есть ли библиотека, я могу использовать эту поддержку?

+0

Что это об очередях? –

+0

Ну, как я могу использовать очереди с redis-rb? Я не вижу, как функция pop/push в клиентской библиотеке. – 0xSina

ответ

0

Несомненно, redis-rb поддерживает все, о чем вы просите. (BLPOP/BRPOP/LPUSH/LPOP).

РЗЭ-1.8.7-2011.03: 001> REDIS.methods.sort

=> [ "==", "===", "= ~", "[]", " [] =», "идентификатор", "is_a", "метаклассом", "отправить", "`", "acts_like?", "добавить", "as_json", "Auth", «b64encode», «bgrewriteaof», «bgsave», «blank?», «blpop», «breakpoint», «brpop», «brpoplpush», «class», «class_eval», «client», «clone», config "," copy_instance_variables_from "," dbsize "," debug "," debugger "," decode64 "," decode_b "," decr "," decrby "," del "," discard "," display "," do_or_ do_not "," dup "," duplicable? "," echo "," enable_warnings "," encode64 "," enum_for "," eql? "," equal? ​​"," exec "," exists "," expects " «expire», «expireat», «extend», «flushall», «flushdb», «freeze», «frozen», «gem», «get», «getbit», «getrange», «getet», хеш "," hdel "," hexists "," hget "," hgetall "," hincrby "," hkeys "," hlen "," hmget "," hmset "," hset "," hsetnx "," html_safe? »,« hvals »,« id »,« incr »,« incrby »,« info »,« inspect »,« instance_eval »,« instance_exec »,« instance_of? »,« instance_values ​​»,« instance_variable_defined? »,« instance_variable_get » »,« instance_variable_names »,« instance_variable_set »,« instance_variables »,« is_a? »,« is_haml? »,« ivar »,« keys »,« kind_of? »,« lastsave »,« lindex »,« linsert », «llen», «load», «load_dependency», «lpop», «lpush», «lpushx», «lrange», «lrem», «lset», «ltrim», «mapped_hmget», «mapped_hmset», «mapped_mget», , "mapped_mset", "mapped_msetnx", "method", "method_exists?", "method_missing", "methods", "mget", "mocha", "mocha_inspect", "mon_enter", "mon_exit" mon_synchronize "," mon_try_enter "," monitor "," move "," mset "," msetnx "," multi "," new_cond "," noil? "," object_id "," persist "," ping "," pipelined »,« присутствия »,« настоящего »,« private_methods »,« protected_methods »,« psubscribe »,« public_methods »,« publish »,« punsubscribe »,« quit »,« randomkey »,« rename »,« renamenx », , «require», «require_association», «require_dependency», «require_library_or_gem», «require_or_load», «reset_mocha», «reply_to?», «return», «rpop», «rpoplpush», «rpush», «rpushx», «sadd», «save», «scard», «sdiff», «sdiffstore», «select», «send», «set», «setbit», «setex», «setnx», «setrange», «shutdown» «silent_stderr», «silence_stream», «silence_warnings», «singleton_class», «singleton_methods», «sinter», «sinterstore», «sismember», «slaveof», «smembers», «smove», «sort», «spop», «srandmember», «srem», «strlen», «stubba_method», «stubba_object», «заглушки», «подписаться», «подписаться», «подстроить», «суион», «sunionstore», «подавлять», «подавлять_warnings», «синхронизировать», «синхронизировать», «t «to_s», «to_match», «to_param», «to_query», «to_s», «to_squery», «to_s», «to_squery», «to_s», to_yaml "," to_yaml_properties "," to_yaml_style "," try "," try_mon_enter "," ttl "," type "," unloadable "," unub "," unsubscribe "," untaint "," unatch "," watch " , "z_pontions", "zrangebyscore", "zrank", "zrem", "zrange", "zrangebyscore", "zrange", "zrangebyscore", "zrange", "zrangebyscore", "zrange" zremrangebyrank», "zremrangebyscore", "zrevrange", "zrevrangebyscore", "zrevrank", "zscore", "zunionstore"]

0

Я использую массив, который получает закодированный и проанализированный в формате JSON:

begin 
    queue = JSON.parse(REDIS.get(:some_queue)) 
    item = queue.shift 
    REDIS.set(:some_queue,queue.to_json) 
    Do::Work.new(item) 
rescue #just in case it fails 
    queue = JSON.parse(REDIS.get(:lots_queue)) 
    queue.prepend(id) 
    REDIS.set(:lots_queue,queue.to_json) 
end 
+0

Да, вам действительно нужно проверить списки Redis и команду LPOP, чтобы вы могли сделать это безопасно и атомарно в Redis. Ваш текущий подход сразу же нарушится, если подключено более одного клиента. Redis - это нечто большее, чем простое хранилище ключей. – Martijn