redis list类型

redis的list类型是用来存储多个有序的字符串,属于线性结构一对一的关系!列表当中的每一个字符看做一个元素,一个列表中可以存储一个或者多个元素,支持存储2^32次方-1个元素,大致相当于4GB;

redis的list类型基于双端链表和压缩列表实现!
双端链表的实现由 listNode 和 list 两个数据结构构成:
其中, listNode 是双端链表的节点:

typedef struct listNode {

    // 前驱节点
    struct listNode *prev;

    // 后继节点
    struct listNode *next;

    // 值
    void *value;

} listNode;

而 list 则是双端链表本身:

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;

可以理解为上述list为逻辑结构本身,listnode是取list结构的方法!

Ziplist 是由一系列特殊编码的内存块构成的列表, 一个 ziplist 可以包含多个节点(entry);也就是当前节点保存了上一个节点与下一个节点的地址,list数据类型遍历时就是根据其保存的上下关系进行遍历!

lpush从头插入 rpush 从尾插入 取也与之相同 !
在这里插入图片描述
在这里插入图片描述
应用场景:
一是可以做消息队列 例如 think-queue 就是基于redis的list类型做消息队列的投递工作!
二是秒杀抢购功能,可以解决超卖高并发恶意请求等问题!
三是可以做不经常变化的排行榜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值