Redis-cli的常见操作

本文主要介绍Redis及redis-cli的使用方式,介绍redis操作中的一些常见的命令。

分为以下几个部分介绍:

  • docker中的redis如何进入命令模式
  • redis的常见命令及用法
  • 有哪些比较好的redis连接工具

进入redis的命令模式

以下实例讲解了如何启动 redis 客户端:

启动 redis 服务器,打开终端并输入命令redis-cli,该命令会连接本地的redis 服务。

1
2
$ redis-cli
redis 127.0.0.1:6379>

如果我们是使用的docker启动的redis,那该怎么办呢?比如下图中的imooc-redis
图片

我们可以使用如下的命令进入redis的命令模式:

图片

方便复制:

1
docker exec -it imooc-redis redis-cli

这里的imooc-redis可以换成自己的容器的名称
如果自己的redis设置的密码,则输入命令后会出现如下提示:

图片

那么可以使用auth命令进行登录鉴权:

图片

redis的常见命令及用法

key操作命令

获取所有键

语法:keys pattern

1
2
127.0.0.1:6379> keys *
1) "toimc"

*表示通配符,表示任意字符,会遍历所有键显示所有的键列表,时间复杂度O(n),在生产环境不建议使用。

获取键总数

语法:dbsize

1
2
127.0.0.1:6379> dbsize
(integer) 6

获取键总数时不会遍历所有的键,直接获取内部变量,时间复杂度O(1)。

查询键是否存在

语法:exists key [key …]

1
2
127.0.0.1:6379> exists toimc java
(integer) 2

查询查询多个,返回存在的个数。

删除键

语法:del key [key …]

1
2
127.0.0.1:6379> del java toimc
(integer) 1

可以删除多个,返回删除成功的个数。

查询键类型

语法: type key

1
2
127.0.0.1:6379> type toimc
string

移动键

语法:move key db

如把toimc移到2号数据库。

1
2
3
4
5
6
127.0.0.1:6379> move toimc 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "toimc"

查询key的生命周期(秒)

秒语法:ttl key
毫秒语法:pttl key

1
2
127.0.0.1:6379[2]> ttl toimc
(integer) -1

-1:永远不过期。

设置过期时间

秒语法:expire key seconds
毫秒语法:pexpire key milliseconds

1
2
3
4
127.0.0.1:6379[2]> expire toimc 60
(integer) 1
127.0.0.1:6379[2]> ttl toimc
(integer) 55

设置永不过期

语法:persist key

1
2
127.0.0.1:6379[2]> persist toimc
(integer) 1

更改键名称

语法:rename key newkey

1
2
127.0.0.1:6379[2]> rename toimc toimc123
OK

字符串操作命令

字符串是Redis中最基本的数据类型,单个数据能存储的最大空间是512M。

存放键值

语法:set key value [EX seconds] [PX milliseconds] [NX|XX]

nx:如果key不存在则建立,xx:如果key存在则修改其值,也可以直接使用setnx/setex命令。

1
2
127.0.0.1:6379> set toimc 666
OK

获取键值

语法:get key

1
2
127.0.0.1:6379[2]> get toimc
"666"

值递增/递减

如果字符串中的值是数字类型的,可以使用incr命令每次递增,不是数字类型则报错。

语法:incr key

1
2
127.0.0.1:6379[2]> incr toimc
(integer) 667

一次想递增N用incrby命令,如果是浮点型数据可以用incrbyfloat命令递增。
同样,递减使用decr、decrby命令。

批量存放键值

语法:mset key value [key value …]

1
2
127.0.0.1:6379[2]> mset java1 1 java2 2 java3 3
OK

获取获取键值

语法:mget key [key …]

1
2
3
127.0.0.1:6379[2]> mget java1 java2
1) "1"
2) "2"

Redis接收的是UTF-8的编码,如果是中文一个汉字将占3位返回。

获取值长度

语法:strlen key
127.0.0.1:6379[2]> strlen toimc
(integer) 3

追加内容

语法:append key value

1
2
127.0.0.1:6379[2]> append toimc hi
(integer) 5

向键值尾部添加,如上命令执行后由666变成666hi

获取部分字符

语法:getrange key start end

1
2
> 127.0.0.1:6379[2]> getrange toimc 0 4
"javas"

散列操作命令

redis字符串类型键和值是字典结构形式,这里的散列类型其值也可以是字典结构。

存放键值

单个语法:hset key field value

1
2
127.0.0.1:6379> hset user name toimc
(integer) 1

多个语法:hmset key field value [field value …]

1
2
127.0.0.1:6379> hmset user name toimc age 20 address china
OK

不存在时语法:hsetnx key field value

1
2
127.0.0.1:6379> hsetnx user tall 180
(integer) 0

获取字段值

单个语法:hget keyfield

1
2
127.0.0.1:6379> hget user age
"20"

多个语法:hmget key field [field …]

1
2
3
4
127.0.0.1:6379> hmget user name age address
1) "toimc"
2) "20"
3) "china"

获取所有键与值语法:hgetall key

1
2
3
4
5
6
7
127.0.0.1:6379> hgetall user
1) "name"
2) "toimc"
3) "age"
4) "20"
5) "address"
6) "china"

获取所有字段语法:hkeys key

1
2
3
4
5
127.0.0.1:6379> hkeys user
1) "name"
2) "address"
3) "tall"
4) "age"

获取所有值语法:hvals key

1
2
3
4
5
127.0.0.1:6379> hvals user
1) "toimc"
2) "china"
3) "170"
4) "20"

判断字段是否存在

语法:hexists key field

1
2
127.0.0.1:6379> hexists user address
(integer) 1

获取字段数量

语法:hlen key

1
2
127.0.0.1:6379> hlen user
(integer) 4

递增/减

语法:hincrby key fieldincrement

1
2
127.0.0.1:6379> hincrby user tall -10
(integer) 170

删除字段

语法:hdel key field [field …]

1
2
127.0.0.1:6379> hdel user age
(integer) 1

数据库相关

Redis数据库的数量是固定的,并在配置文件中设置。默认情况下,你有16个数据库。每个数据库都由一个数字(而不是名称)来标识。

你可以使用以下命令CONFIG````GET````data``b``as``e``s来了解数据库的数量:

1
2
3
CONFIG GET databases
1) "databases"
2) "16"

也可以使用以下命令INFO或者INFO keyspace列出定义了某些键的数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
INFO
# Server
redis_version:5.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:ce75a617c591114f
redis_mode:standalone
os:Linux 3.10.0-1062.4.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.0
process_id:1
run_id:75ea4375ee7a6f41697f721e268d148dc8af24e8
tcp_port:6379
uptime_in_seconds:7316762
uptime_in_days:84
hz:10
configured_hz:10
lru_clock:2935552
executable:/data/redis-server
config_file:

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

# Memory
used_memory:925608
used_memory_human:903.91K
used_memory_rss:12644352
used_memory_rss_human:12.06M
used_memory_peak:3896552
used_memory_peak_human:3.72M
used_memory_peak_perc:23.75%
used_memory_overhead:892348
used_memory_startup:791296
used_memory_dataset:33260
used_memory_dataset_perc:24.76%
allocator_allocated:917808
allocator_active:1163264
allocator_resident:3743744
total_system_memory:16637751296
total_system_memory_human:15.50G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.27
allocator_frag_bytes:245456
allocator_rss_ratio:3.22
allocator_rss_bytes:2580480
rss_overhead_ratio:3.38
rss_overhead_bytes:8900608
mem_fragmentation_ratio:14.31
mem_fragmentation_bytes:11760736
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:100460
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:7989
rdb_bgsave_in_progress:0
rdb_last_save_time:1606231526
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

# Stats
total_connections_received:4006
total_commands_processed:81735
instantaneous_ops_per_sec:0
total_net_input_bytes:3084119
total_net_output_bytes:22777832
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:759
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:63631
keyspace_misses:2192
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
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:7e9137e98814fa2b756aff0e339de997cc1309a1
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
used_cpu_sys:8093.459923
used_cpu_user:4547.190025
used_cpu_sys_children:0.011915
used_cpu_user_children:0.003634

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=7,expires=1,avg_ttl=177400

查看单个片区:

1
2
3
4
5
INFO keyspace
# Keyspace
db0:keys=10,expires=0
db1:keys=1,expires=0
db3:keys=1,expires=0

或者使用redis的GUI工具来查看:

图片

推荐redis学习文档

更多redis的命令可以参考如下网址:

[1] http://doc.redisfans.com/

[2] http://www.redis.cn/