一、redis-benchmark redis自带的压力测试工具!
如果按照默认路径安装,该工具安装在路径/usr/local/bin目录下

可选参数说明:
序号 | 选项 | 描述 | 默认值 |
---|---|---|---|
1 | -h | 指定服务器主机名 | 127.0.0.1 |
2 | -p | 指定服务器端口 | 6379 |
3 | -s | 指定服务器socket | |
4 | -c | 指定并发连接数 | 50 |
5 | -n | 指定请求数 | 10000 |
6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
7 | -k | 1=keep alive ;0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
9 | -P | 通过管道传输 请求 | 1 |
10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
11 | --csv | 以 CSV 格式输出 | |
12 | -l | 生成循环,永久执行测试 | |
13 | -t | 仅运行以逗号分隔的测试命令列表 | |
14 | -I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
下面来测试下100个并发连接数,100000个请求
命令:redis-benchmark -h localhost -p 6379 -c 100 -n 100000
部分结果及说明如下:
[root@VM_0_2_centos bin]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000
====== PING_INLINE ======
100000 requests completed in 1.86 seconds # 100000个请求在1.86秒内请求完毕
100 parallel clients # 每次请求有100个并发客户端
3 bytes payload # 每次写入 3 个字节的数据
keep alive: 1 # 保持一个连接,一台服务器来处理这些请求的
host configuration "save": 900 1 300 10 60 10000 # 当前快照触发条件配置,表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。满足任何一个就会触发RDB备份
host configuration "appendonly": no # 未开启aof持久化
multi-thread: no #未开启多线程模式
0.00% <= 0.6 milliseconds
0.01% <= 0.7 milliseconds
3.88% <= 0.8 milliseconds
12.60% <= 0.9 milliseconds
22.23% <= 1.0 milliseconds
32.01% <= 1.1 milliseconds
41.79% <= 1.2 milliseconds
51.48% <= 1.3 milliseconds
61.08% <= 1.4 milliseconds
70.63% <= 1.5 milliseconds
80.23% <= 1.6 milliseconds
89.56% <= 1.7 milliseconds
94.38% <= 1.8 milliseconds
96.58% <= 1.9 milliseconds
97.68% <= 2 milliseconds
99.37% <= 3 milliseconds
99.64% <= 5 milliseconds
99.67% <= 6 milliseconds
99.80% <= 7 milliseconds
99.83% <= 8 milliseconds
99.90% <= 9 milliseconds
99.96% <= 10 milliseconds
100.00% <= 10 milliseconds # 所有的请求在10豪秒内完成
53792.36 requests per second # 每秒处理的请求次数 53792.36 次
二、Redis的库操作
redis默认有16个数据库,类似数组,下标从0开始,每个数据库相对独立,默认是0号数据库,我们可以在redis.conf配置中看到如下相关配置

下面是对Redis的库操作命令演示
localhost:6379> set name along # 在默认数据库中设置值
OK
localhost:6379> get name
"along"
localhost:6379> select 2 # 切换到2号数据库
OK
localhost:6379[2]> get name # 2号数据库中没有数据,说明每个数据库都是相对独立的
(nil)
localhost:6379[2]> select 0 # 切换回0号数据库
OK
localhost:6379> dbsize # 查看当前数据库中总的数据总数
(integer) 1
localhost:6379> keys * # 查看当前所有的key(生产环境谨慎使用)
1) "name"
localhost:6379> flushdb # 清空当前数据库(生产环境不要使用)
OK
localhost:6379> keys *
(empty array)
localhost:6379> flushall # 清空所有数据库(生产环境不要使用)
OK
三、Redis的键操作
keys:查看数据库中已存在的key,支持正则表达式查找
语法:keys pattern
localhost:6379> keys * # 查看所有的key(生产环境慎用)
1) "China:city:1"
2) "USA:city:1"
3) "China:city:3"
4) "China:city:2"
5) "USA:city:2"
localhost:6379> keys China* # 查找以China开头的key
1) "China:city:1"
2) "China:city:3"
3) "China:city:2"
localhost:6379> keys USA* # 查看以USA开头的key
1) "USA:city:1"
2) "USA:city:2"
exists:判断一个或多个key是否存在,会返回存在的key的数量
语法:exists key [key ...]
localhost:6379> exists name
(integer) 1
localhost:6379> exists name name2
(integer) 2
localhost:6379> exists name name3
(integer) 1
move:将当前库的一个key移动到另一个库
语法:move key db
localhost:6379> move China:city:1 1 # 将名为China:city:1的key移动到1号数据库
(integer) 1
localhost:6379> get China:city:1 # 当前数据库中没有这个key了
(nil)
expire:为已存在的key设置过期时间
语法:expire key seconds
localhost:6379> set name along
OK
localhost:6379> get name
"along"
localhost:6379> expire name 5 # 设置值为name的key的过期时间为5秒
(integer) 1
localhost:6379> ttl name # 查看name的状态
(integer) 4
localhost:6379>
localhost:6379> ttl name
(integer) 2
localhost:6379> ttl name
(integer) 1
localhost:6379> ttl name
(integer) -2 # 负数表示已过期
localhost:6379> get name
(nil)
set 的可选参数
set 语法:set key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
EX seconds|PX milliseconds:设置值的同时设置过期时间
localhost:6379> set name along ex 10 # 设置key的同时设置过期时间为10s
localhost:6379> set name along px 10000 # 设置key的同时设置过期时间为10000ms
NX:只有在key不存在时才创建
localhost:6379> set name along nx
OK
localhost:6379> get name
"along"
localhost:6379> set name yue nx
(nil)
localhost:6379> get name
"along"
XX:只有在key存在时才创建,会覆盖
localhost:6379> del name
(integer) 1
localhost:6379> set name along xx # key不存在,创建失败
(nil)
localhost:6379> get name
(nil)
localhost:6379> set name along
OK
localhost:6379> get name
"along"
localhost:6379> set name yue xx # key存在,覆盖
OK
localhost:6379> get name
"yue"
KEEPTTL:Redis6.x版本加入的新参数,官方给的解释是(Retain the time to live associated with the key)保留生存时间与密钥关联,以后讨论
del:删除一个或多个键
语法:del key [key ...]
localhost:6379> set name along
OK
localhost:6379> get name
"along"
localhost:6379> del name
(integer) 1
localhost:6379> get name
(nil)
四、Redis的五大基本数据类型
Redis的五大基本数据类型有:string(字符串)、hashes(哈希)、lists(链表)、sets(不重复集合)、sorted sets(有序集合)
1. String(字符串,单值单vlaue)
Redis中的基本类型,一个key对应一个String类型的value,value的长度最大不能超过512M
和java中的String类有很多方法,同样的Redis也为String提供了很多方法
append:对key的内容进行追加,如果key不存在就等同于set
语法:append key value
localhost:6379> set speak hello
OK
localhost:6379> get speak
"hello"
localhost:6379> append speak " world"
(integer) 11
localhost:6379> get speak
"hello world"
strlen: 获取长度
语法:strlen key