1、Redis常用命令集
1)连接操作命令
- quit:关闭连接(connection)
- auth:简单密码认证
- help cmd: 查看cmd帮助,例如:help quit
2)持久化
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的Unix时戳
- shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
- info:提供服务器的信息和统计
- monitor:实时转储收到的请求
- slaveof:改变复制策略设置
- config:在运行时配置Redis服务器
4)对value操作的命令
- exists(key):确认一个key是否存在
- del(key):删除一个key
- type(key):返回值的类型
- keys(pattern):返回满足给定pattern的所有key
- randomkey:随机返回key空间的一个
- keyrename(oldname, newname):重命名key
- dbsize:返回当前数据库中key的数目
- expire:设定一个key的活动时间(s)
- ttl:获得一个key的活动时间
- select(index):按索引查询
- move(key, dbindex):移动当前数据库中的key到dbindex数据库
- flushdb:删除当前选择数据库中的所有key
- flushall:删除所有数据库中的所有key
5)String
- set(key, value):给数据库中名称为key的string赋予值value
- get(key):返回数据库中名称为key的string的value
- getset(key, value):给名称为key的string赋予上一次的value
- mget(key1, key2,…, key N):返回库中多个string的value
- setnx(key, value):添加string,名称为key,值为value
- setex(key, time, value):向库中添加string,设定过期时间time
- mset(key N, value N):批量设置多个string的值
- msetnx(key N, value N):如果所有名称为key i的string都不存在
- incr(key):名称为key的string增1操作
- incrby(key, integer):名称为key的string增加integer
- decr(key):名称为key的string减1操作
- decrby(key, integer):名称为key的string减少integer
- append(key, value):名称为key的string的值附加value
- substr(key, start, end):返回名称为key的string的value的子串
6)List
- rpush(key, value):在名称为key的list尾添加一个值为value的元素
- lpush(key, value):在名称为key的list头添加一个值为value的 元素
- llen(key):返回名称为key的list的长度
- lrange(key, start, end):返回名称为key的list中start至end之间的元素
- ltrim(key, start, end):截取名称为key的list
- lindex(key, index):返回名称为key的list中index位置的元素
- lset(key, index, value):给名称为key的list中index位置的元素赋值
- lrem(key, count, value):删除count个key的list中值为value的元素
- lpop(key):返回并删除名称为key的list中的首元素
- rpop(key):返回并删除名称为key的list中的尾元素
- blpop(key1, key2,… key N, timeout):lpop命令的block版本。
- brpop(key1, key2,… key N, timeout):rpop的block版本。
- rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
7)Set
- sadd(key, member):向名称为key的set中添加元素member
- srem(key, member) :删除名称为key的set中的元素member
- spop(key) :随机返回并删除名称为key的set中一个元素
- smove(srckey, dstkey, member) :移到集合元素
- scard(key) :返回名称为key的set的基数
- sismember(key, member) :member是否是名称为key的set的元素
- sinter(key1, key2,…key N) :求交集
- sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
- sunion(key1, (keys)) :求并集
- sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
- sdiff(key1, (keys)) :求差集
- sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
- smembers(key) :返回名称为key的set的所有元素
- srandmember(key) :随机返回名称为key的set的一个元素
8)Hash
- hset(key, field, value):向名称为key的hash中添加元素field
- hget(key, field):返回名称为key的hash中field对应的value
- hmget(key, (fields)):返回名称为key的hash中field i对应的value
- hmset(key, (fields)):向名称为key的hash中添加元素field
- hincrby(key, field, integer):将名称为key的hash中field的value增加integer
- hexists(key, field):名称为key的hash中是否存在键为field的域
- hdel(key, field):删除名称为key的hash中键为field的域
- hlen(key):返回名称为key的hash中元素个数
- hkeys(key):返回名称为key的hash中所有键
- hvals(key):返回名称为key的hash中所有键对应的value
- hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
2、Redis高级应用
常用命令:
1) 查看keys个数
keys * // 查看所有keys
keys prefix_* // 查看前缀为"prefix_"的所有keys
2) 清空数据库
flushdb // 清除当前数据库的所有keys
flushall // 清除所有数据库的所有keys
Redis常用命令(示例)
Redis新手入门详解(百度文库)
Redis中文入门手册(百度文库)
Redis 设计与实现(推荐)
3.redis其它命令
1.1 redis-benchmark
Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。
redis的基准信息和性能检测。
redis-benchmark-h localhost -p 6379 -c 100 -n 100000
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能
./redis-benchmark -n 100000 –c 50
====== –c 50 ======
100000 requests completed in 1.93 seconds (100000个请求完成于 1.93 秒 )
50 parallel clients (每个请求有50个并发客户端)
3 bytes payload (每次写入3字节)
keep alive: 1 (保持1个连接)
58.50% <= 0 milliseconds
99.17% <= 1 milliseconds
99.58% <= 2 milliseconds
99.85% <= 3 milliseconds
99.90% <= 6 milliseconds
100.00% <= 9 milliseconds
(所有请求在62毫秒内完成)
114293.71 requests per second(每秒 114293.71 次查询)
redis-benchmark参数 | |
-h | 设置检测主机IP地址,默认为127.0.0.1 |
-p | 设置检测主机的端口号,默认为6379 |
-s<socket> | 服务器套接字(压倒主机和端口) |
-c | 并发连接数 |
-n | 请求数 |
-d | 测试使用的数据集的大小/字节的值(默认3字节) |
-k | 1:表示保持连接(默认值)0:重新连接 |
-r | SET/GET/INCR方法使用随机数插入数值,设置10则插入值为rand:000000000000 - rand:000000000009 |
-P | 默认为1(无管道),当网络延迟过长时,使用管道方式通信(请求和响应打包发送接收) |
-q | 简约信息模式,只显示查询和秒值等基本信息。 |
--csv | 以CSV格式输出信息 |
-l | 无线循环插入测试数据,ctrl+c停止 |
-t<tests> | 只运行<tests>测试逗号分隔的列表命令,如:-t ping,set,get |
-I | 空闲模式。立即打开50个空闲连接和等待。 |
例子: $ redis-benchmark基本测试 $ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20 $ redis-benchmark -t set -n 1000000 -r 100000000 $ redis-benchmark -t ping,set,get -n 100000 –csv $ redis-benchmark -r 10000 -n 10000 lpush mylist ele:rand:000000000000 | |
|
|
1.2 redis-server
Redis服务器的daemon启动程序
redis-server 启动并加装默认配置文件[/path/to/redis.conf]
redis-server /biran/conf/redis.conf启动并加装指定配置文件
redis-server - (read config from stdin) 使用标准输入读取配置为启动参数
redis-server --test-memory 256 检测256MB内存
redis-server –version 查版本号
1.3 redis-cli
Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
可输入redis-cli直接进入命令行操作界面。
redis-cli参数 | |
-h | 设置检测主机IP地址,默认为127.0.0.1 |
-p | 设置检测主机的端口号,默认为6379 |
-s<socket> | 服务器套接字(压倒主机和端口) |
-a | 连接到Master服务器时使用的密码 |
-r | 执行指定的N次命令 |
-i | 执行命令后等待N秒,如–i 0.1 info(执行后等0.1秒) |
-n | 指定连接N号ID数据库,如–n 3(连接3号数据库) |
-x | 从控制台输入的信息中读取最后一个参数 |
-d | 定义多个定界符为默认输出格式(默认: \n) |
--raw | 使用原数据格式返回输出内容 |
--latency | 进入一个不断延时采样的特殊模式 |
--slave | 模拟一个从服务器到主服务器的命令显示反馈 |
--pipe | 使用管道协议模式 |
--bigkeys | 监听显示数据量大的key值,--bigkeys -i 0.1 |
--help | 显示命令行帮助信息 |
--version | 显示版本号 |
例子: $ redis-cli进入命令行模式 $ redis-cli -r 3 info 重复执行info命令三次 $ cat testStr.txt | redis-cli -x set testStr读取testStr.txt文件所有内容设置为testStr的值 $ redis-cli -r 100 lpush mylist x $ redis-cli -r 100 -i 1 info | grep used_memory_human |
1.4 redis-check-aof
更新日志检查 ,加--fix参数为修复log文件
redis-check-aofappendonly.aof
1.5 redis-check-dump
检查本地数据库文件
redis-check-dump dump.rdb
1.6 查看、删除key信息
redis-clikeys \* #查看所有键值信息
redis-cli-n 1 keys "test*" | xargs redis-cli -n 1 del 删除DBID为1的test开头的key值
1.7 获取服务器的信息和统计
redis-cli info查询系统信息。默认为localhost,端口为6379。
redis-cli -p 6379 info | grep '\<used_memory\>'过滤查询used_memory属性
当used_memory_rss接近maxmemory或者used_memory_peak超过maxmemory时,要加大maxmemory负责性能下降
redis服务的统计信息:
redis_version:2.4.14 | Redis版本号 |
redis_git_sha1:00000000 |
|
redis_git_dirty:0 | Git版本?? |
arch_bits:64 | 64位系统 |
multiplexing_api:epoll |
|
gcc_version:4.1.2 | gcc版本号 |
process_id:5551 | 当前服务器进程id |
uptime_in_seconds:1538 | 正常工作时间(秒) |
uptime_in_days:0 | 正常工作天数 |
lru_clock:1975799 |
|
used_cpu_sys:0.04 | Cpu使用率 |
used_cpu_user:0.09 |
|
used_cpu_sys_children:0.01 |
|
used_cpu_user_children:0.04 |
|
connected_clients:2 | 客户端连接数 |
connected_slaves:0 | 从服务器连接数 |
client_longest_output_list:0 |
|
client_biggest_input_buf:0 |
|
blocked_clients:0 | 锁定的客户端 |
used_memory:3765272 | redis数据占用的内存,单位bytes(字节) |
used_memory_human:3.59M | 重点关注! |
used_memory_rss:4665344 | redis占用的物理内存 |
used_memory_peak:3756712 | redis使用物理内存的峰值 |
used_memory_peak_human:3.58M |
|
mem_fragmentation_ratio:1.24 | 内存碎片率 |
mem_allocator:jemalloc-2.2.5 | 内存分配器版本 |
loading:0 |
|
aof_enabled:0 | 是否开启纯累加模式 |
changes_since_last_save:0 |
|
bgsave_in_progress:0 | 后台异步保存数据的进程数 |
last_save_time:1340962658 |
|
bgrewriteaof_in_progress:0 | 异步重写 AOF 文件以反应当前数据库的状态的进程数 |
total_connections_received:3 | 接受到的总连接数 |
total_commands_processed:10156 | 服务器处理的命令数量 |
expired_keys:0 | 失效key的总数量 |
evicted_keys:0 | 已删除的key的总数量 |
keyspace_hits:0 | Key命中次数 |
keyspace_misses:0 | Key未命中次数 |
pubsub_channels:0 | 订阅信息 |
pubsub_patterns:0 |
|
latest_fork_usec:579 | 最近子进程 |
vm_enabled:0 | 是否使用虚拟内存0:不使用,1:使用 |
role:slave | master为主服务器slave为从服务器 |
master_host:127.0.0.1 | 连接主服务器IP |
master_port:6379 | 连接主服务器端口号 |
master_link_status:up |
|
master_last_io_seconds_ago:2 | 距离最后一次的连接时间 |
master_sync_in_progress:0 | 同步主服务器进程数 |
db0:keys=3,expires=0 | 1号数据库保存的key数量,及超时时间 |
db1:keys=1,expires=0 | 2号数据库保存的key数量,及超时时间 |
1.8 Redis的query分析
redis-faina(https://github.com/Instagram/redis-faina)是由Instagram开发并开源的一个Redis查询分析小工具,需安装python环境。
redis-faina 是通过Redis的MONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性,需root权限。
通过管道从stdin读取N条命令,直接分析
redis-cli -p 6439 monitor | head -n <NUMBER OF LINES TO ANALYZE>| ./redis-faina.py
从一个文件中读取117773条命令,再分析
redis-cli -p 6439 monitor | head -n 117773 > /tmp/outfile.txt
./redis-faina.py /tmp/outfile.txt
其输出结果如下:
Overall Stats
========================================
Lines Processed 117773
Commands/Sec 11483.44
Top Prefixes(按key前缀统计)
========================================
friendlist 69945
followedbycounter 25419
followingcounter 10139
recentcomments 3276
queued 7
Top Keys(操作最频繁的key)
========================================
friendlist:zzz:1:2 534
followingcount:zzz 227
friendlist:zxz:1:2 167
friendlist:xzz:1:2 165
friendlist:yzz:1:2 160
friendlist:gzz:1:2 160
friendlist:zdz:1:2 160
friendlist:zpz:1:2 156
Top Commands(执行最多的命令)
========================================
SISMEMBER 59545
HGET 27681
HINCRBY 9413
SMEMBERS 9254
MULTI 3520
EXEC 3520
LPUSH 1620
EXPIRE 1598
Command Time (microsecs)(命令执行时长)
========================================
Median 78.25
75% 105.0
90% 187.25
99% 411.0
Heaviest Commands (microsecs)(耗时最多的命令)
========================================
SISMEMBER 5331651.0
HGET 2618868.0
HINCRBY 961192.5
SMEMBERS 856817.5
MULTI 311339.5
SADD 54900.75
SREM 40771.25
EXEC 28678.5
Slowest Calls(最慢的命令)
========================================
3490.75 "SMEMBERS""friendlist:zzz:1:2"
2362.0 "SMEMBERS""friendlist:xzz:1:3"
2061.0 "SMEMBERS""friendlist:zpz:1:2"
1961.0 "SMEMBERS" "friendlist:yzz:1:2"
1947.5 "SMEMBERS""friendlist:zpz:1:2"
1459.0 "SISMEMBER""friendlist:hzz:1:2" "zzz"
1416.25 "SMEMBERS""friendlist:zhz:1:2"
1389.75 "SISMEMBER""friendlist:zzx:1:2" "zzz"
从上面结果我们可以看到对Redis的操作规律,比如针对哪些key在进行操作,进行了什么操作,这些操作的效率如何等相关有用信息。
由于Redis的MONITOR 也对性能有所影响,所以建议在使用时不要一直开启MONITOR来分析。可以采用定时抽样一段时间来做样本分析。