Redis提供了丰富的命令,可以对数据库和各种数据类型进行操作,这些命令可以在Windows和Linux中使用。
1、键值相关命令
1.1、KEYS
KEYS用于返回满足pattern的所有key,pattern支持以下通配符:
- *:匹配任意字符。
- ?:匹配一个任意字符。
- []:匹配方括号内任一单个字符,例如[a-z]表示匹配26个小写字母中的任意一个字符,a[b-e]表示匹配ab、ac、ad和ae字符串。
- \x:匹配特殊字符,例如\?、*。
实例如下:
# 添加测试数据
127.0.0.1:6379> MSET one 1 two 2 three 3 four 4 five 5
OK
# 查看当前数据库下的所有key
127.0.0.1:6379> KEYS *
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# 查找第一个字符为f的key
127.0.0.1:6379> KEYS f*
1) "four"
2) "five"
# 查找第一个字符为t的key
127.0.0.1:6379> KEYS t??
1) "two"
# 查找第二个字符为o的key
127.0.0.1:6379> KEYS ?o*
1) "four"
# 查找以f开头的,包含字母字符串的key
127.0.0.1:6379> KEYS f[a-z]*
1) "four"
2) "five"
使用KEYS*可以得到当前Redis数据库中的所有key。
1.2、SCAN
SCAN用于迭代数据库中的key。SCAN命令是一个基于游标的迭代器,每次被调用之后都会向用户返回一个新游标,用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的迭代过程。
SCAN返回一个包含两个元素的数组,第一个元素是用于进行下一次迭代的新游标,而第二个元素则是一个数组,这个数组中包含了所有被迭代的元素。如果返回的新游标为0则表示迭代已结束。
SCAN命令的基本语法如下:
SCAN cursor [MATCH pattern] [COUNT count]
SCAN命令的参数包括:
- cursor:游标。
- pattern:匹配的模式。
- count:指定从数据集里返回多少元素,默认值为10。
实例如下:
使用SET命令创立50条String类型的数据。限于篇幅本节只列出创建2条数据的命令,剩下48条数据,请大家自行创建:
127.0.0.1:6379> SET key:1 1
OK
127.0.0.1:6379> SET key:2 2
OK
使用SCAN命令迭代数据库中的key:
127.0.0.1:6379> SCAN 0 # 使用 0 作为游标,开始新的迭代
1) "20" # 第1次迭代时返回的游标
2) 1) "key:40"
2) "key:49"
3) "key:48"
4) "key:24"
5) "key:34"
6) "key:3"
7) "key:37"
8) "key:5"
9) "key:32"
10) "key:33"
11) "key:7"
127.0.0.1:6379> SCAN 20 # 使用第一次迭代时返回的游标 17 开始新的迭代
1) "26" # 第2次迭代时返回的游标
2) 1) "key:42"
2) "key:13"
3) "key:30"
4) "key:20"
5) "key:38"
6) "key:25"
7) "key:43"
8) "key:14"
9) "key:47"
10) "key:28"
1.3、EXISTS
EXISTS用于查看key是否存在,如果key存在则返回1,否则返回0。
实例如下:
127.0.0.1:6379> SET name xinping
OK
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS address
(integer) 0
结果表明不存在address,但是存在name。
1.4、DEL
DEL用于删除key,返回被删除key的个数。
实例如下:
127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> DEL name
(integer) 0
在本例中可以看出name是存在的,删除后就不存在了。
1.5、EXPIRE
EXPIRE用于设置key的过期时间,单位为秒。超过该时间后,key被自动删除。
返回值为1表示已设置key的过期时间;返回值为0则表示key不存在,不能设置其过期时间。
注意:如果key已经存在过期时间,则通过EXPIRE设置的时候会覆盖之前的过期时间。
实例如下:
127.0.0.1:6379> SET cache_page "www.jd.com"
OK
127.0.0.1:6379> EXPIRE cache_page 60
(integer) 1
在本例中,使用EXPIRE让cache_page存在60s。等待60s后cache_page被自动删除,就不存在了。可以使用EXISTS查看cache_page。
127.0.0.1:6379> EXISTS cache_page
(integer) 0
1.6、TTL
TTL用于获取key所剩的过期时间。该命令以秒为单位返回key的剩余时间,如果key不存在或没有超时设置,则返回-2。
实例如下:
127.0.0.1:6379> SET cache_page2 "www.jd.com"
OK
127.0.0.1:6379> EXPIRE cache_page2 60
(integer) 1
127.0.0.1:6379> TTL cache_page2
(integer) 56
127.0.0.1:6379> TTL cache_page2
(integer) 35
127.0.0.1:6379> TTL cache_page2
(integer) 25
127.0.0.1:6379> TTL cache_page2
(integer) 8
127.0.0.1:6379> TTL cache_page2
(integer) -2
在本例中,我们设置cache_page2的过期时间是60s,然后我们不断用TTL来获取cache_page2的剩余时间,直至为-2,说明cache_page2已过期。
1.7、SELECT
SELECT用于选择数据库,数据库为0~15(一共16个数据库)。
实例如下:
SELECT 1
在本例中,选择数据库1。
1.8、MOVE
MOVE,用于将当前数据库中的key转移到其他数据库中。
实例如下:
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> SET age 20
OK
127.0.0.1:6379> GET age
"20"
127.0.0.1:6379> MOVE age 1
(integer) 1
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379[1]> SELECT 1
OK
127.0.0.1:6379[1]> GET age
"20"
在本例中,我们先显式地选择了数据库0,然后在这个数据库中设置一个key,即age;接下来我们将age从数据库0转移到数据库1;然后我们在数据库0中确认了没有age,但在数据库1中存在age,说明转移age成功了。
1.9、PERSIST
PERSIST用于删除key的过期时间。
实例如下:
127.0.0.1:6379> SET age 20
OK
127.0.0.1:6379> EXPIRE age 20
(integer) 1
127.0.0.1:6379> TTL age
(integer) 18
127.0.0.1:6379> PERSIST age
(integer) 1
127.0.0.1:6379> PERSIST age
(integer) 0
127.0.0.1:6379> TTL age
(integer) -1
在本例中,我们手动地删除了age的过期时间。
1.10、RANDOMKEY
RANDOMKEY用于随机返回key空间中的一个key。
实例如下:
127.0.0.1:6379> SET age1 20
OK
127.0.0.1:6379> SET age2 21
OK
127.0.0.1:6379> RANDOMKEY
"age2"
127.0.0.1:6379> RANDOMKEY
"age1"
通过本例的结果可以看到,取key时是随机的。
1.11、RENAME
RENAME用于重命名key。
实例如下:
127.0.0.1:6379> SET age3 20
OK
127.0.0.1:6379> RENAME age3 age4
OK
127.0.0.1:6379> GET age4
"20"
在本例中,我们看到age3被我们成功改名为age4了。
1.12、TYPE
TYPE用于获取key关联值的类型,并以字符串的格式返回结果。返回的字符串为String、List、Set、Hash和Sorted Set,如果key不存在则返回none。
实例如下:
127.0.0.1:6379> SET name wangwu
OK
127.0.0.1:6379> TYPE name
string
127.0.0.1:6379> LPUSH ls1 a
(integer) 1
127.0.0.1:6379> TYPE ls1
List
127.0.0.1:6379> TYPE age
none
在本例中,可以看出使用TYPE命令能返回key关联值的类型。
2、服务器相关命令
2.1、PING
PING使用客户端向Redis服务器发送一个“PING”字符串。如果Redis服务器运行正常的话,会返回一个“PONG”字符串,用来测试客户端与Redis服务器的连接是否依然生效。
实例如下:
127.0.0.1:6379> PING
PONG
2.2、ECHO
可以通过ECHO在命令行输出一些内容。
实例如下:
127.0.0.1:6379> ECHO "hello world"
"hello world"
2.3、QUIT
可以通过QUIT退出当前Redis连接。
实例如下。
127.0.0.1:6379> QUIT
[root@bogon bin]#
2.4、DBSIZE
DBSIZE用于查看当前数据库中key的数目。
实例如下:
127.0.0.1:6379> DBSIZE
(integer) 2
127.0.0.1:6379> KEYS *
1) "name"
2) "ls1"
在本例中,可以看出当前数据库中有两个key。
2.5、INFO
INFO用于查看Redis服务器的各种信息和统计数值。
实例如下:
127.0.0.1:6379> INFO
# Server #Redis的服务器信息
redis_version:6.0.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b50d302201129968
redis_mode:standalone
os:Linux 3.10.0-693.11.6.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll # Redis的事件循环机制
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:2800
run_id:4dd2e989b43c18f63d32eab9745d98abe00929ae # 标识Redis服务器的随机值
tcp_port:6379
uptime_in_seconds:7 # Redis服务器启动的时间(单位s)
uptime_in_days:0 # Redis服务器启动的时间(单位day)
hz:10
lru_clock:6416788
executable:/root/redis-server
config_file:/usr/local/redis/conf/redis.conf
# Clients # 已连接客户端信息
connected_clients:1 # 连接的客户端数
client_longest_output_list:0 # 当前客户端连接的最大输出列表
client_biggest_input_buf:0 # 当前客户端连接的最大输入buffer
blocked_clients:0 # 被阻塞的客户端数
# Memory # 内存信息
used_memory:828512 # 使用内存(单位Byte)
used_memory_human:809.09K # 以更直观的单位显示分配的内存总量
used_memory_rss:4763648 # 系统给Redis分配的内存(即常驻内存)
used_memory_rss_human:4.54M
used_memory_peak:828512 # 内存使用的峰值大小
used_memory_peak_human:809.09K # 以更直观的单位显示内存使用峰值
used_memory_peak_perc:100.13%
used_memory_overhead:815278
used_memory_startup:765648
used_memory_dataset:13234
used_memory_dataset_perc:21.05%
total_system_memory:1022627840
total_system_memory_human:975.25M
used_memory_lua:37888 # Lua引擎使用的内存
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:5.75 # used_memory_rss/used_memory比例
mem_allocator:jemalloc-4.0.3 # 内存分配器
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence # 持久化的相关信息
loading:0
rdb_changes_since_last_save:0 # 自上次RDB保存以后更改的次数
rdb_bgsave_in_progress:0 # 表示当前是否在进行bgsave操作,如果是则为1
rdb_last_save_time:1516366221 # 上次保存RDB文件的时间戳
rdb_last_bgsave_status:ok # 上次保存的状态
rdb_last_bgsave_time_sec:-1 # 上次保存RDB文件已花费的时间(单位s)
rdb_current_bgsave_time_sec:-1 # 目前保存RDB文件已花费的时间(单位s)
rdb_last_cow_size:0
aof_enabled:0 # 是否开启AOF,默认没开启
aof_rewrite_in_progress:0 # 标识AOF的rewrite操作是否在进行
aof_rewrite_scheduled:0 # 标识是否将要在RDB保存操作结束后执行
aof_last_rewrite_time_sec:-1 # 上次rewrite操作使用的时间(单位s)
aof_current_rewrite_time_sec:-1 # 如果rewrite操作正在进行,则记录所使用的时间
aof_last_bgrewrite_status:ok # 上次rewrite操作的状态
aof_last_write_status:ok
aof_last_cow_size:0
# 开启AOF后增加的一些信息
aof_current_size:0 # AOF当前大小
aof_base_size:0 # AOF上次启动或rewrite的大小
aof_pending_rewrite:0 # 同上面的aof_rewrite_scheduled
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计数器TODO
-----------------------------
# Stats # 一般统计信息
total_connections_received:1 # 自启动起连接过的总数
total_commands_processed:1 # 自启动起执行命令的总数
instantaneous_ops_per_sec:0 # 每秒执行的命令个数
total_net_input_bytes:31
total_net_output_bytes:10163
instantaneous_input_kbps:0.01
instantaneous_output_kbps:6.14
rejected_connections:0 # 因为最大客户端连接限制而导致被拒绝连接的个数
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0 # 自启动起过期的key的个数
evicted_keys:0 # 因为内存大小限制而被驱逐出去的key的个数
keyspace_hits:0 # 在main dictionary(todo)中成功查到的key的个数
keyspace_misses:0 # 在main dictionary(todo)中未查到的key的个数
pubsub_channels:0 # 发布/订阅频道数
pubsub_patterns:0 # 发布/订阅模式数
latest_fork_usec:0 # 上次的fork操作使用的时间(单位ms)
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication # 主/从复制信息
role:master # 角色
connected_slaves:0 # 连接的从库数
master_replid:4066f05f8e6cfcf9228a1450a25efaa551f954a2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU # CPU计算量的统计信息
used_cpu_sys:0.01 # Redis服务器的系统CPU使用率
used_cpu_user:0.00 # Redis服务器的用户CPU使用率
used_cpu_sys_children:0.00 # 后台进程的系统CPU使用率
used_cpu_user_children:0.00 # 后台进程的用户CPU使用率
# Cluster # Redis集群信息
cluster_enabled:0
# Keyspace # 数据库相关统计信息
db0:keys=1,expires=0,avg_ttl=0 # 数据库0中的key的个数
2.6、MONITOR
MONITOR用于实时输出Redis服务器接收到的命令,可供调试使用。
首先使用redis-cli命令打开第一个客户端,执行以下命令:
127.0.0.1:6379> MONITOR
OK
然后使用redis-cli命令打开第二个客户端,执行以下命令存储数据:
127.0.0.1:6379> SET name wangwu
OK
127.0.0.1:6379> GET name
"wangwu"
最后查看第一个客户端,会看到如下信息:
127.0.0.1:6379> MONITOR
OK
1525610398.977423 [0 127.0.0.1:53469] "set" "name" "wangwu"
1525610400.361838 [0 127.0.0.1:53469] "get" "name"
从结果可看出,此Redis服务器目前接收了命令set和get。
2.7、CONFIG GET
CONFIG GET用于获取Redis服务器的配置信息。
实例如下:
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
在本例中,我们使用CONFIG GET获取了dir参数配置的值。如果想获取全部参数配置的值,执行CONFIG GET*就可以将全部参数配置的值都显示出来。
2.8、FLUSHDB
FLUSHDB用于删除当前选择的数据库中的所有key。
实例如下:
127.0.0.1:6379> SELECT 0
OK
127.0.0.1:6379> KEYS *
1) "name"
2) "age"
127.0.0.1:6379> FLUSHDB
OK
2.9、FLUSHALL
FLUSHALL用于删除所有数据库中的key。
实例如下:
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS * #查询数据库0的所有key
(empty list or set)
127.0.0.1:6379> SELECT 1 #使用数据库1
OK
127.0.0.1:6379[1]> KEYS * #查询数据库1的所有key
(empty list or set)
在本例中,我们使用FLUSHALL命令删除了所有数据库中的key,查看数据库0中的key,发现都被删除了;然后切换到数据库1,发现数据库1中的key也被删除了。