2012-01-12 83 views
1

我將使用這個客戶端庫:https://github.com/ezmobius/redis-rbRedis的-RB客戶隊列

在GitHub的頁面,它沒有說關於什麼隊列。這是默認情況下的行爲嗎?當我將一個鍵/值添加到紅色時,它是否會自動使用隊列數據結構?

此外,redis具有此BLPOP和BRPOP,它們允許您阻塞,直到隊列中出現新值。這在redis-rb中可用嗎?如果沒有,有沒有圖書館我可以使用那種支持?

+0

是什麼樣的隊列? – 2012-01-12 06:05:42

+0

那麼,如何使用redis-rb隊列呢?我沒有看到客戶端庫中的彈出/推送功能 – 0xSina 2012-01-12 06:06:40

回答

0

當然,redis-rb支持你所要求的全部功能。 (BLPOP/BRPOP/LPUSH/LPOP)。

REE-1.8.7-2011.03:001> REDIS.methods.sort

=> [ 「==」, 「===」, 「=〜」, 「[]」,「 [] =」, 「ID」, 「is_a」, 「元類」, 「發送」, 「`」, 「acts_like?」, 「追加」, 「as_json」, 「AUTH」, 「b64encode」,「bgrewriteaof」,「bgsave」,「空白」,「blpop」,「斷點」,「brpop」,「brpoplpush」,「class」,「class_eval」,「client」,「clone」配置「,」copy_instance_variables_from「,」dbsize「,」調試「,」調試器「,」decode64「,」decode_b「,」decr「,」decrby「,」del「,」丟棄「,」顯示「,」 do_not「,」dup「,」可複製?「,」echo「,」enable_warnings「,」encode64「,」enum_for「,」eql?「,」相等?「,」exec「,」存在「,」期望「 「expire」,「expireat」,「extend」,「flushall」,「flushdb」,「freeze」,「freeze」,「gem」,「get」,「getbit」,「getrange」,「getset」 hash「,」hdel「,」hexists「,」hget「,」hgetall「,」hincrby「,」hkeys「,」hlen「,」hmget「,」hmset「,」hset「,」hsetnx「 「instance」,「instance_values」,「instance_variable_defined?」,「instance_variable_get」,「hvals」,「id」,「incr」,「incrby」 「,」instance_variable_names「,」instance_variable_set「,」instance_variables「,」is_a?「,」is_haml?「,」ivar「,」keys「,」kind_of?「,」lastsave「,」lindex「 llen「,」load「,」load_dependency「,」lpop「,」lpush「,」lpushx「,」lrange「,」lrem「,」lset「,」ltrim「,」mapped_hmget「,」mapped_hmset「 ,「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「,」nil?「,」object_id「,」persist「,」ping「 「,」存在「,」存在「,」私有方法「,」保護方法「,」psubscribe「,」public_methods「,」發佈「,」取消訂閱「,」退出「,」隨機密鑰「,」重命名「 ,require,require_lpendency,require_library_or_gem,require_or_load,reset_mocha,respond_to, 「sadd」,「save」,「scard」,「sdiff」,「sdiffstore」,「select」,「send」,「set」,「setbit」,「setex」,「setnx」,「setrange」 「,」silence_stderr「,」silence_stream「,」silence_warnings「,」singleton_class「,」singleton_methods「,」sinter「,」sinterstore「,」sismember「,」slaveof「,」smembers「,」smove「 「spop」,「srandmember」,「srem」,「strlen」,「stubba_method」,「stubba_object」,「stubs」,「subscribe」,「subscribe」,「substr」,「sunion」,「sunionstore」抑制「,」抑制警報「,」同步「,」同步「,」t aguri「,」taguri =「,」taint「,」tainted?「,」tap「,」to_a「,to_enum,to_json,to_matcher,to_param,to_query,to_s, to_yaml「,」to_yaml_properties「,」to_yaml_style「,」try「,」try_mon_enter「,」ttl「,」type「,」unloadable「,」unstub「,」unsubscribe「,」untaint「,」unwatch「 ,「with_options」,「with_warnings」,「without_reconnect」,「zadd」,「zcard」,「zcount」,「zincrby」,「zinterstore」,「zrange」,「zrangebyscore」,「zrank」,「zrem」 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 2013-03-21 07:20:40