【Redis】redis通用命令

时间:2024-03-01 17:20:59

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的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出