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;
相关推荐
流星白龙4 分钟前
【Redis】1.Redis特性
数据库·redis·缓存
二宝哥13 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
ShiXZ21319 小时前
Redis docker-compose 部署指南
redis·docker·eureka
青山木1 天前
Redis 缓存一致性全解:从 Cache Aside 到延迟双删、Canal+MQ 的进阶之路
java·数据库·redis·后端·缓存
YDS8291 天前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
爬也要爬着前进2 天前
redis主从搭建
数据库·redis·缓存
用户095367515832 天前
在系统的学习 redis 前的疑惑
redis·go
吴声子夜歌2 天前
Redis 3.x——集群故障转移
java·数据库·redis·集群
明豆2 天前
Redis 分布式缓存生产实战
redis·分布式·缓存
海兰2 天前
【高速缓存】RedisVL 指南:从向量搜索到 AI 应用落地
人工智能·redis