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;
相关推荐
Rain的Java大神之路9 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog10 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog10 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
行百里er19 小时前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
福大大架构师每日一题19 小时前
redis 8.10.2发布:安全修复集中落地,事务 ACL、集群总线与模块稳定性全面加固
redis
Pioneer0000120 小时前
我用 Redis + 网关做多模型 API 路由:缓存命中率 95%+ 的工程实践
人工智能·redis·后端·缓存·性能优化·架构
Hui Baby21 小时前
Redis Streams 发布订阅
redis
hweiyu001 天前
Redis命令:MSETNX
redis·缓存
浅念-2 天前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
张某布响丸辣2 天前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵