04 2021 档案

摘要:6.2 参数传递 含有可变形参的函数 如果实参类型相同,可以传递一个名为initializer_list 的标准库类型 #include <initializer_list> void error_msg(initializer_list<string> il){ for ( auto beg = 阅读全文
posted @ 2021-04-24 11:07 汉森伯逸 阅读(53) 评论(0) 推荐(0)
摘要:10.1 概述 10.2 初识泛型算法 1. 只读算法 int sum = accumulate(vec.cbegin(), vec.cend(), 0); accumulate 的第三个参数的类型决定了函数中使用哪个加法运算符以及返回值的类型 算法和元素类型 string sum = accumu 阅读全文
posted @ 2021-04-24 11:05 汉森伯逸 阅读(72) 评论(0) 推荐(0)
摘要:chapter2 空间配置器 2.2 具备次配置力的SGI空间配置器 以下代码都在<stl_alloc.h>中 SGI_STL使用两级配置器: 如果申请内存>128bytes,将使用__malloc_alloc_template 如果申请内存<=128bytes, 将使用__default_allo 阅读全文
posted @ 2021-04-24 11:02 汉森伯逸 阅读(85) 评论(0) 推荐(0)
摘要:chapter3 迭代器概念与traits编程技法 3.1 迭代器设计思维——STL关键所在 利用特性萃取机traits取得迭代器底层指针指向的类型,这是C++偏特化的经典应用 // included SGI_STL <stl_iterator.h> template <class Iterator 阅读全文
posted @ 2021-04-24 11:01 汉森伯逸 阅读(96) 评论(0) 推荐(0)
摘要:chapter4 序列式容器 vector /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and 阅读全文
posted @ 2021-04-24 10:59 汉森伯逸 阅读(82) 评论(0) 推荐(0)
摘要:一个C++实现的服务器脚手架,代码整洁 https://gitee.com/hsby/Xscaffold 赶紧fork! 工程由2021年1月开始,中间准备实习面试搁置了,4月加急持续更新中 阅读全文
posted @ 2021-04-24 03:14 汉森伯逸 阅读(387) 评论(0) 推荐(0)
摘要:个人vim配置 由于插件配置复杂,这里就被我删减了,只留下一些操作上的配置,直接复制到 ~/.vimrc(没有就自己新建) JetBrains家很多IDE都支持vim插件而且很完美,一般在Windows中ideavim插件的配置文件是 C:\Users\Administrator.ideavimrc 阅读全文
posted @ 2021-04-21 00:26 汉森伯逸 阅读(282) 评论(0) 推荐(0)
摘要:手写FTP服务器-C++实现FTP服务器 链接:https://gitee.com/hsby/xftp2 阅读全文
posted @ 2021-04-20 12:33 汉森伯逸 阅读(839) 评论(1) 推荐(0)
摘要:chapter22 二进制位数组 22.4 BITCOUNT命令的实现 遍历算法 查表算法 variable-precision SWAP算法 chapter23 慢查询日志 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度 服务器 阅读全文
posted @ 2021-04-20 11:47 汉森伯逸 阅读(67) 评论(0) 推荐(0)
摘要:chapter21 排序 21.1 SORT<key> 命令的实现 // 用于保存被排序值及其权重的结构 typedef struct _redisSortObject { // 被排序键的值 robj *obj; // 权重 union { // 排序数字值时使用 double score; // 阅读全文
posted @ 2021-04-20 11:45 汉森伯逸 阅读(63) 评论(0) 推荐(0)
摘要:chapter20 Lua脚本 Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个Redis命令 20.1 创建并修改Lua环境 创建Lua环境 载入函数库 创建redis全局表格 20.2 Lua环境写作 阅读全文
posted @ 2021-04-20 11:44 汉森伯逸 阅读(84) 评论(0) 推荐(0)
摘要:chapter19 事务 Redis通过MULTI、EXEC、WATCH等命令来实现事务功能 19.1 事务的实现 事务开始 redis> MULTI ok 通过切换客户端状态的flag属性的REDIS_MULTI标识来完成 命令入队 事务队列 struct redisServer{ // 事务状态 阅读全文
posted @ 2021-04-20 11:43 汉森伯逸 阅读(59) 评论(0) 推荐(0)
摘要:chapter18 发布与订阅 客户端订阅频道。 客户端向频道发送消息, 消息被传递至各个订阅者。 匹配模式 客户端订阅模式。 客户端向频道发送消息, 消息被传递给正在订阅匹配模式的订阅者。 另一个模式被匹配的例子。 18.1 频道的订阅与退订 struct redisServer{ /* Pubs 阅读全文
posted @ 2021-04-20 11:42 汉森伯逸 阅读(67) 评论(0) 推荐(0)
摘要:17.1 节点 启动节点 Redis服务器启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式 节点会继续使用redisServer结构来保存服务器的状态,使用redisClient结构来保存客户端的状态,至于那些集群模式下才会用到的数据结构,节点将它们保存到 阅读全文
posted @ 2021-04-20 11:41 汉森伯逸 阅读(108) 评论(0) 推荐(0)
摘要:16.1 启动并初始化Sentinel 初始化服务器 Sentinel本质上只是运行在特殊模式下的Redis服务器,启动第一步就是初始化一个普通的Redis服务器 使用Sentinel专用代码 使用redis.h/REDIS_SERVERPORT常量值作为服务器端口 使用redis.h/redisC 阅读全文
posted @ 2021-04-20 11:38 汉森伯逸 阅读(93) 评论(0) 推荐(0)
摘要:15.1 旧版复制功能的实现 同步 命令传播 旧版复制功能的缺陷 15.3 新版复制功能的实现 Redis2.8开始,使用PSYNC命令替代SYNC命令来执行复制时的同步操作 PSYNC命令具有完整重同步和部分重同步两种模式: 完整重同步与SYNC执行步骤基本相同 部分重同步用于处理断线后重复制情况 阅读全文
posted @ 2021-04-20 11:35 汉森伯逸 阅读(62) 评论(0) 推荐(0)
摘要:14.1 命令请求的执行过程 读取命令请求 命令执行器(1):查找命令实现 在命令表(command table)中查找参数所指定的命令,并将找到的命令保存到客户端状态的cmd属性里面 命令执行器(2):执行预备操作 14.2 serverCron函数 更新服务器时间缓存 struct redisS 阅读全文
posted @ 2021-04-20 11:34 汉森伯逸 阅读(61) 评论(0) 推荐(0)
摘要:服务器为每个客户端建立相应的redis.h/redisClient结构,这个结构保存了客户端当前的状态信息 客户端的套接字描述符 客户端的名字 客户端的标志值 只想客户端正在使用的数据库的指针,以及该数据库的号码 客户端当前要执行的命令、命令的参数、命令参数的个数,以及指向命令实现函数的指针 客户端 阅读全文
posted @ 2021-04-20 11:31 汉森伯逸 阅读(75) 评论(0) 推荐(0)
摘要:12.1 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器:这个处理器被称为文件时间处理器: 文件时间处理器使用IO多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不用的事件处理器 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写 阅读全文
posted @ 2021-04-20 11:30 汉森伯逸 阅读(75) 评论(0) 推荐(0)
摘要:11.1 AOF持久化的实现 命令追加 当AOF持久化处于开启状态时,服务器执行完一个写命令之后,会以协议格式将被执行的写明了追加到服务器状态的aof_buf缓冲区 struct redisServers{ //... // AOF缓冲区 sds aof_buf; //... } AOF文件的写入与 阅读全文
posted @ 2021-04-20 11:29 汉森伯逸 阅读(44) 评论(0) 推荐(0)
摘要:chapter10 RDB持久化 10.1 RDB文件的创建和载入 有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服务器子进程进行RDB文件的创建 因为AOF文件的耿信频率通常比RDB文件的更新频率高,所以 如果服务 阅读全文
posted @ 2021-04-20 11:28 汉森伯逸 阅读(47) 评论(0) 推荐(0)
摘要:9.1 服务器中的数据库 Redis服务器将所有都保存在服务器状态redis.h/redisServer结构中 struct redisServer{ //... // 一个数组,保存着服务器中所有数据库 redisDb *db; //... } struct redisServer{ //... 阅读全文
posted @ 2021-04-20 11:27 汉森伯逸 阅读(56) 评论(0) 推荐(0)
摘要:8.1 对象的类型与编码 Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性、encoding属性和ptr属性 typedef struct redisObject{ // 类型 unsigned type:4; // 编码 unsign 阅读全文
posted @ 2021-04-20 11:25 汉森伯逸 阅读(45) 评论(0) 推荐(0)
摘要:恢复内容开始 2.1 SDS的定义 struct sdshdr{ // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度(不含'\0') int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[]; } 2. 阅读全文
posted @ 2021-04-20 11:24 汉森伯逸 阅读(60) 评论(0) 推荐(0)
摘要:事情是这样的,我在某个类中声明了一个静态的map成员, 文件名暂且称之为 xxx.h 然后在 xxx.cc 中全局定义了这个东西,静态成员在类里面只是声明,需要在外边被定义才有内存 然后又在main.cc中声明全局变量时间接调用了s_datas的find函数(它是个map),然后在windows上编 阅读全文
posted @ 2021-04-20 04:58 汉森伯逸 阅读(179) 评论(0) 推荐(0)