redis数据结构之List

Redis数据结构之List

概述

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。

List相关功能(Redis客户端命令)

1)lpush key value1 value2…:

在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。

2)linsert key before/after value newValue

在指定的元素前或者后插入元素

3)lrange key start end:

获取链表中从start到end的元素的值,start、end可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推

4)lpushx key value:

仅当参数中指定的key存在时(如果与key管理的list中没有值时,则该key是不存在的)在指定的key所关联的list的头部插入value

5)rpushx key value:

在该list的尾部添加元素

6)lpop key:

返回并弹出指定的key关联的链表中的第一个元素,即头部元素。

7)rpop key:

从尾部弹出元素。

8)rpoplpush resource destination:

将链表中的尾部元素弹出并添加到头部

9)llen key:

返回指定的key关联的链表中的元素的数量。

10)lset key index value:

设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。

11)lrem key count value:

删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。

12)linsert key before|after pivot value:

在pivot元素前或者后插入value这个元素。

List相关功能(Jedis客户端API)

Redis java 客户端jedis

java测试代码如下,(maven项目的创建与pom.xml配置,还有jedis对象的创建都在redis数据结构之String

 /**
     *List类型数据的API测试
     */
    @Test
    public void testList(){
        //在链表的头部插入元素
//        Long count = jedis.lpush("jedis-l-key-01", "zhangsan", "lisi", "wangwu", "zhaoliu");
//        System.out.println("插入的元素个数为:"+count);

        List<String> keyList = jedis.lrange("jedis-l-key-01", 0, -1);
        System.out.println("创建的链表中的元素为:");
        for(String s:keyList){
            System.out.println(s);
        }
        //在链表的中间插入新元素
//        jedis.linsert("jedis-l-key-01", BinaryClient.LIST_POSITION.BEFORE,"lisi","田七");
//        System.out.println("插入新元素之后的链表中的元素为:");
//        List<String> keyList2 = jedis.lrange("jedis-l-key-01", 0, -1);
//        for(String s:keyList2){
//            System.out.println(s);
//        }

        Long count = jedis.lrem("jedis-l-key-01", 3, "zhangsan");
        System.out.println("成功删除了:"+count+"个zhangsan");
        List<String> keyList3 = jedis.lrange("jedis-l-key-01", 0, -1);
        System.out.println("创建的链表中的元素为:");
        for(String s:keyList3){
            System.out.println(s);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值