摘要:
CPU占用过高,程序假死 1.使用top 定位到占用CPU高的进程PID top 通过ps aux | grep PID命令 2.获取线程信息,并找到占用CPU高的线程 ps -mp pid -o THREAD,tid,time | sort -rn 3.将需要的线程ID转换为16进制格式 prin 阅读全文
摘要:
read-only file system 没有SIP直接执行sudo mount -uw / 重启会失效,建议加到启动项里.bash_profile添加一行 echo 'pwd' | sudo -S sudo mount -uw / 阅读全文
摘要:
Redis服务器 由多个redisDb对象组成,一个redisDb就是一个数据库,一般默认16个,可通过select index切换,数量可配置。 redisDb中用一张字典表保存数据库中的所有键值对。 键都是字符串对象。 值是五种对象之一。 取值时通过键值获取值对象,再返回值对象嵌套的字符串对象值 阅读全文
摘要:
字符串对象 字符串对象的编码可以是int,raw,embstr 如果是整型且可以用long表示则encoding -> int,且直接将整数值保存在ptr里。 如果字符串长度 > 32字节,则encoding -> raw,redisObject的ptr属性指向一个SDS对象地址。 如果字符串长度 阅读全文
摘要:
简单动态字符串 redis字符串底层并不是直接拿c字符串来处理的。 redis字符串底层存储结构是SDS SDS包含三个属性 len 字符串长度 好处 传统c字符串遍历长度的时候会去遍历字符串,而SDS保留了长度空间,将获取长度的时间复杂度控制在O(1)。 避免缓冲区溢出,c字符串在将AB两个字符串 阅读全文
摘要:
redis文件事件 定义:redis服务器通过套接字socket与其他redis服务或者客户端进行通信,每次通信会产生文件事件而redis通过监听和处理这些事件来完成一系列网络通信操作。 实现:redis基于unix网络通信模型的I/O复用模型,一个线程监控多个套接字,当某个套接接收到信息,由事件分 阅读全文
摘要:
RDB RDB是通过直接将K-V键值对保存在硬盘文件来持久化。 通过两个命令可以让服务器执行rdb操作(tips:SAVE和BGSAVE底层都是调用的rdbSave) SAVE:SAVE命令由主进程执行,所以当执行SAVE命令后,服务器将进入阻塞状态,只有当RDB文件生成完成后,才开始处理请求。 B 阅读全文
摘要:
事务命令: multi 开启事务,此时输入的命令会入队FIFO。 exec 依次执行队列中的命令,即使遇到执行错误的命令,也不会影响其他命令,redis没有事务回滚机制。 discard 放弃事务 watch CAS乐观锁,用法是在multi命令之前执行,监控某个key值,如果在命令输入完成后执行e 阅读全文
摘要:
redis高可用的集群模式 使用集群,只需要将每个数据库节点的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行。即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式 阅读全文
摘要:
主从模式 redis提供了复制功能,可以实现当一台数据库中的数据更新了,自动同步到其他数据库中,主节点支持读写,从节点只能读,并且接收主节点同步过来的数据,主从是一对多的关系。从节点在启动的时候加参数 --slaveof ip port (ip port对应主节点),也可以在运行时执行slaveof 阅读全文