缓存redisredis

Redis 压力测试

2021-05-25  本文已影响0人  Martain

前言

最近公司用到Redis作为中间件,但是使用Redis作为中间件的时候,有的时候比较难定位到问题具体在什么地方,所以有的时候需要临时的给Redis一些压力,这样能比较快速的复现问题,于是就是使用了Redis自带的测试工具来做相关测试。

关于redis-benchmark

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
 -h <hostname>      # redis服务地址 (default 127.0.0.1)
 -p <port>          # redis服务的端口 (default 6379)
 -s <socket>        # 服务器的socket (overrides host and port)
 -a <password>      # 数据库密码
 -c <clients>       # 并发链接的客户端数量 (default 50)
 -n <requests>      # 请求的总数 (default 100000)
 -d <size>          # 单个数据包的大小 (单位是bytes,默认是2)
 --dbnum <db>       # 执行默认的数据库 (default 0)
 -k <boolean>       #客户端是否使用keepalive,1为使用,0为不使用,默认值为1
 -r <keyspacelen>   #  key的长度;SET/GET/INCR 使用随机 key, SADD 使用随机值。使用-r的话可以生成更多的key
 -P <numreq>        # 通过管道请求的数量 Default 1 (no pipeline).
 -q                 # 强制退出 redis。仅显示 query/sec 值
 --csv              # 以 CSV 格式输出
 -l                 # 循环执行,永久执行测试
 -t <tests>         # 仅运行以逗号分隔的测试命令列表。如果不指定会依次压测多个命令(get,set,incr,lpush)结果
 -I                 # Idle 模式。仅打开 N 个 idle 连接并等待。

可以用于压力测试,也可以用于快速造数据。

一些命令

切换库

SELECT DB_NUMBER # 切换数据库的命令

清空本库

> SELECT 1 # 切换到DB 1
> FLUSHDB # 删除DB 1 的所有数据

清空Redis

> FLUSHALL # 删除redis中的所有数据

碎片整理(数据删除,内存没释放问题)

Redis有自己的内存分配器,当数据删除后,释放的内存空间由Redis自己的内存分配器管理,并没有立即将内存返回给操作系统,所以对于操作系统而言,仍然认为Redis占用了内存。这样的好处是,减少Redis向系统申请内存分配的次数,提升Redis自身性能。

redis-cli  memory purge # 手动清零碎片,释放内存

使用实列

redis-benchmark -t set --dbnum 1 -c 10 -d 1024 -n 300000 -r 500000 -P 10

在1号数据库上,使用10个客户端连接去发送300000个大小为1024字节(1kb)的数据包,这300000个数据包的key从500000以下随机产生,通过管道请求的数据量为10。

上一篇下一篇

猜你喜欢

热点阅读