李伦兵
2019-05-20
目录
• Redis简介
• Redis特性
• Redis性能数据指标
• 常见性能问题分析
• 性能优化方案
• 性能测试
Redis简介
• Redis 是一个开源的高性能Nosql数据库,也是基于内存的Key-Value存储
系统,可以用作数据库、缓存和消息中间件
• 支持多种数据结构:字符串、哈希表、列表、集合、有序集合、位图、
Hyperloglogs
• 内置了复制,LUA脚本, LRU数据淘汰,事务和不同级别的磁盘持久化等
功能
• 通过Sentinel哨兵和Cluster自动分片集群提供高可用性
Redis特性
• 基于单线程模型实现,一个线程服务所有客户端请求,采用非阻塞式 IO
• 线程安全,所有操作都是原子的,不会因并发产生数据异常
• 速度非常快,大部分命令算法时间复杂度都是 O(1)
• 使用高耗时 Redis 命令很危险,会占用唯一线程的大量处理时间,导致所
有的请求都被拖慢
Redis性能数据指标
• 通过Redis-cli命令行界面访问到Redis服务器,使用info命令获取丰富的
Redis性能数据指标
• info命令输出的数据可分为10个类别,分别是:
server
clients
memory
persistence
stats
replication
cpu
commandstats
cluster
keyspace
重要性能指标memory
• 输入info memory命令,只返回与内存相关的数据
• 常用内存数据指标
1. used_memory:已使用内存
2. used_memory_rss:从操作系统上显示已经分配的内存总量
3. mem_fragmentation_ratio: 内存碎片率
4. used_memory_lua: Lua脚本引擎所使用的内存大小
5. mem_allocator: 在编译时指定的Redis使用的内存分配器,可以是libc、jemalloc、
tcmalloc
以上指标都是以字节(byte)为单位
重要性能指标CPU
• used_cpu_sys:55.09 -- Redis服务器耗费的系统CPU
• used_cpu_user:26.16 -- Redis服务器耗费的用户CPU
• used_cpu_sys_children:0.02 --后台进程耗费的系统CPU
• used_cpu_user_children:0.01 --后台进程耗费的用户CPU
重要性能指标Clients
记录了已连接客户端的信息
• connected_clients:1 --已连接客户端的数量(不包括通过从属服务
器连接的客户端)
• client_longest_output_list:0 --当前连接的客户端当中,最长的输出列
表
• client_biggest_input_buf:0 --当前连接的客户端当中,最大输入缓存
• blocked_clients:0 --正在等待阻塞命令(BLPOP、BRPOP、
BRPOPLPUSH)的客户端的数量