【Redis】数据类型——list

一、操作

1.启动redis服务器

 ./redis-server redis.conf

2.启动Redis的客户端

./redis-cli -p 6379

3.lpush rpush lrange操作:从左边,右边设置值和获取值

lpush k1 v1
lpush k1 v0
rpush k1 v2
lrange k1 0 -1

格式: lpush key value rpush key value
lrange key start stop
在这里插入图片描述
4.lpop rpop:从列表的左边或者右边移除值
格式: lpop key rpop key

lpop k1 
rpop k2

在这里插入图片描述
在这里插入图片描述
5.lindex:获取指定下标的值
格式: lindex key index

lindex k1 0

在这里插入图片描述
6.llen:获取列表中的元素个数
格式: llen key

llen k1

在这里插入图片描述
7.lrem:移除列表中的元素
格式:lrem key count value

lrem k1 v0

在这里插入图片描述
8.ltrim:截取列表的值
格式:ltrim key start stop

ltrim k1 1 2

在这里插入图片描述
9.rpoplpush:移除列表中最后一个元素,将它添加到另一个列表中
格式: rpoplpush key1 key2

rpoplpush k1 k2

在这里插入图片描述
10.linsert:在列表中插入值
格式: linsert key before|after value new_value

linsert k1 before v2 a
linsert k1 after v2 b

在这里插入图片描述
在这里插入图片描述
11.lset:根据下标替换列表中的值
格式: lset key index value

lset k1 2 c

在这里插入图片描述
12.小结:
(1)他实际上是一个链表,before or after, left,right都可以插入值
(2)如果key不存在,创建新的链表
(3)如果key存在,新增内容
(4)如果移除了所有的值,空链表,也代表不存在
(5)在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点
(6)在Redis中,我们可以把list完成栈、队列、阻塞队列
(7)队列: LPOP RPUSH
(8)栈: LPOP LPUSH

二、底层原理

Redis的list使用的是链表数据结构进行数据存储,这就意味着list 的插入、删除操作非常快,为O(1) 复杂度的操作。而查找操作则十分的缓慢,为O(n)。但实际上,Redis的list并不简单使用链表实现,在list元素较少的时候,使用的是一种连续内存空间的数据结构ziplist(压缩列表)进行存储。这样做的好处是防止过多的不连续的内存碎片产生,同时也避免了过多的链表前趋、后继指针占用过多的内存空间。
1.定义

typedef struct listNode
{
    //前置节点
    struct listNode *prev;
    //后置节点
    struct listNode *next;
    //节点的值
    void *value;
}listNode;
 
typedef struct list
{
    //表头节点
    listNode.head;
    //表尾节点
    listNode.tail;
    //链表所包含的节点数量
    unsigned long len;
    //节点值复制函数
    void *(*dup)(void *ptr);
    //节点值释放函数
    void *(*free)(void *ptr);
    //节点值对比函数
    int (*match)(void *ptr,void *key);
} list;

2.优点:
(1)带链表长度计数器:通过 len 属性获取链表长度的时间复杂度为 O(1)。
(2)双向:链表具有前置节点和后置节点的引用,获取这两个节点时间复杂度都为O(1)。
(3)链表节点使用 void* 指针来保存节点值,可以保存各种不同类型的值。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值