Redis 笔记之九:理解内存
Redis内存划分.xmind 内存是昂贵的资源,要合理地使用内存,首先要做到: 理解 Redis 的内存布局,以及它管理内存的方案 思考调优的方案 理解内存而能优化内存。 内存消耗内存使用统计12# 这个命令只有 redis-client 可用info...
Redis 笔记之八:复制
在分布式系统中为了解决单点问题,必须建立副本复制机制,以解决容灾和负载均衡问题。 Redis同步.xmind 配置建立复制建立复制共有三种方法: 在配置文件中使用如下的配置:slaveof localhost 6379 在启动时使用如下命令:redis-server —slaveof localhost 6379 在 redis-cli 中对服务端使用 slaveof localhost 6379 而在主节点里可以查看自己的主从信息: 1info replication 可以看到自己的角色: role:master 而从节点则会看到: role:slave 断开复制可以使用如下命令断掉与 master 的联系: 1slaveof no one 本节点断开和 master 的连接。 本节点自己上升为 master。 也可以使用如下命令切换 master: 1slaveof localhost 6379 如果新 master 不同于老 master,老 master 的数据会被清理掉。 安全性主节点可以设置 requirepass...
Redis 笔记之七:持久化
持久化可以避免进程退出而数据丢失。 Redis 的持久化文件主要包括两种格式,RDB 格式和 AOF 格式,这两种格式的生成机制各有不同。 Redis 在重启时优先加载 AOF 文件(因为 AOF 文件颗粒度更细),如果没有 AOF 文件可加载则加载 RDB 文件。 RDBRDB 持久化会把进程内的数据全量快照保存到硬盘上,其触发方式包括手动触发和自动触发。 手动触发12345# 阻塞当前 Redis 服务器,直到 RDB dump 完成为止。内存里数据越大,阻塞时间越久。不建议在生产环境使用,未来会被废弃。save# fork 出一个子进程。子进程负责生成 RDB 文件后,通知父进程,主进程还可以继续响应其他命令。只有 fork 的一瞬间会阻塞 Redis 进程。bgsave bgsave 的工作流程如下: 注意,RDB 文件本身永远只有一个。子进程产生的都是临时文件,会通过原子替换的方式来维持 RDB 文件的唯一性。 Redis 内部主动生成 RDB 文件的过程都是采用 bgsave 的方式。 自动触发 在 config 里配置save m n。表示 m 内数据集存在...
Redis 笔记之六:客户端
Redis 协议Redis 的客户端和服务器端使用 TCP 直连,基本的协议都是一问一答(request and response) 形式的。但它发送的请求是遵循特定的应用层协议(Redis Serialization Protocal)的。 一个请求如下: 1*3\r\n$3\r\nSET\r\n$5\r\nhello\r\nworld\r\n *3 代表 3 个参数(SET KEY VALUE)。 $3 代表紧随其后的参数长度为 3 字节。 每一段可见字符都必须以一个CLRF(\r\n)结尾。 而返回值也有格式: 状态回复,在 RESP 中第一个字节为“+”。 错误回复,在 RESP 中第一个字节为“-”。 多条字符串回复,在 RESP 中第一个字节为“”。 整数回复,在 RESP 中第一个字节为“:”。 字符串回复,在 RESP 中第一个字节为“$”。 多条字符串回复,在 RESP 中第一个字节为“”。 Jedis 客户端使用的时候要注意配上 try-finally 块,小心连接泄漏。...
Redis 笔记之五:Redis小功能
慢查询命令执行的典型过程 发送命令 命令排队 命令执行 返回结果 慢查询值统计 step3 的执行时间,即使没有慢查询,客户端也可能超时。 阈值参数相关的阈值参数分别为:slowlog-log-slower-than和slowlog-max-len。 1234567891011121314151617# 设置超时时间为10000微妙。设置为0则记录所有查询,设置为-1则不记录任何信息config set slowlog-log-slower-than 10000# 设置记录慢查询的记录集大小。这个集采用先进先出的淘汰逻辑config set slowlog-max-len 1000# 获取所有慢日志SLOWLOG get# 获取时间上最近的一条慢日志SLOWLOG get 1# 获取所有慢查询数量SLOWLOG len# 重置慢查询日志列表SLOWLOG reset 查询结果 1) 1) (integer) 7 2) (integer) 1570264725 3) (integer) 7 4) 1) “SLOWLOG” 2) “get” 3)...
架构整洁之道笔记
最早的《The Clean Architecture》诞生于 2012年,这个问题很早就被讨论清楚了。 思维导图: 注意,所有的接口都是在高层声明的:UseCase Input Port 和 UseCase Output port,所以高层可以实现高层的接口,低层也可以实现高层的接口。 注意,sofa的分层就是在一个横向的模块里声明了业务用例的接口和 core-model 的接口,这样源代码级的依赖都集中在抽象上: Use Case Interactor 和 Presenter 应该是可测试的,而 Data Access Interface、View、ORM 应该是 humble object。所以一个应用的低层(外层)应该是被排除掉不做测试的。 附件下载: xmind 关于源代码中的依赖关系的一些澄清: “使用”并不意味着“定义”,而只是引用 dashed outline 代表虚线框,也代表抽象。
Petroware 的 Unit Testing Guidelines
Keep unit tests small and fast Ideally the entire test suite should be executed before every code check in. Keeping the tests fast reduce the development turnaround time. 让单元测试保持小和快。 最完美的是,整个测试套件应该在每次代码被签入的时候被执行。让测试保持快速减少了开发的周转时间。 点评:小的测试是低成本测试。 Unit tests should be fully automated and non-interactive The test suite is normally executed on a regular basis and must be fully automated to be useful. If the results require manual inspection the tests are not proper unit...
《应用架构之道》笔记
...
(转)程序员的成长路线
...