常用命令

官方文档:https://redis.io/commands

中文文档:http://redisdoc.com/

显示信息 INFO

  • 显示当前节点redis运行状态信息
127.0.0.1:6379> info
# Server
redis_version:5.0.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:28849dbea6f07cc8
redis_mode:standalone
os:Linux 4.18.0-240.22.1.el8_3.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.1
process_id:34846
run_id:faa3c6db0c31195fcde2273323ae6446732acae9
tcp_port:6379
uptime_in_seconds:152030
uptime_in_days:1
hz:10
configured_hz:10
lru_clock:15876727
executable:/usr/bin/redis-server
config_file:/etc/redis.conf

# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0

# Memory
used_memory:853904
used_memory_human:833.89K
...

#显示部分信息
127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:0

切换数据库 SELECT

  • 切换数据库,相当于MySQL中的USE DBNAME执行
127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:0

127.0.0.1:6379> SELECT 0
OK
127.0.0.1:6379> SELECT 5
OK
127.0.0.1:6379[5]> SELECT 15
OK
127.0.0.1:6379[15]> SELECT 16
(error) ERR DB index is out of range #超出库数量会报错

#在redis cluster模式下不支持多个数据库,会出现下面错误
127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:1
127.0.0.1:6379> SELECT 0
OK
127.0.0.1:6379> SELECT 1
(error) ERR SELECT is not allowed in cluster mode

过滤当前库的key KEYS

此命令慎用!!!!! 如果使用 KEY * 指令,会导致磁盘产生大量的IO以及CPU占有率会瞬间飙到100%,这时如果有用户查询数据,redis则不能及时响应,从而会导致大量用户的请求被转发到后端的MySQL进行查询,从而引起雪崩效应,导致MySQL宕机等情况发生

127.0.0.1:6379[15]> SELECT 0
OK
127.0.0.1:6379> KEYS * #匹配当前库内的所有key
1) "four"
2) "two"
3) "one"
4) "xz"
5) "azheng"
127.0.0.1:6379> KEYS *o* #通配关键字
1) "four"
2) "two"
3) "one"
127.0.0.1:6379> KEYS o* #通配关键字
1) "one"
127.0.0.1:6379> KEYS f??? #通配关键字
1) "four"
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
(empty list or set)

#生产中建议修改的配置 /etc/redis.conf
rename-command KEYS "eowqjewq" #将此命令改成别名达成禁用的目的
或者
rename-command KEYS "" #禁用

保存持久化 BGSAVE

  • 手动在后台执行RDB持久化操作
[root@aliyun ~]# ll /var/lib/redis/
total 8
-rw-r--r-- 1 redis redis  92 Jul 16 19:27 appendonly.aof
-rw-r--r-- 1 redis redis 120 Jul 17 11:12 dump.rdb

127.0.0.1:6379> BGSAVE
Background saving started

[root@aliyun ~]# ll /var/lib/redis/ -t
total 8
-rw-r--r-- 1 redis redis 120 Jul 17 11:23 dump.rdb
-rw-r--r-- 1 redis redis  92 Jul 16 19:27 appendonly.aof

显示key数量 DBSIZE

  • 返回当前库下的所有 key 的数量
127.0.0.1:6379> KEYS *
1) "two"
2) "one"
3) "three"
127.0.0.1:6379> DBSIZE
(integer) 3

FLUSHDB

  • 强制清空当前库中的所有key,此命令慎用!
127.0.0.1:6379> DBSIZE
(integer) 3
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> DBSIZE
(integer) 0

FLUSHALL

  • 强制清空所有库中的所有key,即删除所有数据,此命令慎用!
127.0.0.1:6379> FLUSHALL
OK

#生产中建议修改的配置 /etc/redis.conf
rename-command FLUSHALL "ekowqemwq" #将此命令改成别名达成禁用的目的
或者
rename-command FLUSHALL "" #禁用

SHUTDOWN

  • 安全的关闭redis

SHUTDOWN [SAVE|NOSAVE]

时间复杂度: O(N),其中 N 为关机时需要保存的数据库键数量。

SHUTDOWN 命令执行以下操作:

  • 停止所有客户端
  • 如果有至少一个保存点在等待,执行 SAVE 命令
  • 如果 AOF 选项被打开,更新 AOF 文件
  • 关闭 redis 服务器(server)
  • 如果持久化被打开的话, SHUTDOWN 命令会保证服务器正常关闭而不丢失任何数据
另一方面,假如只是单纯地执行 SAVE 命令,然后再执行 QUIT 命令,则没有这一保证 —— 因为在执行 SAVE 之后、执行 QUIT 之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。

SAVE 和 NOSAVE 修饰符
通过使用可选的修饰符,可以修改 SHUTDOWN 命令的表现。比如说:

执行 SHUTDOWN SAVE 会强制让数据库执行保存操作,即使没有设定(configure)保存点

执行 SHUTDOWN NOSAVE 会阻止数据库执行保存操作,即使已经设定有一个或多个保存点(你可以将这一用法看作是强制停止服务器的一个假想的 ABORT 命令)

返回值
执行失败时返回错误。 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。

代码示例
redis> PING
PONG

redis> SHUTDOWN

$

$ redis
Could not connect to Redis at: Connection refused
not connected>