IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Redis-学习之-数据结构-List -> 正文阅读

[数据结构与算法]Redis-学习之-数据结构-List

Redis-学习之-数据结构-List

首先我们学习一下List的一些命令
头插入、 获取

lpush key val1 val2
lpop key

尾插入 、 获取

rpush key val1 val2
rpop key

--------等等其它一下命令自行查博客-----
接下来我们学习一下底层实现

redis 的列表(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;

listNode 代码结构:

typedef struct listNode {
    // 
前置节点
    struct listNode * prev;
    // 
后置节点
    struct listNode * next;
    // 
节点的值
    **void** * value;
}listNode;

接下来,我们对list进行一个讲解
比如我们

lpush list  1 2 "3 " 

这个时候key就是list, list的值就是 1,2,3三个完整的值
那么是怎么存储的呢?
list 就是代表了我们的 typedef struct list 这个结构体 ,
1,2,3这三个数据就是通过三个 listNode 存储关联;
总结:
list 这个东西,就是列表(源码是 list:listNode的关系); (他的底层是现是链表,源码是 listNode: pre、next、val)

listNode 就是底层实现的 链表节点
那么问题来了listNode到底存了我们什么值呢?
prenext 这两个就不用说了就是我们node的 基本属性,存前、后节点

listNode 中的value 到底是存什么值呢?
value 其实存我们 1 ,2,3 的sds对象 的值 ;
简单说就是 list 的三个值 其实就是一个字符串,字符串呢就会存到sds中,之前我们学习字符串建构的时候有说明,sds有几个属性len,free,arr[] 比如我们的 1 对应sds中 就是 len=1 free=1 arr=[‘1’,/0];

我们list 的key也是字符串,那么说我们的key也是存在 sds中,并且是放在
typedef struct list 中的val 中

最后我们来说一下 void 在这里表示啥呢?
void ,在redis中是一种多态,因为呢,list中可以是 数字,字符,字符串。。。

总结一下、list数据结构在我们工作中用途:

  1. 消息队列: 使用lpush插入 ,BRpop 进行尾消费,可以当做消息队列
  2. 可以进行分页: 使用 LRANGE key start stop ,进行分页查询
  3. 进行数据排行榜展示,定时对list中数据进行排序后,查询出前10条
    LRANGE list 0 9
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:25:10  更:2022-10-31 12:28:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:21:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码