一、慢查询:

1、慢查询的作用:通过慢查询分析,找到有问题的命令进行优化。

2、慢查询的redis的配置参数:

slowlog-log-slower-than    慢查询预设阈值(单位是微秒1秒=1000000微秒)
slowlog-max-len 慢查询最多存多少条

修改慢查询有两种方法:

1、直接在redis.conf上修改。
2、在redis的shell里面修改:
config set slowlog-log-slower-than 20000
config set slowlog-man-len 1000
config rewrite #持久化写入到本地文件

慢查询日志是会存储在内存中, 没有文件存储慢查询日志内容. 所以在获取慢查询日志时候,会响应非常快. 对性能影响很小.

获取慢查询日志可以使用 slowlog get 命令, 将会所有的慢查询记录. 获取指定数量的慢查询使用:

slowlog get n

慢查询日志四个属性:

1、第一个字段是每个慢查询唯一标识。
2、处理完命令后的时间戳
3、执行改名了所需要的时间,单位微妙
4、命令的参数列表,是个数组类型
每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会重置它.

查看当前慢查询日志长度:

slowlog len

清空慢查询日志内容:

slowlog reset

二、Redis的shell详解:

1、redis-cli

1、-r   代表将命令重复执行多次
./redis-cli -r 3 ping
PONG
PONG
PONG
ping命令可用于检测redis实例是否存活,如果存活则显示PONG。
2、-i 每隔几秒(如果想用ms,如10ms则写0.01)执行一次命令,必须与-r一起使用。
./redis-cli -r 3 -i 1 ping
PONG
PONG
PONG
./redis-cli -r 10 -i 1 info|grep used_memory_human
used_memory_human:2.95G
.....................................
used_memory_human:2.95G
每隔1秒输出内存的使用量,一共输出10次。
./redis-cli -h ip -p port info server|grep process_id
process_id:999 #获取redis的进程号999
3、-x 代表从标准输入读取数据作为该命令的最后一个参数。
./echo "world" |redis-cli -x set hello
Ok
4、-c 连接集群结点时使用,此选项可防止moved和ask异常。
5、-a 如配置了密码,可用a选项。
6、--scan和--pattern 用于扫描指定模式的键,相当于scan命令。
7、--slave 当当前客户端模拟成当前redis节点的从节点,可用来获取当前redis节点的更新操作。合理利用可用于记录当前连接redis节点的一些更新操作,这些更新可能是实开发业务时需要的数据。
8、--rdb 会请求redis实例生成并发送RDB持久化文件,保存在本地。可做定期备份。
9、--pipe 将命令封装成redis通信协议定义的数据格式,批量发送给redis执行。
10、--bigkeys 统计bigkey的分布,使用scan命令对redis的键进行采样,从中找到内存占用比较大的键,这些键可能是系统的瓶颈。
11、--eval 用于执行lua脚本
12、--latency 有三个选项,--latency、--latency-history、--latency-dist。它们可检测网络延迟,展现的形式不同。
13、--stat 可实时获取redis的重要统计信息。info命令虽然比较全,但这里可看到一些增加的数据,如requests(每秒请求数)
14、--raw 和 --no-raw --no-raw 要求返回原始格式。--raw 显示格式化的效果。

2、redis-server

检测当前系统是否提供1G内存给redis。

./redis-server --test-memory 1024

3、redis-benchmark

可以为redis做基准测试:

1、-c  客户端的并发数量(默认50)
2、-n 客户端的请求总量(默认是100000)
./redis-benchmark -c 100 -n 100000 #代表100个客户端同时请求redis,一共执行100000次,redis-benchmark会对各个数据类型结构命令进行测试
====== PING_INLINE ======
100000 requests completed in 0.97 seconds
100 parallel clients
3 bytes payload
keep alive: 1 99.37% <= 1 milliseconds
99.84% <= 2 milliseconds
99.94% <= 3 milliseconds
99.97% <= 4 milliseconds
100.00% <= 4 milliseconds
102880.66 requests per second
3、-q 仅仅显示redis-benchmark的requests per second信息:
PING_INLINE: 104602.52 requests per second
PING_BULK: 103842.16 requests per second
SET: 101010.10 requests per second
GET: 104712.05 requests per second
INCR: 105820.11 requests per second
LPUSH: 106157.12 requests per second
RPUSH: 102880.66 requests per second
LPOP: 102459.02 requests per second
RPOP: 103842.16 requests per second
SADD: 103199.18 requests per second
HSET: 105485.23 requests per second
SPOP: 98716.68 requests per second
4、-r 在一个空的redis上执行redis-benchmark会发现有三个键,想要插入更多的键,执行-r选项,可以向redis插入更多的键。
5、 -P 代表每个请求pipeline的数据量(默认为1)。
6、 -k 代表客户端是否使用keeplive,1为使用,0为不使用,默认为1
7、-t 可以对指定命令进行基准测试。
8、--csv 将结果按照csv格式输出,便于后续处理,入导到Excel等。

三、info命令:

info server   服务端信息
redis_version #Redis服务器版本
redis_git_sha1 #Git SHA1
redis_git_dirty #Git脏标志
os #Redis服务器的宿主操作系统
arch_bits #架构(32或64位)
multiplex_api #Redis所使用的事件处理机制
gcc_version #编译Redis时所使用的GCC版本
process_id #服务器进程的PID
run_id #Redis的服务器的随机标识符(用于前哨和集群)
tcp_port #TCP / IP监听端口
uptime_in_seconds #自动Redis服务器启动以来,经过的秒数
uptime_in_days #自动Redis服务器启动以来,经过的天数
lru_clock #以分钟为单位进行自增的时钟,用于LRU管理 info clients 客户端信息
connected_clients #已连接客户端的数量(不包括通过从属性服务器连接的客户端)
client_longest_output_list #当前连接的客户端当中,最长的输出列表
client_longest_input_buf #当前连接的客户端当中,最大输入缓存
blocked_clients #正在等待阻塞命令(BLPOP,BRPOP,BRPOPLPUSH)的客户端的数量

info memory 内存信息
used_memory #由Redis分配器分配的内存总量,以字节(byte)为单位
used_memory_human #以人类可读的格式返回Redis分配的内存总量
used_memory_rss #从操作系统的角度,返回Redis已分配的内存总量(俗称常驻集大小)。这个值和 top, ps等命令的输出一致。
used_memory_peak #Redis的内存消耗峰值(以字节为单位)
used_memory_peak_human #以人类可读的格式返回Redis的内存消耗峰值
used_memory_lua #Lua引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio # used_memory_rss和 used_memory之间的比率
mem_allocator #在编译时指定的,Redis所使用的内存分配器。可以是libc,jemalloc或者tcmalloc。 info persistence RDB和AOF的持久化相关信息
loading:0 #服务器是否正在载入持久化文件
rdb_changes_since_last_save:28900855 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress:0 #服务器是否正在创建rdb文件
rdb_last_save_time:1482358115 #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
rdb_last_bgsave_status:ok #最近一次rdb持久化是否成功
rdb_last_bgsave_time_sec:2 #最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec:-1 #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
aof_enabled:1 #是否开启了aof
aof_rewrite_in_progress:0 #标识aof的rewrite操作是否在进行中
aof_rewrite_scheduled:0 info rewrite 任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
aof_last_rewrite_time_sec:-1 #最近一次aof rewrite耗费的时长
aof_current_rewrite_time_sec:-1 #如果rewrite操作正在进行,则记录所使用的时间,单位秒
aof_last_bgrewrite_status:ok #上次bgrewriteaof操作的状态
aof_last_write_status:ok #上次aof写入状态
aof_current_size:4201740 #aof当前尺寸
aof_base_size:4201687 #服务器启动时或者aof重写最近一次执行之后aof文件的大小
aof_pending_rewrite:0 #是否有aof重写操作在等待rdb文件创建完毕之后执行?
aof_buffer_length:0 #aof buffer的大小
aof_rewrite_buffer_length:0 #aof rewrite buffer的大小
aof_pending_bio_fsync:0 #后台I/O队列里面,等待执行的fsync调用数量
aof_delayed_fsync:0 #被延迟的fsync调用数量 info stats 一般统计信息
total_connections_received:209561105 #新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置
total_commands_processed:2220123478 #redis处理的命令数
instantaneous_ops_per_sec:279 #redis当前的qps,redis内部较实时的每秒执行的命令数
total_net_input_bytes:118515678789 #redis网络入口流量字节数
total_net_output_bytes:236361651271 #redis网络出口流量字节数
instantaneous_input_kbps:13.56 #redis网络入口kps
instantaneous_output_kbps:31.33 #redis网络出口kps
rejected_connections:0 #拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数
sync_full:1 #主从完全同步成功次数
sync_partial_ok:0 #主从部分同步成功次数
sync_partial_err:0 #主从部分同步失败次数
expired_keys:15598177 #运行以来过期的key的数量
evicted_keys:0 #运行以来剔除(超过了maxmemory后)的key的数量
keyspace_hits:1122202228 #命中次数
keyspace_misses:577781396 #没命中次数
pubsub_channels:0 #当前使用中的频道数量
pubsub_patterns:0 #当前使用的模式的数量
latest_fork_usec:15679 #最近一次fork操作阻塞redis进程的耗时数,单位微秒
migrate_cached_sockets:0 # info replication 主从信息,master上显示的信息
role:master #实例的角色,是master or slave
connected_slaves:1 #连接的slave实例个数
slave0:ip=192.168.64.104,port=9021,state=online,offset=6713173004,lag=0 #lag从库多少秒未向主库发送REPLCONF命令
master_repl_offset:6713173145 #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟
repl_backlog_active:1 #复制积压缓冲区是否开启
repl_backlog_size:134217728 #复制积压缓冲大小
repl_backlog_first_byte_offset:6578955418 #复制缓冲区里偏移量的大小
repl_backlog_histlen:134217728 #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小 info replication 主从信息,slave上显示的信息
role:slave #实例的角色,是master or slave
master_host:192.168.64.102 #此节点对应的master的ip
master_port:9021 #此节点对应的master的port
master_link_status:up #slave端可查看它与master之间同步状态,当复制断开后表示down
master_last_io_seconds_ago:0 #主库多少秒未发送数据到从库?
master_sync_in_progress:0 #从服务器是否在与主服务器进行同步
slave_repl_offset:6713173818 #slave复制偏移量
slave_priority:100 #slave优先级
slave_read_only:1 #从库是否设置只读
connected_slaves:0 #连接的slave实例个数
master_repl_offset:0
repl_backlog_active:0 #复制积压缓冲区是否开启
repl_backlog_size:134217728 #复制积压缓冲大小
repl_backlog_first_byte_offset:0 #复制缓冲区里偏移量的大小
repl_backlog_histlen:0 #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小 info CPU CPU计算量统计信息
used_cpu_sys:96894.66 #将所有redis主进程在核心态所占用的CPU时求和累计起来
used_cpu_user:87397.39 #将所有redis主进程在用户态所占用的CPU时求和累计起来
used_cpu_sys_children:6.37 #将后台进程在核心态所占用的CPU时求和累计起来
used_cpu_user_children:52.83 #将后台进程在用户态所占用的CPU时求和累计起来 info commandstats 各种不同类型的命令的执行统计信息
cmdstat_get:calls=1664657469,usec=8266063320,usec_per_call=4.97 #call每个命令执行次数,usec总共消耗的CPU时长(单位微秒),平均每次消耗的CPU时长(单位微秒) info cluster 集群相关信息
cluster_enabled:1 #实例是否启用集群模式 info keyspace 数据库相关的统计信息
db0:keys=194690,expires=191702,avg_ttl=3607772262 #db0的key的数量,以及带有生存期的key的数,平均存活时间

Redis慢查询,redis-cli,redis-benchmark,info的更多相关文章

  1. Redis 优化查询性能

    一次使用 Redis 优化查询性能的实践   应用背景 有一个应用需要上传一组ID到服务器来查询这些ID所对应的数据,数据库中存储的数据量是7千万,每次上传的ID数量一般都是几百至上千数量级别. 以前 ...

  2. redis慢查询日志的配置和查看

    Redis是单线程运行的,一个慢执行,会让后续的大量执行延时,吞吐量也会极大的降低.记录.查询.监控Redis慢执行意义重大.Redis的slowlog只记录在内存中,效率很高,不用过于担心影响性能. ...

  3. Redis 模糊查询删除操作

    创建一条测试 数据 查询 创建:set name xiaoming 查询: get name 1.模糊搜索查询 Redis 模糊搜索 keys * 2.删除指定key : # 删除所有以user开头的 ...

  4. Redis慢查询日志学习功能

    慢查询日志 什么是SLOW LOG? Slow log是Redis用来记录查询执行时间超过给定时长的命令请求的日志系统.查询执行时间指的是不包括像客户端响应(talking).发送回复等IO操作,而单 ...

  5. Redis 慢查询

    Redis 慢查询   许多存储系统提供慢查询日志帮助开发和运维人员定位系统的慢操作.慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值就将这条命令的相关信息记录下来Redis提供 ...

  6. 一次使用 Redis 优化查询性能的实践

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到 ...

  7. redis 慢查询日志

    说明:针对慢查询日志,可以设置两个参数,一个是执行时长,单位为微秒,另一个是慢查询日志的长度.如果超过该长度,当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除. 编辑配置文件redis. ...

  8. redis 学习(10)-- redis 慢查询

    redis 慢查询 什么是慢查询 MySQL会记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询,都记在慢查询日志里. redis 的生命周期 客户端向Redis服务器发送命令 ...

  9. redis范围查询应用 数据库 数据库学习 Redis redis范围查询的方法

    redis范围查询应用. 需求 根据IP找到对应的城市 原来的解决方案 oracle表(ip_country): 查询IP对应的城市: 1.把a.b.c.d这样格式的IP转为一个数字,例如为把210. ...

随机推荐

  1. c++ istream(ostream)是如何转换为bool的

    http://www.cplusplus.com/reference/ios/ios/operator_not/ http://stackoverflow.com/questions/8117566/ ...

  2. 使用httpClient发送get\post请求

    maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...

  3. javascript simple MVC

    <h3>javascript simple MVC</h3> <div> <select name="" id="setAnim ...

  4. 利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问

    包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务: 可以同时连接到多个命名或目录服务上: 建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必知道对象或资源的物理ID. JNDI ...

  5. references non-existing project XXX, launch configuration问题的解决办法

    Go to Project->properties In properties window's left pane select "Run/Debug Settings". ...

  6. c++中sin,cos,arcsin等和在C/C++中使用pi (π) 值

    先 #include<math.h> 反3角函数有 acos(double),asin(double),atan(double),atan(double,double),返回值 doubl ...

  7. poj 2942(点双连通+判奇圈)

    题目链接:http://poj.org/problem?id=2942 思路:我们对于那些相互不憎恨的骑士连边,将每次参加会议的所有人(不一定是整个骑士团,只需人数>=3且为奇数)看做一个点双联 ...

  8. ubuntu在vmware下使用问题

    问题1: 在vmware虚拟机下安装的ubuntu系统,为了在windows和ubuntu之间拷贝数据方便,所以在vmware上安装了vmware tools.在安装了vmware tool之后会在u ...

  9. NDK,在JNI层使用AssetManager读取文件

    NDK,二进制文件数据读取,在JNI层,通过AAssetManager读取asset内部的资源: 需要头文件的支持 #include <android/asset_manager_jni.h&g ...

  10. Jmeter做读取csv接口测试

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...