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也被删除了。