Redis 的通信协议 RESP

客户端

单行字符串响应

127.0.0.1:6379> set author codehole
OK

服务端响应内容

+OK

错误响应

// 试图对一个字符串进行自增的错误
127.0.0.1:6379> incr author
(error) ERR value is not an integer or out of range

服务端响应内容

-ERR value is not an integer or out of range

整数响应

127.0.0.1:6379> incr books
(integer) 1

服务端响应内容

:1

多行字符串

// 双引号括起来的字符串其实是多行字符串
127.0.0.1:6379> get author
"codehole"

服务端响应内容

$8
codehole

数组响应

127.0.0.1:6379> hset info name testname
(integer) 1
127.0.0.1:6379> hset info age 30
(integer) 1
127.0.0.1:6379> hgetall info
1) "name"
2) "testname"
3) "age"
4) "30"

hgetall 响应内容

*4
$4
name
$8
testname
$3
age
$2
30

嵌套

127.0.0.1:6379> scan 0
1) "0"
2)  1) "info"
    2) "books"
    3) "author"

服务端响应内容

*2
$1
0
*3
$4
info
$5
books
$6
author

总结

RESP 使用大量冗余的回车换行符, 已然是一个非常受欢迎的协议. 在技术领域, 性能并不是总是一切, 还有简单性, 易理解性和易实现性, 总之需要学会平衡.

-->

Redis 作者认为数据库系统瓶颈不在网络流量, 而在数据库自身逻辑处理上, 所以使用了浪费流量的文本协议, 来换取即可的访问性能 RESP RESP (Redis Serialization Protocol) 是一种直观的文本协议, 优势是过程简单, 解析极好, 劣势是耗费流量 RESP 将传输的结构数据分为 5 种最小单元类型, 单元结束时统一加上回车换行符 \r\n ...阅读全文...

Redis 的优胜劣汰 LRU 算法

本章主要介绍: redis 内存满了以后会怎样 ? redis 的近似 LRU 算法和严格 LRU 算法有什么区别 ? Redis 的五种最大内存时的释放策略 场景 当 redis 内存超出物理内存限制时, 会频繁和硬盘交换(swap), 极大影响性能 redis 可配置 maxmemory 参数来限制内存超出期望大小 当实际内存超出 maxmemo...阅读全文...

Redis 过期策略

Redis 主要是惰性策略和定时删除两种策略结合, 来清理过期 key. 惰性策略 客户端访问 Key 时, 先进行过期判断, 如果已经过期立即删除. 定时删除 Redis 将设置了过期时间的 key 放在一个独立的字典中 没 10s 扫描一次此字典, 随机取 20 个 key 删除这 20 个 key 中的已经过期 key 如果已经过期的 key 占比超过 1/4, ...阅读全文...

Redis 事务

Redis 的事务不同于关系型数据库, 事务模型很不严格, 我们对比着 MySQL 来看 基本用法 命令分为: multi 事务的开始 (类似 MySQL 的 begin) exec 执行事务 (类似 MySQL 的 commit) discard 丢弃事务不执行 (类似 MySQL 的 rollback) // exec 127.0.0.1:6379> get jw (n...阅读全文...

Redis 持久化原理

概述 Redis 是个内存数据库, 数据全部存储在内存中, 如果突然宕机, 数据就会全部丢失, 因此有了将数据刷到硬盘保存的持久化机制. Redis 持久化分两种方式, 一种是 RDB 快照, 另一种是 AOF 日志. 快照就是全量备份, 内存数据的二进制序列化形式, 在存储上非常紧凑. AOF 日志是连续的增量备份, 记录的是内存数据修改的指令记录文本. 快照 由于 Red...阅读全文...

HTTP/2 - 安装部署

本文讲述如何部署 HTTPS 和 HTTP2, 后续会再整理其他相关理论, 如 HTTP/2 的好处, HTTP/2 与 HTTPS 的关系, 从 HTTP/1.1 升级到 HTTP/2 有什么要注意的, HTTP/2 为什么不叫 HTTP/2.0 环境 Ubuntu 16.04, nginx 1.12.2(安装时需要 ssl 和 http_v2 模块) 获取 SSL 证书 获取证书...阅读全文...

Elasticsearch 添加权限管理

Elasticsearch 默认是没有权限管理的, 只要能 ping 通地址的地方就可以读写数据, 所以还是很危险的, 这里选择使用插件 shield 来实现 环境版本 Elasticsearch 2.4.4 插件安装 # 这是收费插件, 安装后免费使用一个月, 到期后集群功能不能用,但基本api不受影响 bin/plugin install license b...阅读全文...

Kafka 迁移 Topics

Kafka 扩展为集群后, 需要把原单机上的部分大 topic 平衡到新 broker 上 旧 kafka 的 broker id 为 0, 新机器的是 1 迁移 第一步 创建 move.json { "topics": [{ "topic": "test2" }], "version": 1 } 第二步 生成迁移分配规则 j...阅读全文...

删除kafka的consumer和topics

谨慎操作 kafka 版本 0.10 删除 consumers 原因: 重置 offset, 或者是强迫症想清空不用的 consumer 操作: # 进入控制台 bin/zookeeper-shell.sh localhost:2181 # 查看所有消费者 ls /consumers # fuck rmr /consumers/hangou # 再查看 没了 ls /con...阅读全文...