2012-01-12 82 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