redis命令使用-jedis调用(Redis 列表list)

  |   0 评论   |   0 浏览
package com.songaw.redistest;

import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * @author songanwei
 * @description todo
 * @date 2022/3/17
 */

public class JedisListTest {
    public static void main(String[] args) {
       test1();
        //生产者消费者
        //producerConsumer();
    }

    /**
     * 连接测试
     */
    private static void test1() {
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接服务成功");
        //查看服务是否运行
        System.out.println("服务正在运行: " + jedis.ping());
        String testKey = "test_list_key";

        jedis.del(testKey);
        //lpush 将一个或多个值插入到列表头部
        for (int i = 0; i < 10; i++) {
            jedis.lpush(testKey, "test" + i);
        }

        //lrange 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。
        //偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。
        List<String> list = jedis.lrange(testKey, 0, -1);
        System.out.println("lpush " + list.size() + ", lrange" + list);

        //rpush 在列表中添加一个或多个值
        jedis.del(testKey);
        for (int i = 0; i < 10; i++) {
            jedis.rpush(testKey, "test" + i);
        }
        list = jedis.lrange(testKey, 0, -1);
        System.out.println("rpush " + list.size() + ", lrange" + list);

        //blpop 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        //如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
        list = jedis.blpop(3000, testKey);
        System.out.println("blpop " + list);

        //brpop 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        //假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
        list = jedis.brpop(3000, testKey);
        System.out.println("brpop " + list);

        //brpoplpush 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
        //假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。
        jedis.del(testKey + "1");
        String result = jedis.brpoplpush(testKey, testKey + "1", 3000);
        list = jedis.lrange(testKey + "1", 0, -1);
        System.out.println("brpoplpush " + result + ",lrange " + list);

        //移除列表的最后一个元素,返回值为移除的元素。 当列表不存在时,返回 nil 。
        result=jedis.rpop(testKey);
        System.out.println("rpop " + result + ",lrange " +jedis.lrange(testKey, 0, -1));

        //移除列表的最后一个元素,并将该元素添加到另一个列表并返回被弹出的元素。
        result=jedis.rpoplpush(testKey,testKey+"1");
        System.out.println("rpoplpush " + result + ",lrange " +jedis.lrange(testKey+"1", 0, -1));


        //lindex 通过索引获取列表中的元素
        result = jedis.lindex(testKey, 0);
        System.out.println("lindex " + result);

        //linsert 在列表的元素前或者后插入元素
        //如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。
        long resultV=jedis.linsert(testKey, BinaryClient.LIST_POSITION.AFTER,"test1","testAFTER");
        System.out.println("linsert "+resultV+" lrange"+jedis.lrange(testKey, 0, -1));
        long resultV2=jedis.linsert(testKey, BinaryClient.LIST_POSITION.BEFORE,"test1","testBEFORE");
        System.out.println("linsert "+resultV2+" lrange"+jedis.lrange(testKey, 0, -1));

        //llen 获取列表长度
        resultV=jedis.llen(testKey);
        System.out.println("llen: "+resultV);

        //lpushx  将一个值插入到已存在的列表头部,列表不存在时操作无效。
        resultV=jedis.lpushx(testKey,"testLpushx");
        System.out.println("lpushx "+resultV+" lrange"+jedis.lrange(testKey, 0, -1));
        //如果列表不存在,操作无效。
        resultV=jedis.lpushx(testKey+"2","testLpushx");
        System.out.println("lpushx "+resultV+" lrange"+jedis.lrange(testKey+"2", 0, -1));


        //rpushx 命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
        resultV=jedis.rpushx(testKey,"testRpushx");
        System.out.println("rpushx "+resultV+" lrange"+jedis.lrange(testKey, 0, -1));
        //如果列表不存在,操作无效。
        resultV=jedis.rpushx(testKey+"2","testRpushx");
        System.out.println("rpushx "+resultV+" lrange"+jedis.lrange(testKey+"2", 0, -1));

        //移除列表元素
        //COUNT 的值可以是以下几种:
        //count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
        //count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
        //count = 0 : 移除表中所有与 VALUE 相等的值。
        //被移除元素的数量。 列表不存在时返回 0 。
        resultV=jedis.lrem(testKey,1L,"testLpushx");
        System.out.println("lrem "+resultV+" lrange"+jedis.lrange(testKey, 0, -1));

        //lset 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。操作成功返回 ok ,否则返回错误信息。
        result=jedis.lset(testKey,0,"testLset");
        System.out.println("lset "+result+" lrange"+jedis.lrange(testKey, 0, -1));

        //ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。命令执行成功时,返回 ok
        //下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
        result=jedis.ltrim(testKey,1,-1);
        System.out.println("ltrim "+result+" lrange"+jedis.lrange(testKey, 0, 3));



    }

    /**
     * 测试redis 生产者消费者
     */
    private static void producerConsumer() {

        final String testKey = "test_list_key";
        new Thread(new Runnable() {
            @Override
            public void run() {
                Jedis jedis = new Jedis("localhost");
                int i = 0;
                while (true) {
                    try {
                        if(i>20){break;}
                        jedis.rpush(testKey, "test" + i);
                        i++;
                        Thread.sleep(1000);
                    } catch (Exception e) {

                    }
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                Jedis jedis = new Jedis("localhost");
                while (true){
                    List<String> list=jedis.brpop(0,testKey);
                    if(list!=null&&list.size()>1) {
                        System.out.println(list.get(1));
                    }
                }
            }
        }).start();
    }

}


标题:redis命令使用-jedis调用(Redis 列表list)
作者:不断努力的青春
地址:http://songaw.com/articles/2022/03/18/1647583692810.html