蜀沐
码龄6年
关注
提问 私信
  • 博客:36,494
    社区:406
    36,900
    总访问量
  • 127
    原创
  • 1,040,712
    排名
  • 4
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2019-03-28
博客简介:

蜀沐的博客

查看详细资料
个人成就
  • 获得7次点赞
  • 内容获得10次评论
  • 获得59次收藏
创作历程
  • 75篇
    2021年
  • 52篇
    2020年
成就勋章
TA的专栏
  • redis
    10篇
  • mysql
    1篇
  • linux
    57篇
  • leetcode
    39篇
  • 题解
    50篇
  • 18
    1篇
  • 剑指offer
    6篇
  • 237
    1篇
兴趣领域 设置
  • 数据结构与算法
    排序算法推荐算法
  • 人工智能
    聚类回归
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Redis 源码学习之快速列表 quicklist

应用Redis中是采用sdlist和ziplist来实现quicklist的,其中sdlist充当map中控器的作用,ziplist充当占用连续内存空间数组的作用。quicklist本身是一个双向无环链表,它的每一个节点都是一个ziplist。为什么这么设计呢?双向链表在插入节点上复杂度很低,但它的内存开销很大,每个节点的地址不连续,容易产生内存碎片。ziplist是存储在一段连续的内存上,存储效率高,但是它不利于修改操作,插入和删除数都很麻烦,复杂度高,而且其需要频繁的申请释放内存,特别是zipl
原创
发布博客 2021.09.13 ·
272 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis 源码学习之 字符串 t_string

字符串概述字符串是Redis中最为常见的数据存储类型,其底层实现是简单动态字符串sds,因此,该字符串类型是二进制安全的,这就意味着它可以接受任何格式的数据。另外,Redis规定,字符串类型最多可以容纳的数据长度为512M提供了检测函数,来检测字符串键的大小/* * 检查给定字符串长度 len 是否超过限制值 512 MB * * 超过返回 REDIS_ERR ,未超过返回 REDIS_OK * * T = O(1) */static int checkStringLength(clie
原创
发布博客 2021.09.11 ·
226 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis 源码学习之 对象

对象使用使用对象一个好处是:我们可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率对象系统还实现了基于引用计数技术的内存回收机制Redis 通过引用计数技术实现对象共享机制Redis 的对象带有访问时间记录信息Redis 使用对象来表示数据库中的键和值RedisObject数据结构typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsign
原创
发布博客 2021.09.10 ·
239 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis 源码学习之压缩列表

应用压缩列表(ziplist)是由 一系列特殊编码的内存块构成的列表,其是Redis的列表建和哈希键的底层实现之一ziplist可以用来存放字符串或者整数,其存储数据的特点是:比较小的整数或比较短的字符串。Redis的列表建,哈希键,有序集合的底层实现都用到了ziplist压缩列表是为了节约内存而开发的Ziplist 是为了尽可能地节约内存而设计的特殊编码双端链表Ziplist 允许在列表的两端进行 O(1) 复杂度的 push 和 pop 操作数据结构Redis的ziplist结构由三大
原创
发布博客 2021.09.10 ·
195 阅读 ·
1 点赞 ·
2 评论 ·
0 收藏

Redis源码学习之 整数集合

intset应用Redis在这种小数据量的条件下,会使用内存映射来代替内部数据结构。这就使得整数集合(intset)和压缩(ziplist)这两类节省内存的数据结构应运而生了整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现整数集合的底层实现为数组,这个数组有序、无重复的方式保存集合元素,在有需要时,程序会根据新添元素的类型,改变这个数组的类型整数集合只支持升级操作,不支持降级操作intset的数据结构如
原创
发布博客 2021.09.10 ·
109 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis 源码学习之跳跃表

跳跃表的应用跳跃表的性质;(1) 由很多层结构组成;(2)每一层都是一个有序的链表,排列顺序为由高层到底层,都至少包含两个链表节点,分别是前面的head节点和后面的nil节点;(4) 最底层的链表包含了所有的元素;(5) 如果一个元素出现在某一层的链表中,那么在该层之下的链表也全都会出现(上一层的元素是当前层的元素的子集);(6) 链表中的每个节点都包含两个指针,一个指向同一层的下一个链表节点,另一个指向下一层的同一个链表节点;跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节
原创
发布博客 2021.09.10 ·
92 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis 源码学习 之 字典dict

字典应用Redis的数据库就是使用字典作为底层实现的,对数据库的增、删、查、改都是建立在对字典的操作上。此外,字典还是Redis中哈希键的底层实现,当一个哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,Redis就会使用字典作为哈希键的底层实现Redis中的字典采用哈希表作为底层实现dict数据结构实现了一个内存哈希表, 它支持插入、删除、替换、查找和获取随机元素等操作。哈希表会自动在表的大小的二次方之间进行调整。 键的冲突通过链表来解决1、哈希表节点(dictEntry)字典
原创
发布博客 2021.09.09 ·
184 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis 源码学习之双端链表sdlist

sdlist主要作用主要用在实现列表键、事务模块保存输入命令和服务器模块,订阅模块保存多个客户端等sdlist的数据结构Redis为双端链表的每一个节点定义了如下的结构体// 链表节点定义typedef struct listNode { struct listNode *prev; // 指向前一个节点 struct listNode *next; // 指向后一个节点 void *value; // 节点值} listNode;双端链表的迭代器的定义:单向迭
原创
发布博客 2021.09.08 ·
136 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis 源码学习之动态字符串

字符串数据结构总结Redis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容sds数据结构定义Redis 专门设计了 SDS 数据结构,在字符数组的基础上,增加了字符数组长度和分配空间大小等元数据typedef char *sds;struct sds{int free; //保存未使用的长度空间int len; //保存已经分配的长度空间,不包括’\0’,}struct sdshdr{
原创
发布博客 2021.09.08 ·
113 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis源码学习之分配内存

1、redis 总体概况Redis在内存分配方面,仅仅是对系统的malloc/free做了一层简单的封装,然后加上了异常处理功能和内存统计功能。其实现主要在zmalloc.c和zmalloc.h文件中2、功能函数void *zmalloc(size_t size); // 调用zmalloc函数,申请size大小的空间void *zcalloc(size_t size); // 调用系统函数calloc申请内存空间void *zrealloc(void *ptr, size_t size); //
原创
发布博客 2021.09.08 ·
404 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

MySQL知识总结

1、一条MYSQ查询语句L的执行过程: 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。问题:有些时候 MySQL 占用内存涨得特别快?原因:MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。解决:通过执行 mysql_reset_connection 来重新初始化连接资源 查询缓存之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的 语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这
原创
发布博客 2021.09.06 ·
110 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

mysql学习.docx

发布资源 2021.09.06 ·
docx

MySQL之事务原理

1、定义;事务是访问并更新数据库各种数据的一个程序执行单元2、锁1、类型共享锁事务读操作加的锁,对某一行加锁排他锁事务删除或更新加的锁,对莫i一行加锁意向共享锁对一张表中某几行加的共享锁意向排他锁对一张表中某几行加的排他锁、3、 MVCC机制多版本并发控制:用来实现一致性的非锁定读;非锁定读是指不需要等待访问的行上排他锁(写锁)的释放,;在读已提交和刻重复读下,innodb使用MVCC;然后对于快照数据的定义不同,在读已提交的隔离级别下,对于快照数据总是读取事务
原创
发布博客 2021.07.31 ·
93 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MySQL索引

1、B-树和B+树是多路平衡搜索树,B树找到一定范围的节点采用中序遍历2、⼀个m阶B树具有如下特征根结点⾄少有两个⼦⼥每个中间节点都包含k-1个元素和k个孩⼦,其中 m/2 <= k <= m每⼀个叶⼦节点都包含k-1个元素,其中 m/2 <= k <= m; 所有的叶⼦结点都位于同⼀层每个节点中的元素从⼩到⼤排列,节点当中k-1个元素正好是k个孩⼦包含的元素的值域划分;(可以理解为k-1元素,k个指针)下图为5阶的B树3、为什么索引采用的索引结构是B=树
原创
发布博客 2021.07.31 ·
84 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构之平衡树 插入删除操作(包括代码)

1、左旋左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变2、右旋右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变#include<iostream>using namespace std;typedef struct BiTNode{ int data; int height; //高度,表示以当前结点为根的子树的高
原创
发布博客 2021.07.31 ·
248 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

手写 实现线程池

1、什么是线程池?线程池如何实现?1.如何从线程池里面拿一个线程2.如何把线程返回给线程池3.线程池里面控制线程数量1、#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#define LL_ADD(item, list) do { \ item->prev = NULL; \ item->next =
原创
发布博客 2021.07.30 ·
157 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

红黑树插入操作

1、插入#include<stdlib.h>#includde<stdio.h>typedef struct Node{ int key; int color; 0表示红,黑表示1 struct Node*lchild,*rchild;}Node;Node __NIL;#define NIL(&__NIL)__atrribute__((constructor))void init_NIL(){ NIL->key = 0; NIL->
原创
发布博客 2021.07.30 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux网络编程之epoll反应堆模型

epollAPIepoll_create(); — int epfd = epoll(10); — epfd(句柄)struct epoll_event events;events.events = EPOLLIN;events.data.fd = lfd;epoll_ctl(); — epoll(epfd, EPOLL_CTL_ADD, lfd, &events); op: EPOLL_CTL_ADD/MOD/DEL events: EPOLLIN/OUT/
原创
发布博客 2021.07.04 ·
215 阅读 ·
0 点赞 ·
2 评论 ·
1 收藏

Linux网络编程之epoll函数

1、epoll API1、 epoll_create函数函数作用创建一个epoll句柄,参数size用来告诉内核监听的文件描述符的个数,跟内存大小有关。函数原型#include <sys/epoll.h>int epoll_create(int size) size:监听数目返回值:返回一个文件描述符,这个文件描述符指向一颗平衡二叉树的树根Linux内核里面是红黑树2、epoll_ctl 函数函数作用控制某个epoll监控的文件描述符上的事件:注册、
原创
发布博客 2021.06.21 ·
321 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

Linux网络编程之poll函数

1、poll函数详解头文件#include <poll.h>函数原型int poll(struct pollfd fds, nfds_t nfds, int timeout);fds :结构体数组的首地址struct pollfd{int fd; / 文件描述符 / short events; / 监控的事件 / short revents;/ 监控事件中满足条件返回的事件 */ }; events: POLLIN(读事件)、POLLOUT(写事件
原创
发布博客 2021.06.21 ·
541 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多