文章目录
- Redis的特性
- 速度快
- 持久化
- 多种数据结构
- 主从复制
- 高可用和分布式
- 典型的应用场景
- Redis启动和可执行文件
- Redis可执行文件说明
- 启动方式
- 验证redis
- redis常用配置
- redis数据结构和内部编码
- Redis是单线程,不会同时执行两条命令
- 哈希
- 慢查询
- pipeline
Redis的特性
速度快
性能:10w ops(每秒10w次读写)
- Redis 使用内存(寄存器>一级缓存>二级缓存>内存>本地磁盘>远程磁盘)
持久化
特点:断电不丢失数据
- Redis将数据保存在内存,将更改数据异步保存在磁盘
多种数据结构
BitMap
GEO:地理位置定位
HyperLogLog:粗略的唯一计数
主从复制
高可用和分布式
- Redis-Sentinel高可用
- Redis-Cluster分布式
典型的应用场景
- 缓存系统
- 一个用户访问一个APP Server —> 缓存 —> Storage
- 计数器
- 视频播放,点击次数进行计数
- 消息队列系统
- 排行榜
- 实时系统
Redis启动和可执行文件
Redis可执行文件说明
redis-server | Redis服务器 |
---|---|
redis-cli Redis | Redis命令行客户端 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具 |
redis-sentinel Sentinel | Sentinel服务器 |
启动方式
redis-server --port 6379(默认端口)
redis-server configPath
redis-cli -h (ip) -p (port)
验证redis
ps -ef | grep redis
netstat -antpl | grep redis
redis -cli -h (ip) -p (port) ping
redis常用配置
daemonize | 默认no(不以守护进程启动) |
---|---|
port | 6379 |
logfile | Redis系统日志 |
dir | Redis工作目录 |
redis数据结构和内部编码
Redis是单线程,不会同时执行两条命令
- 为什么redis的单线程很快
- 纯内存–主要原因
- 非阻塞IO(epoll多路复用)
- 单线程避免了线程切换和静态消耗
- 一次只运行一条命令
- 不使用慢命令(keys,flushall,flushdb,slow lua script, mutil/exec, operate big value(collection)
- 不是单线程
- fysnc file descriptor
哈希
慢查询
-
客户端请求的生命周期
- 发送命令
- 排队
- 执行命令(慢查询发生的时间)
- 返回结构
-
两个配置
- slowlog-max-len
- 先进先出的队列
- 固定长度
- 保存在内存
- slowlog-log-slower-than
- 慢查询阈值
- =0, 记录所有命令
- 配置方案
- config get slowlog-max-len = 128
- config get slowlog-log-slower-than = 10000
- 动态配置
- config set slowlog-max-len = 128
- config set slowlog-log-slower-than = 10000
-
三个命令
- slowlog get [n]: 获取慢查询队列
- slowlog len: 获取慢查询队列长度
- slowlog reset: 清空慢查询队列
-
运维经验
- slowlog-max-len通常为1ms
- slowlog-log-slower-than通常1000
- 理解命令的生命周期
- 定期持久化慢查询日志(方便后期查询历史)
pipeline
- 什么是流水线?
- 一次网络携带多条命令。
- redis的命令式微妙级别
- pipeline每次条数要控制(网络)
光速=3*108米/秒=30000公里/秒距离=1300公里
光纤传输速度≈光速的2/3
一次命令传输时间=(1300*2)/(300000*2/3)=13毫秒
执行一条命令几微妙,执行一条网络要13毫秒。