Redis中List

1.介绍

  • 值在键在,值空键无
  • List实际是双向列表...

2.常用核心命令

lpush/rpush <k1><v1><v2>...<--->从左边/右边插入一个或多个值
lpop/rpop <key><--->从左边/右边吐出一个或多个值
rpoplpush <k1><k2><--->k1右边吐一个值,然后插入到k2左边
lrange <key><start><stop><--->按照索引下标获得元素(从左到右,-1为最右边)
lindex <key><index><--->按照索引下标获得元素(从左到右)
llen <key><--->获取列表长度
linsert<key>before<value><newvalue><--->在的前面插入值
lrem <key> <n><value><--->从左边删除n个value(从左到右)
lset <key><index><value><--->将列表key下标为index的值替换成value

3.底层数据结构

C 复制代码
//ziplist是Redis为了节约内存而开发的连续内存块结构,它将所有元素紧凑地存储在一块连续的内存中。
typedef struct quicklist {
    quicklistNode *head;      // 头节点
    quicklistNode *tail;      // 尾节点
    unsigned long count;      // 所有 ziplist 中的元素总数
    unsigned long len;        // quicklist 节点数量
    int fill : 16;            // 每个节点的填充因子(控制 ziplist 大小)
    unsigned int compress : 16; // 压缩深度(LZF 压缩)
} quicklist;
//quicklist是Redis3.2引入的双向链表结构,每个节点是一个ziplist。
typedef struct quicklistNode {
    struct quicklistNode *prev;   // 前驱节点
    struct quicklistNode *next;   // 后继节点
    unsigned char *zl;            // 指向 ziplist 的指针
    unsigned int sz;              // ziplist 占用的字节数
    unsigned int count : 16;      // ziplist 中的元素数量
    unsigned int encoding : 2;    // 编码方式(1=RAW, 2=LZF压缩)
    unsigned int container : 2;   // 容器类型(1=ziplist)
    unsigned int recompress : 1;  // 是否需要重新压缩
    unsigned int attempted_compress : 1; // 压缩尝试标志
    unsigned int extra : 10;      // 保留字段
} quicklistNode;
相关推荐
夕除3 小时前
Redis 过期策略
redis·笔记·面试
莫晓燚11 小时前
双机部署若依 (RuoYi‑Vue) 传统环境部署---实战
linux·运维·数据库·redis·mysql·nginx·ruoyi
夕除12 小时前
redis--resp
redis
莫晓燚12 小时前
搭建Redis 主从复制---实战
数据库·redis·缓存
IT规划师14 小时前
Redis 数据类型全解 - List:用对是队列用错是灾难(二)
redis·消息队列·.net
重生之我是Java开发战士17 小时前
【Redis】Java & JavaSpring 客户端
java·redis·bootstrap
是程序喵呀17 小时前
Redis实现持久化
数据库·redis·缓存
余槐i18 小时前
PostgreSQL 加索引后查询反而更慢:优化器弃用索引的 3 种情形
spring boot·redis·mysql·postgresql·事务
我不会起名字32218 小时前
Redis 从 0 到 1(十三):分布式锁被误删、锁不住?Go 无 Lua 实现 3 级防御
redis·go·分布式锁·watch·setnx