jedis中的blpop

来源:互联网 发布:php格式文件怎么打开 编辑:程序博客网 时间:2024/06/03 15:47

使用jedis时,发先有blpop这个方法,但是一直不知道这个方法的用处的用处,从api中查看,是弹出,不是很理解。


<p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;"><strong>非阻塞行为</strong></p><p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;">当 <a target=_blank class="reference internal" href="http://redisdoc.com/list/blpop.html#blpop" style="color: rgb(197, 47, 36); text-decoration: none;">BLPOP</a> 被调用时,如果给定 <code class="docutils literal">key</code> 内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字一起,组成结果返回给调用者。</p><p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;">当存在多个给定 <code class="docutils literal">key</code> 时, <a target=_blank class="reference internal" href="http://redisdoc.com/list/blpop.html#blpop" style="color: rgb(197, 47, 36); text-decoration: none;">BLPOP</a> 按给定 <code class="docutils literal">key</code> 参数排列的先后顺序,依次检查各个列表。</p><p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;">假设现在有 <code class="docutils literal">job</code> 、 <code class="docutils literal">command</code> 和 <code class="docutils literal">request</code> 三个列表,其中 <code class="docutils literal">job</code> 不存在, <code class="docutils literal">command</code> 和 <code class="docutils literal">request</code> 都持有非空列表。考虑以下命令:</p><p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;"><code class="docutils literal"><span class="pre">BLPOP</span> <span class="pre">job</span> <span class="pre">command</span> <span class="pre">request</span> <span class="pre">0</span></code></p><p style="line-height: 1.5em; color: rgb(62, 67, 73); font-family: sans-serif; font-size: 16px;"><a target=_blank class="reference internal" href="http://redisdoc.com/list/blpop.html#blpop" style="color: rgb(197, 47, 36); text-decoration: none;">BLPOP</a> 保证返回的元素来自 <code class="docutils literal">command</code> ,因为它是按”查找 <code class="docutils literal">job</code> -> 查找 <code class="docutils literal">command</code> -> 查找 <code class="docutils literal">request</code> “这样的顺序,第一个找到的非空列表。</p>
一、测试执行结果。


@Test
public void test5() {
Jedis jedis = new Jedis("10.10.4.40");
System.out.println(jedis.blpop(0, "list1"));
}

输出结果:

[list1, 9]

第一个是我的key 第二个是我最后插入的一条数据。


二、测试超时时间

@Test

public void run() {
Jedis jedis = new Jedis("10.10.4.40");
System.out.println(jedis.blpop(1000, "list1"));
}

超时等待1000毫秒,如果超过1000毫秒没有查询到数据,断开连接。


三、长连接(使用main方法)

public static void main(String[] args) {
Jedis jedis = new Jedis("10.10.4.40");
System.out.println(jedis.blpop(0, "list1"));
}

启动之后,如果list1中没有数据,会一直处于执行状态中,知道list1中写入一条数据才会获取到这个数据,并执行完成。







0 0