22 二进制数组
Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个命令用于处理二进制位数组。 SETBIT,为位数组指定偏移量上的二进制位设置值0或1。 GETBIT,获取位数组指定偏移量上的二进制位的值。 BITCOUNT,统计位数组中1的个数。 BITOP,既可以对多个位数组进行按位与、按位或、按位异或运算,也可以对给定位数组取反。 22.1 位数组的表示Redis使用字符串来表示位数组,并使用SDS结构的操作函数来处理位数组。 redisObject.type的值为REDIS_STRING,表示字符串对象。 sdshdr.len值为1,表示这个SDS保存了一个一字节长的位数组。 buf数组的buf[0]字节保存了一个一字节长的位数组。 buf数组的buf[1]字节保存了SDS程序自动追加到值的末尾的’\0’。 22.2 GETBIT命令的实现 GETBIT 用于返回位数组bitarray在offset偏移量上的二进制位的值: 计算 byte = (offset / 8),byte记录了offset偏移量指定的二进制保存在位数组的哪个字节。 计算 ...
23 慢查询日志
Redis的慢查询日志,用于记录执行时间超过给定时长的命令请求,用户可以通过这个日志来监视和优化查询速度。 服务器有两个选项和慢查询有关: slowlog-log-slower-than,指定执行时间超过多少微妙的命令请求会被记录到日志上。 slowlog-max-len,指定服务器上最多保存多少条慢查询日志。数量超过,则先入先出。 SLOWLOG GET可以查看服务器保存的慢查询日志。 23.1 慢查询日志的保存123456789101112131415161718192021222324252627struct redisServer { // 下一条日志的ID long long slowlog_entry_id; // 保存了所有日志的链表 lisg *slowlog; long long slowlog_log_slower_than; unsigned long slowlog_max_len;};// slowlog链表保存了所有慢查询日志,每个节点都保存了一个slowlogEntry结构,代表一条日志...
24 监视器
通过执行MONITOR命令,客户端可以将自己变成一个监视器,实时接收并打印出服务器正在处理的命令请求的相关信息。 24.1 成为监视器123456789def MONITOR(): # 打开客户端的监视器标识 client.flags != REDIS_MONITOR # 将客户端添加到服务器状态的monitors链表的末尾 server.monitors.append(client) # 向客户端返回OK send+reply("OK") 24.2 向监视器发送命令信息服务器每次处理命令请求前,会调用replicationFeedMonitors函数,由它将被处理的命令的请求的相关信息发送给各个监视器。 12345678def replicationFeedMonitors(client, monitors, dbid, argv, argc): # 创建要发送的消息 msg = create_msg(client, dbid, argv, argc) # 遍历所有监视器 for monitor ...
附录3 互斥量、信号量、条件变量
互斥朗、信号量、条件变量 参考文献 http://blog.chinaunix.net/uid-20205875-id-4865684.html 1 信号量概念 信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量为单值信号量是,也可以完成一个资源的互斥访问。 实现——有名信号量 可以用于不同进程间或多线程间的互斥与同步 123//创建打开有名信号量sem_t *sem_open(const char *name, int oflag);sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value); 成功返回信号量指针;失败返回SEM_FAILED,设置errno name是文件路径名,但不能写成/tmp/a.sem这样的形式,因为在linux下,sem都是在/dev/shm目录下,可写成”...
MATLAB1
> MATLAB操作界面 操作面板 文件目录(文件结构的显示)2. 编辑器(打开的脚本文件)3. 命令行窗口(用于随时操作数据)4. 工作空间(用于储存变量的空间)5. 命令历史记录(用于储存命令行中的数据)6. 导航栏(主页、绘图、应用程序、编辑器、发布、视图) 使用tab键调节嵌套中的缩进问题。 辅助命令 path(搜索文件的目录) help path(查看帮助) cd(current directory) userpath(用户使用的路径) savepath(保存路径)
MATLAB10
MATLAB的符号运算> MATLAB的符号运算 符号计算基础 符号变量和符号常量``` a = sym(‘a’),syms b,c = sym(‘3’) 符号表达式。生成方式,声明符号表达式中所有的变量为符号变量。或者直接使用sym函数生成一个符号表达式f = sym(字符串)。一些满足符号表达式的字符串能够自动转换为符号表达式 符号函数 simplify(多项式规则化简) simple(多种规则对多项式化简) sym()符号表达式和数值的转换使用eval()或者numeric函数。 因式分解函数factor(化简) , expand(展开) , collect(合并同类项) 符号矩阵。构建方式与数值矩阵相同,符号矩阵的运算同数值矩阵相同。 符号矩阵的转置transpose,determ ,’是共轭转置 subs(f1,3)使用3 代替原函数中的自变量,得到最终的结果。 符号极限,符号微分,符号积分 limit(y,0)计算y函数在零点的值 diff(y,3)微分求解 int(y3)求y3的积分函数 int(y...
MATLAB2
命令和语句>命令行的特点 命名和语句 字母开头,字母下划线,区分大小写 不声明不定义拿来即用。 分号决定语句是否输出 英文省略号续行 赋值 等于号赋值给变量 无赋值对象时默认赋值给ans 变量管理 工作空间窗口查看 who whos 查看 全局的文件操作 清除变量的命令clear,清除所有变量或者单个变量 save[文件名][变量名][-append][-ascii] .mat文件是一种数据文件的类型,用于储存matlab中的数据 >数据的类型和显示 format函数,控制显示 short long e rat hex + bank compact loose MATLAB中常见的数据类型 数值型:双精度,单精度,符号整型数据 字符串、结构体、单元、多维矩阵、稀疏矩阵 默认双精度double unit8()将double型数据转换成无符号整型 double()能够将int类型转换为double类型的数据 class(变量)能够显示一个数据的类型 字符串类型的访问 单引号 double()或者abs查看ascii值 ...
MATLAB3
矩阵>矩阵的建立 直接输入法 空格和逗号建立行向量 分号建立列向量 使用M文件建立 这里的m文件就是MATLAB的脚本文件 可以直接使用该文件的名字加载脚本,也可以使用load命令 特殊矩阵的建立 zeros()零矩阵 ones()1矩阵 冒号表达式 e1:e2:e3;表示起始值:步长:结束值; linespace(1,5,3) >矩阵的简单操作 索引矩阵 可以使用矩阵元素的行标和列标或者矩阵元素的序号来索引矩阵 序号和下标之间的转换方式sub2ind(size(A),m,n);ind2sub(size(A),z); [m,n] = find(A == 8); 重排矩阵 reshape(A,m,n)大小相同 矩阵转置 A = A’ 矩阵拆分 H = A(1,:)第一行所有列的内容。 H = A(2,3:5)第二行第三列到第五列 向量索引和标量索引H = A([1 2],[1,2])校表索引的方法本质上是两个标量(精确定位),两个向量(生成范围) 删除矩阵元...
MATLAB5
MATLAB的程序控制结构>M文件 分类 命令文件=脚本文件,没有输入和返回,命令文件可以对工作空间的变量进行操作,文件内部的变量为局部变量,执行后自动清除。 函数文件,可以有输入和返回。 命令文件可以直接运行,函数文件必须以调用的形式运行。 建立和打开 可视化新建 edit命令新建 >程序控制结构 使用顺序结构的输入和输出 input(promt,’s’)s参数决定是否为字符串 disp(‘string’)能够显示字符串或者变量。 pause(3)暂停函数,中间是秒数 使用分支结构 单分支的if语句,由if决定是否执行 双分支的if-else-end语句 多分支结构if-elseif…else-end switch语句中的case可以加任何数据类型,也可以加矩阵向量数组集合 try分支,是一种试探性的分支,提高了程序的容错性。 try 语句组1 catch 语句组2 end 使用循环结构 for循环 是在一个范围中循环 while循环是一个条件满足循环
MATLAB6
MATLAB中程序的编写和调试>函数文件 基本结构 function[输出参数] = 函数名([输入形参])同命令文件的不同之处在于有参数的输入和输出 [注释说明] 函数体 函数文件名和函数名称一致(不一致时使用文件名) 注释信息会在help命令中显示出来 也可以使用lookfor命令查找 函数参数可调标识变量 nargin 输入参数个数(由执行命令时,实际传入参数的数量决定) nargout 输出参数的个数(由执行命令时被赋值项的返回值个数决定nargout的值) varargin 代表未知的参数变量,实现了可变参数数量的输入。当输入变量多余设定好的参数是,varargin作为元胞数组,储存多余的变量,注意,MATLAB中的数组下标是从1开始的 varargout 实现了可变参数数量的输出。 都是在函数文件内部实现的参数输入输出数量的控制。有点像巧妙地实现了函数的重载功能。 nargchk(2,4,nargin)可以生命输入参数的个数为2到4个。 error(‘wrongmessage’)可以给出错误信息。 > 全局变量 global 使不同...













