redis连接命令(客户端)
要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前安装redis 的src
目录下,具体为/usr/local/redis/src
。注意此redis实例没有设置密码,如果设置了密码需要先使用命令AUTH执行验证或者开始在命令行中通过-a
指定。
本地连接
[root@k8s-m2 src]# cd /usr/local/redis/src
[root@k8s-m2 src]# pwd
/usr/local/redis/src
[root@k8s-m2 src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
远程连接
如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。如下:
[root@k8s-m2 src]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> PING
PONG
redis 连接的基本命令
下表列出了 redis 连接的基本命令:
命令 | 说明 |
---|---|
AUTH password | 验证密码是否正确 |
ECHO message | 打印字符串 |
PING | 查看服务是否运行 |
QUIT | 关闭当前连接 |
SELECT index | 切换到指定的数据库,默认为0 |
redis密码设置
简单说一下redis中密码的设置,方法有两种:
- 方法一:通过命令设置密码(缺点就是临时生效,
重启服务器后密码会失效
),通过redis-cli连接后使用如下命令:
config set requirepass 123456
执行完毕,无需重启,退出客户端,重新登录就需要输入密码了 。 - 方法二:通过配置文件redis.conf设置密码(永久生效)
修改redis.conf中requirepass这行,后面跟的就是密码,默认是注释掉的,即不需要密码。将该行#
号删除后设置自己想要的密码,并重启redis服务即可。
实际使用中,生成环境可能之前没有设置密码,但是现在需要设置但是又不能立马重启redis服务,为防止重启服务器后密码失效,可以通过方法一 +
方法二来设置密码。临时设置一个密码并修改配置文件,不需要重启服务。
Redis服务端
Redis 服务器命令主要是用于管理 redis 服务。下表列出了 redis 服务器的相关命令:
命令 | 说明 |
---|---|
BGREWRITEAOF | 异步执行一个 AOF(AppendOnly File) 文件重写操作 |
BGSAVE | 在后台异步保存当前数据库的数据到磁盘 |
CLIENT KILL [ip:port] [ID client-id] | 关闭客户端连接 |
CLIENT LIST | 获取连接到服务器的客户端连接列表 |
CLIENT GETNAME | 获取连接的名称 |
CLIENT PAUSE timeout | 在指定时间内终止运行来自客户端的命令 |
CLIENT SETNAME connection-name | 设置当前连接的名称 |
CLUSTER SLOTS | 获取集群节点的映射数组 |
COMMAND | 获取 Redis 命令详情数组 |
COMMAND COUNT | 获取 Redis 命令总数 |
COMMAND GETKEYS | 获取给定命令的所有键 |
TIME | 返回当前服务器时间 |
COMMAND INFO command-name [command-name …] | 获取指定 Redis 命令描述的数组 |
CONFIG GET parameter | 获取指定配置参数的值 |
CONFIG REWRITE | 对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写 |
CONFIG SET parameter value | 修改 redis 配置参数,无需重启 |
CONFIG RESETSTAT | 重置 INFO 命令中的某些统计数据 |
DBSIZE | 返回当前数据库的 key 的数量 |
DEBUG OBJECT key | 获取 key 的调试信息 |
DEBUG SEGFAULT | 让 Redis 服务崩溃 |
FLUSHALL | 删除所有数据库的所有key |
FLUSHDB | 删除当前数据库的所有key |
INFO [section] | 获取 Redis 服务器的各种信息和统计数值 |
LASTSAVE | 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |
MONITOR | 实时打印出 Redis 服务器接收到的命令,调试用 |
ROLE | 返回主从实例所属的角色 |
SAVE | 同步保存数据到硬盘 |
SHUTDOWN [NOSAVE] [SAVE] | 异步保存数据到硬盘,并关闭服务器 |
SLAVEOF host port | 将当前服务器转变为指定服务器的从属服务器(slave server) |
SLOWLOG subcommand [argument] | 管理 redis 的慢日志 |
SYNC | 用于复制功能(replication)的内部命令 |
通用命令
keys pattern
用于查找所有符合给定模式(pattern)的key
命令 | 说明 | 举例 |
---|---|---|
keys * | 遍历所有 key | |
keys h[ae]*llo | 遍历以h开头,第二个字符为a-e之间的,以llo结尾的所有key | h[ae]llo matches hello and hallo, but not hillo |
keys h?llo | ?代表一个字符,有且只有 | h?llo matches hello, hallo and hxllo |
keys h*llo | *代表0个或者多个字符 | h*llo matches hllo and heeeello |
keys h[^e]llo | ^ 代表中间不是e的字符 | h[^e]llo matches hallo, hbllo, … but not hello |
dbsize | 计算 key 的总数 |
注意:keys命令一般不在生产环境中使用
- 由于生产环境中key的数量可能很多,而keys这个命令是一个O(n)的命令
- 由于Redis是单线程的,这个命令的操作会阻塞其他操作
- 可以在从节点上执行keys命令
- 使用SCAN命令代替keys命令
示例,可以观察一下不同通配符的效果。
127.0.0.1:6379>
127.0.0.1:6379> DBSIZE
(integer) 0
127.0.0.1:6379> MSET hello 1 hallo 2 hillo 3 hxllo 4 hllo 5 heeeello 6 hbllo 7
OK
127.0.0.1:6379> DBSIZE
(integer) 7
127.0.0.1:6379> KEYS h[ae]*llo
1) "hello"
2) "hallo"
3) "heeeello"
127.0.0.1:6379> KEYS h?llo
1) "hello"
2) "hallo"
3) "hbllo"
4) "hxllo"
5) "hillo"
127.0.0.1:6379> KEYS h*llo
1) "hello"
2) "hallo"
3) "hbllo"
4) "heeeello"
5) "hllo"
6) "hxllo"
7) "hillo"
127.0.0.1:6379> KEYS h[^e]llo
1) "hallo"
2) "hbllo"
3) "hxllo"
4) "hillo"
127.0.0.1:6379>
exists key
用于检查给定的key是否存在。存在返回 1,不存在返回 0 。
示例,接上面的例子继续:
127.0.0.1:6379> EXISTS hello
(integer) 1
127.0.0.1:6379> EXISTS hello1
(integer) 0
127.0.0.1:6379>
del key1 [key2…]
用于 在 key 存在时删除 key。存在返回 1, 不存在返回 0 。
示例,接上面的例子继续:
127.0.0.1:6379> DEL hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> DEL hello
(integer) 0
127.0.0.1:6379>
expire key second、ttl key、persist key
命令 | 说明 |
---|---|
expire key second | 为给定 key 设置过期时间,单位为秒,到期后key就不存在了。默认设置的key无过期时间 |
ttl key | 以秒为单位,返回给定key的剩余生存时间(TTL , time to live)。不存在 key 返回 -2 ,无过期时间的 key 返回-1 |
persist key | 移除 key 的过期时间,key 将持久保存 |
示例,接上面的例子继续:
127.0.0.1:6379> EXPIRE hallo 10
(integer) 1
127.0.0.1:6379> ttl hallo
(integer) 8
127.0.0.1:6379> ttl hallo
(integer) 2
127.0.0.1:6379> ttl hallo
(integer) -2
127.0.0.1:6379> get hallo
(nil)
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> expire hello 30
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 26
127.0.0.1:6379> PERSIST hello
(integer) 1
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379>
type
用于返回 key 所存储的值的类型,不存在的 key 返回none
示例,接上面的例子继续:
127.0.0.1:6379> TYPE hello
string
127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> TYPE set1
set
127.0.0.1:6379> TYPE set2
none
127.0.0.1:6379>
flushdb、flushall
用于删除key
命令 | 含义 |
---|---|
flushdb | 删除当前数据库中的所有 key |
flushall | 删除所有数据库中的 key |
更多关于keys的命令
命令 | 说明 |
---|---|
DUMP key | 序列化给定 key ,并返回被序列化的值。 |
MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 当中。 |
PTTL key | 以毫秒为单位返回 key 的剩余的过期时间。 |
RANDOMKEY | 从当前数据库中随机返回一个 key 。 |
RENAME key newkey | 修改 key 的名称 |
RENAMENX key newkey | 仅当 newkey 不存在时,将 key 改名为 newkey 。 |
SCAN cursor [MATCH pattern] [COUNT count] | 迭代数据库中的数据库键。 |
select database_number | 切换当前使用的数据库,默认使用0 |
查看当前使用redis的信息
INFO命令,可以全局查看当前redis的相关信息,主要包括Server、Clients、Memory、Persistence、Stats、Replication、CPU、Modules、Cluster、Keyspace。大家可以自行查看一下各模块下面包括的信息。
可以使用 INFO 模块名 具体查看某个模块的信息,如下,查看当前使用的数据库信息(包括可以当前使用的db,key数量等):
127.0.0.1:6379> DBSIZE
(integer) 6
127.0.0.1:6379> MOVE hello 1
(integer) 1
127.0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=5,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
上面的示例是将0 号数据库中hello这个key移到1 号数据库,然后通过INFO查看到相关信息。
更多关于redis的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出