文章目錄
- 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毫秒。