自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无痕之意的博客

路漫漫其修远兮,吾将上下而求索!

  • 博客(136)
  • 资源 (2)
  • 收藏
  • 关注

原创 Go语言 Interface(接口)

Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。一个类型可以实现多个接口,一个接口也可以被多个类型实现。

2024-04-26 10:14:35 426

原创 Go语言 Channel

Channel 是 Go 中的一个核心类型,可以把它看成一个管道。利用通道我们可以在多个 goroutine 之间传递数据。如果说 Goroutine 是 Go 程序并发的执行体,Channel 就是它们之间的连接。Channel 是可以让一个 Goroutine 发送特定值到另一个 Goroutine 的通信机制。Channel 像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。

2024-04-25 20:04:39 888

原创 Go语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。Age int。

2024-04-25 14:50:01 231

原创 Go语言 Map

Map 是一种无序的键值对的集合。

2024-04-24 14:39:31 360

原创 Go语言切片

Go 语言切片是对数组的抽象,是一种长度可变的动态数组。

2024-04-23 20:20:03 527

原创 2022,程序员应该如何找工作

2022年,程序员应该如何找工作呢,这里我就简单总结下我近期找工作的一个心得。

2022-07-31 21:28:42 2482 1

原创 2022年 PHP面试问题记录

2022年 PHP面试问题记录,希望可以帮助到大家。

2022-07-31 16:08:09 1816

原创 Redis源码学习(33),命令执行过程

本节主要是学习 redis 的命令如何执行的。

2022-07-23 13:48:04 634

原创 Redis源码学习(32),字典学习,dict.c(二)

本节主要学习 dictReplace、dictGenericDelete、dictFind

2022-07-17 11:58:12 456

原创 Redis源码学习(31),字典学习,dict.c(一)

本节主要学习字典是如何初始化和添加哈希节点的,主要方法是dictAdd、dictCreate

2022-07-02 13:51:48 460

原创 Redis源码学习(30),字典学习,dict.h

本次学习内容主要是 Redis 源码中的 dict.h 文件,学习字典的相关结构体定义,更清楚了解字典的底层实现。

2022-07-02 11:16:55 502

原创 Redis源码学习(29),压缩列表学习,ziplist.c(二)

本节主要学习 Redis 源码中的 Ziplist 的 节点遍历的几个方法,包含了 ziplistIndex、ziplistNext、ziplistPrev

2022-06-25 19:26:47 530

原创 Redis源码学习(28),压缩列表学习,ziplist.c(一)

  经过我们的不懈努力终于把SDS和双端链表搞定之后,现在要进入压缩列表数据结构的学习,ziplist是列表、hash、有序集合的数据结构之一。  压缩列表听名字是经过压缩的一种列表,是用提高内存使用率的一种数据结构,下面我们就来看看它究竟是什么样的数据结构。1 介绍1.1 ziplist  虽然网上有很多关于Redis中ziplist介绍,不过我们最好还是阅读作者的说明更加准确点。/* The ziplist is a specially encoded dually linked list t

2022-05-15 17:28:40 598

原创 Redis源码学习(27),双端链表在列表中的应用

  前几天我们学习了双端链表的源代码,想必大家已经清楚了不少有关链表的操作,这个时候再回想一下之前我们学习的数据结构列表的代码,我们知道双端链表是实现列表的数据结构之一,所以源代码里有很多关于链表的操作,今天我们就来回顾下列表的源代码,并探索下双端链表在列表的中的应用,通过这次发现我们能对列表的源代码学习就更加深入了。  今天我们要学习的源代码涉了好几个文件,不过都是我们之前阅读过的,分别是t_list.c、adlist.h、adlist.c。1 listCreate  listCreate 是双端链

2022-05-14 15:59:22 269

原创 Redis源码学习(26),双端链表学习,adlist.c(一)

1 listCreate1.1 方法说明  创建一个双端链表。1.2 方法源代码 list *listCreate(void) { struct list *list; if ((list = zmalloc(sizeof(*list))) == NULL) return NULL; list->head = list->tail = NULL; list->len = 0; list->dup = N

2022-05-13 17:46:25 490

原创 Redis源码学习(25),双端链表学习,adlist.h

前言  学习完SDS之后,我们了解了Redis字符串的底层数据结构,对Redis在提升性能的一些处理上有了一些简单的了解,这是一个非常不错的开始,但这还是冰山一角,我们还有很多知识我们需要去学习。  相信学习完SDS之后,大家和我一样应该有了不少信心,数据结构也不是那么难对吧,接下来我们要学习的是双端链表,它是实现列表的底层数据结构之一,只要我们弄清楚双端链表再回过头去温习下之前我们学习过的列表的一些方法,想必就能更加清楚了。  Redis将双端链表的代码放在了adlist.h和adlist.c两个文

2022-05-13 16:21:31 381

原创 Redis源码学习(24),sds学习总结

1 学习回顾Redis源码学习(21),sds学习,sds.hRedis源码学习(22),sds学习,sds.c(一)Redis源码学习(23),sds学习,sds.c(二)2 学习概括2.1 SDStypedef char *sds;struct sdshdr { unsigned int len; unsigned int free; char buf[];};SDS 是动态字符串(Simple Dynamic String,SDS)的简称。SDS 包含

2022-05-13 14:27:24 446

原创 Redis源码学习(23),sds学习,sds.c(二)

1 sdsMakeRoomFor1.1 方法说明  扩容方法,扩大sds字符串末尾的空闲空间1.2 方法源代码/* Enlarge the free space at the end of the sds string so that the caller 1. is sure that after calling this function can overwrite up to addlen 2. bytes after the end of the string, plus one mor

2022-05-13 12:10:54 433

原创 Redis源码学习(22),sds学习,sds.c(一)

1 sdsnewlen1.1 方法说明  这个方法主要创建一个新的sds字符串。1.2 方法源代码/* Create a new sds string with the content specified by the 'init' pointer 1. and 'initlen'. 2. If NULL is used for 'init' the string is initialized with zero bytes. 3. 4. The string is always null-

2022-05-05 22:03:17 388

原创 Redis源码学习(21),sds学习,sds.h

前言  前面学习了五种数据类型的源代码,今天开始学习他们对应的数据结构源代码,首先出场的是实现字符串的数据结构,简单动态字符串(Simple Dynamic String,SDS),如果大家是第一次听到这个东西应该会有点懵,不过不要紧我会尽量用简单的方式来介绍它。  这里要重新强调一下,本次源码学习针对的是Redis源码3.0版本,因为不同版本代码是不一样的,免得大家到时看半天发现自己的阅读的代码和我讲不一样。1 SDS是什么  SDS 是动态字符串的缩写,是Redis专门设计的一种字符串结构,为了

2022-05-05 20:30:04 1208

原创 Redis源码学习(20),学习感悟

  最近学习Redis源码也有半个月的时间了,有不少收获也有不少感悟,今天来好好聊聊我学习的感悟。1 发现问题  人非圣贤孰能无过,只要是人难免会犯错,回顾我之前的学习历程,其实是可以发现不少的问题,大概有学习方式混乱、流于形式、忘记、不深入、精神面貌欠佳、敷衍了事、收获不足、不够求真、无趣。学习方式混乱学习动力不足  下面具体分析下这些问题,看下这些问题究竟是什么,为什么会产生这些问题,那又怎么解决这些问题。2 学习方式混乱2.1 缺少方向感  Redis的代码非常多,从哪里学,怎么学

2022-05-03 16:18:47 1424

原创 Redis源码学习(19),数据类型源代码,学习总结

  经过将近半个月的学习,终于将五种数据类型的源代码都学习了一遍,虽然不是全部阅读,但是大部分的代码都已经学习到了,趁五一假期好好整理和总结一下近期我们学习的内容。1 数据类型介绍  在Redis中有五种数据类型,分别是字符串、列表、集合、有序集合、哈希,在源代码 redis.h 头文件中,有对应他们的常量定义,每次判断对象类型的时候会使用到这几个常量。/* Object types */#define REDIS_STRING 0#define REDIS_LIST 1#define REDI

2022-05-02 20:03:33 1577

原创 Redis源码学习(18),t_zset.c 学习(三),学习总结

1 方法列表zskiplistNode *zslCreateNode(int level, double score, robj *obj)zskiplist *zslCreate(void)void zslFreeNode(zskiplistNode *node)void zslFree(zskiplist *zsl)int zslRandomLevel(void)zskiplistNode *zslInsert(zskiplist *zsl, double score, robj

2022-05-01 14:33:30 1316

原创 Redis源码学习(17),t_zset.c 学习(二),zrem、zrange 命令学习

1 zremCommand1.1 方法说明  从有序集合中移出一些成员,成功返回移出成员的数量。1.2 命令实践1.3 方法源代码void zremCommand(redisClient *c) { //获取键值 robj *key = c->argv[1]; robj *zobj; int deleted = 0, keyremoved = 0, j; //获取有序集合对象,并判断对象类型 if ((zobj = lookupKeyWriteOr

2022-05-01 13:49:09 718

原创 Redis源码学习(16),t_zset.c 学习(一),zadd 命令学习

  学习完 t_string.c、t_list.c、t_hash.c、t_set.c 源代码之后,终于来到了五种数据类型最后的环节有序集合,对应的源代码是 t_zset.c,,我估略看了下这个文件的代码,不仅代码量比之前的几个文件多,而且复杂程度也比之前高,不过我们一路走过来相当不容易,马上就到成功的终点,不能在这最后一步就退缩了,兄弟们加油,一鼓作气冲过去。1 前言1.1 原文注释  这回不同以往直接上来就看代码,先看一段作者的注释说明,在 t_zset.c中作者的注释是比较多的,可见晦涩程度比较高

2022-04-30 16:15:47 1788

原创 Redis源码学习(15),t_set.c 学习(三),学习总结

1 方法列表robj *setTypeCreate(robj *value)int setTypeAdd(robj *subject, robj *value)int setTypeRemove(robj *setobj, robj *value)int setTypeIsMember(robj *subject, robj *value) setTypeIterator *setTypeInitIterator(robj *subject)void setTypeReleaseIte

2022-04-30 13:46:56 587

原创 Redis源码学习(14),t_set.c 学习(二),sismember,scard,spop 命令学习

1 sismemberCommand1.1 方法说明  判断一个值是否属于集合的成员,成功返回1,失败返回0。1.2 命令实践1.3 方法源代码void sismemberCommand(redisClient *c) { robj *set; //获取集合键对象 if ((set = lookupKeyReadOrReply(c,c->argv[1],shared.czero)) == NULL || checkType(c,set,REDIS_SET)

2022-04-29 11:45:33 738

原创 Redis源码学习(13),t_set.c 学习(一),sadd,srem 命令学习

  学习完 t_string.c、t_list.c、t_hash.c文件后,现在开始学习 t_set.c 的代码,从文件名可以看到是相关集合相关命令的代码文件。总共5种数据结构,我们已经学习到第4个了,离成功不远了,再加一把劲加油。1 saddCommand1.1 方法说明  向一个集合中添加元素。1.2 命令实践  添加成功返回添加元素的个数。1.3 命令源代码void saddCommand(redisClient *c) { robj *set; int j, add

2022-04-28 22:24:53 1255

原创 Redis源码学习(12),t_hash.c 学习(三),学习总结

1 方法列表void hashTypeTryConversion(robj *o, robj **argv, int start, int end)void hashTypeTryObjectEncoding(robj *subject, robj **o1, robj **o2)int hashTypeGetFromZiplist(robj *o, robj *field, unsigned char **vstr,

2022-04-27 15:01:43 145

原创 Redis源码学习(11),t_hash.c 学习(二),hget 相关命令学习

1 hgetCommand1.1 方法说明  获取hash键的键值1.2 命令实践1.3 方法源代码void hgetCommand(redisClient *c) { robj *o; if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.nullbulk)) == NULL || checkType(c,o,REDIS_HASH)) return; addHashFieldToReply(c, o

2022-04-27 13:01:24 451

原创 Redis源码学习(10),t_hash.c 学习(一),hset、hmset 命令学习

   学习完 t_string.c、t_list.c文件后,现在开始学习 t_hash.c 的代码,从文件名可以看到是相关hash的相关命令代码。1 hsetCommand1.1 方法说明   对一个hash键,设置一个键值对。1.2 命令实践新增成功返回1,修改返回01.3 方法源代码void hsetCommand(redisClient *c) { int update; robj *o; //获取键对象,如果不存在就创建一个 if ((o = hashTyp

2022-04-26 17:33:03 1710

原创 Redis源码学习(9),t_list.c 学习(四),学习总结

  时间过的真快呀,一眨眼又过去了好几天,这几天我们学习了t_list.c文件不少方法,趁今天来总结一番。1 方法列表  先看一下这个文件都有哪些方法/*----------------------------------------------------------------------------- * List API *----------------------------------------------------------------------------*/void

2022-04-25 21:02:34 1603

原创 Redis源码学习(8),t_list.c 学习(三),llen、lindex、lrange 命令实现学习

1 llenCommand1.1 方法说明  获取一个列表元素的个数1.2 命令实践1.3 方法源代码void llenCommand(redisClient *c) { robj *o = lookupKeyReadOrReply(c,c->argv[1],shared.czero); if (o == NULL || checkType(c,o,REDIS_LIST)) return; addReplyLongLong(c,listTypeLength(o));

2022-04-25 17:15:41 1108

原创 Redis源码学习(7),t_list.c 学习(二),rpop、lpop命令实现学习

1 popGenericCommand1.1 方法说明  这是一个lpop、rpop命令的基础方法,两个命令都会调用这个方法。1.2 方法源代码void popGenericCommand(redisClient *c, int where) { //获取列表键对象 robj *o = lookupKeyWriteOrReply(c,c->argv[1],shared.nullbulk); //检查对象 if (o == NULL || checkType(c,o,RE

2022-04-21 17:38:28 2360

原创 Redis源码学习(6),t_list.c 学习(一),rpush、lpush命令实现学习

前言  大体学习完t_string.c的代码,我们正式进入下一个文件的学习,这一次我们学习的是t_list.c文件,从文件名我们可以知道这是一个关于列表的相关命令的源代码。  在学习列表命令之前,这里要介绍一下,在Redis中列表的底层数据结构由压缩表和链表实现,所以在今天的学习中会发现大量的底层数据结构判断,根据不同的数据结构使用不同的方法。不过这里要注意的是,这里是基于3.0版本的源代码,3.2版本之后发生了变化,3.2版本之后使用了快速表来实现。1 pushGenericCommand1.1

2022-04-21 15:29:25 1716

原创 Redis源码学习(5),t_string.c 学习(四),学习总结

  经过几天的学习,我们差不多把t_string.c这个文件的一些方法都学习了一遍,也有了不少的收获,我们今天简单的总结一下我们究竟学到了哪些东西或者了解了哪些东西。1 方法列表我们先回顾下这个文件的方法列表//set相关方法void setGenericCommand(redisClient *c, int flags, robj *key, robj *val, robj *expire, int unit, robj *ok_reply, robj *abort_reply) voi

2022-04-20 22:03:02 602

原创 Redis源码学习(4),t_string.c 学习(三),incr、decr相关命令实现学习

  学习完两个常用命令get和set命令,再来看下另外几个命令incr、decr、incrby、decrby的代码实现。1 incrDecrCommand1.1 方法说明  这个方法是incr、decr、incrby、decrby等命令的基础方法。1.2 方法源代码void incrDecrCommand(redisClient *c, long long incr) { long long value, oldvalue; robj *o, *new; o = look

2022-04-16 14:58:28 1127

原创 Redis源码学习(3),t_string.c 学习(二),get命令实现学习

  昨天我们学习了t_string.c代码文件中 get 的相关方法,相信大家已经熟悉不了少 redis 代码的风格和结构,所以今天趁热打铁继续学习剩下的一些方法,由于方法还是比较多的,我们就先学习主要并且我们常用的一个命令 get ,刚好和昨天 set 相对应起来。1 getGenericCommand1.1 方法说明  这是get方法的一个通用方法,get命令通过调用这个方法来获取值1.2 命令源代码int getGenericCommand(redisClient *c) { rob

2022-04-15 12:23:06 790

原创 Redis源码学习(2),t_string.c 学习(一),Set命令实现学习

  现在进入Redis源码的学习,首先我们先学习最简单的字符串文件,文件名是t_string.c,该文件在src目录下面,这个文件里面实现了set和get相关一系列命令的方法,今天着重来分析set命令的实现。

2022-04-14 17:29:10 1077

原创 Redis源码学习(1)为什么要学习源码呢?

想学习Redis源码的伙伴,可以一起互相学习

2022-04-14 12:12:57 1515

Redis 源码压缩包 3.0

Redis 源码压缩包 3.0

2022-04-14

Redis 3.2.0 源码

Redis 3.2.0 源码 想学习的小伙伴,可以下载。

2022-04-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除