Redis 常用命令-下

2022-05-17 14:27:31 浏览数 (1)

客户端设置

通过 redis-cli 命令连接到 Redis 服务器以后,可以通过本节给出的命令来管理该连接对应的客户端,具体包括获取并设置客户端的名字、获取客户端的信息、暂停执行客户端的命令以及关闭该客户端的连接。

设置客户端名字

代码语言:javascript复制
127.0.0.1:6379> client getname
(nil)
127.0.0.1:6379> client setname heiha
OK
127.0.0.1:6379> client getname
"heiha"

通过 client list 命令查看客户端的信息

代码语言:javascript复制
127.0.0.1:6379> client list
id=4 addr=127.0.0.1:35282 laddr=127.0.0.1:6379 fd=9 name= age=17618 idle=17609 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=20504 events=r cmd=keys user=default redir=-1
id=7 addr=127.0.0.1:35288 laddr=127.0.0.1:6379 fd=8 name=heiha age=7399 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
127.0.0.1:6379>
  • id 表示客户端的编号。
  • addr 表示客户端的地址。
  • age 表示客户端的连接时长,单位是秒。
  • idle 表示客户端的空闲时常,单位是秒。
  • db 表示客户端用到的服务器的数据库索引号,默认每个 Redis 服务器有16个数据库,而且默认会使用 0 号数据库。
  • cmd 表示客户端最近执行的命令。
  • user 表示登录服务器用到的用户名。这里只连接了一个客户端,如果有多个客户端连接,那么该命令能以多行的形式返回所有的客户端信息。

如果当前 Redis 服务器负载过大,就可以通过 client pause 命令暂停执行来自客户端的命令。

代码语言:javascript复制
client pause 10000

客户端发起 set 命令,但不会立即执行,而是等到暂停时间到了以后才继续执行。

在实际应用中,一般不会更改 Redis 服务器的数据库个数,但是当不同的应用同时使用同一个 Redis 服务器时,建议让不同的应用使用不同的数据库,比如让订单应用模块使用 0 号数据库,会员应用模块使用 1 号数据库。

通过 client kill 命令中断客户端连接 client kill 命令的格式如下:

代码语言:javascript复制
client kill [ip:port]

注意:这个命令是中断客户端的连接,而不是中断服务器本身的服务。

通过 shutdown 命令关闭服务器和客户端。 shutdown 命令会终止服务器上的所有客户端连接,并终止服务器。

服务端设置

通过 info 命令能查看当前服务器的相关信息,该命令的返回结果比较多,这里只给出描述 Server 信息部分的返回信息。大家在自己机器上运行后就能看到所有的返回。

除了 Server 部分的信息外,该命令还能返回如下部分的信息。 Clients 部分包含了已连接的客户端的信息。 Memory 部分包含了描述 Redis 服务器内存的相关信息。 Persistence 部分包含了持久化相关的信息。 Stats 部分包含了和服务器相关的统计信息,比如执行了多少条命令。 Replication 部分包含了和数据库主从复制相关的信息。 CPU 部分包含了 Redis 服务器所在机器 CPU 的相关信息。 Cluster 部分包含了和 Redis 集群相关的信息。 Keyspace 部分包含了和 Redis 数据库相关的统计信息,比如键的数量和超时时间等。

在 info 可以添加上面的大类。比如后面加上 Clients 参数就能看到客户端的连接状况。添加 Cluster 部分包含了和 Redis 集群相关的信息。

info Clients

代码语言:javascript复制
127.0.0.1:6379> info Clients
# Clients
connected_clients:2
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0```

info Cluster

代码语言:javascript复制
127.0.0.1:6379> info Cluster
# Cluster
cluster_enabled:0

增加最大连接数

运行 info Stat 命令,在返回结果里有一项 rejected_connections,表示因超过最大连接数而被拒绝的客户端连接次数,如果该数值很大,就说明有大量的客户端无法连接上,这可能会影响性能。

代码语言:javascript复制
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
代码语言:javascript复制
127.0.0.1:6379>  config set maxclients 10
OK
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10"

观察内存用量

Redis 在内存中缓存数据,如果缓存数据太多,或者大量键没有设置过期时间(expired time),就会造成内存使用过大,从而导致OOM 问题。在疑似有内存问题时,可以通过 info memory 命令观察当前 Redis 服务器的内存使用情况,在返回结果里需要关注如下参数指标。used_memory_human,该参数表示操作系统分配给 Redis多少内存。used_memory_peak_human,该参数表示 Redis 服务器用到的内存峰值。used_memory_lua_human,该参数表示 lua 脚本所占用的内存用量。used_memory_scripts_human,该参数表示脚本所占用的内存用量。mem_clients_slaves,该参数表示因客户端主从复制而使用的内存用量。如果有内存相关问题,可以先通过used_memory_human 和 used_memory_peak_human 指标观察当前内存用量和内存峰值,如果值比较大,还可以通过其他指标来观察内存的消耗情况。

通过 command count 命令能统计当前 Redis 服务器命令的个数。

可以通过 command info 命令查看指定命令的详细信息(可以同时查看多个命令)

代码语言:javascript复制
127.0.0.1:6379> command info set
1) 1) "set"
   2) (integer) -3
   3) 1) write
      2) denyoom
   4) (integer) 1
   5) (integer) 1
   6) (integer) 1
   7) 1) @write
      2) @string
      3) @slow

获取指定命令的所有键通过 command getkeys 命令能获取指定命令的所有键。

代码语言:javascript复制
127.0.0.1:6379> command getkeys set a b
1) "a"
127.0.0.1:6379> command getkeys mset a b c d e f
1) "a"
2) "c"
3) "e"

查看服务器的配置可以通过 config get 命令来查看服务器的配置,该命令的用法如下。

代码语言:javascript复制
127.0.0.1:6379> config get po*
1) "port"
2) "6379"

config get 命令支持包含通配符的模糊查询。

代码语言:javascript复制
127.0.0.1:6379> config get p*
 1) "protected-mode"
 2) "no"
 3) "pidfile"
 4) ""
 5) "proc-title-template"
 6) "{title} {listen-addr} {server-mode}"
 7) "port"
 8) "6379"
 9) "proto-max-bulk-len"
10) "536870912"
127.0.0.1:6379>
代码语言:javascript复制
config set "requirepass" 1234

通过 config set 命令能有效修改 Redis 服务器的配置,但是通过config set 命令修改的配置值在当前 Redis 服务器重启后会失效。

用 config rewrite 命令改写 Redis 配置文件之前已经提到,用 config set 命令修改的配置项会在 Redis 服务器重启后失效,如果想让修改后的配置项一直生效,则需要在 config set 命令后运行 config rewrite 命令。

如果对应的配置文件不存在,所以会出现错误提示“(error) ERR The server is running without a config file”。这个问题常见于在 Docker 环境里安装的 Redis,因此需要通过如下步骤编写 redis.conf 配置文件,并在启动时加载该文件。

  1. 新建 d:redis.conf 文件。
代码语言:javascript复制
port 6379
bind 127.0.0.1
timeout 300

通过 docker 命令,用 Redis 的镜像创建容器

代码语言:javascript复制
docker run -itd --name rediswithconfig -v d:redis.conf:/redisconfig/redis.conf -p 6379:6379 redis:latest redis-server /redisconfig/redis.conf
代码语言:javascript复制
docker exec -it rediswithconfig /bin/bash

可以通过 run 命令创建客户端1

代码语言:javascript复制
docker run -it --name redis-client1 --link myredisNew:server redis:latest  /bin/bash

可以通过 run 命令

创建客户端1

代码语言:javascript复制
docker run -it --name redis-client1 --link myredisNew:server redis:latest  /bin/bash

上述命令里的 --link redis-server:server 参数项连接到了第一步所建的 redis-server 服务器上。这里的 :server 表示为该 redis-server 容器起个一个别名。

运行完第二步所给出的命令后,就会进入容器内的命令窗口,在其中通过如下的 redis-cli -h 命令即可连接到 server 别名所指向的redis-server服务器:

代码语言:javascript复制
redis-cli -h server

创建客户端2

代码语言:javascript复制
docker run -it --name redis-client2 --link myredisNew:server redis:latest  /bin/bash

至此,实现了两台 Redis 客户端连接上 Redis 服务器的效果。

获取默认的数据库个数 config get databases

若要修改默认的数据库个数,默认为 16。可以去宿主机修改 redis.conf 文件。

当通过 redis-cli 命令以 Redis 客户端的身份连接到服务器后,可以通过 client list 命令查看客户端用的是哪个数据库。其中 db=0 表示当前客户端用的是 0 号数据库。

在实际应用中,一般不会更改 Redis 服务器的数据库个数,但是当不同的应用同时使用同一个 Redis 服务器时,建议让不同的应用使用不同的数据库。

位图数据类型的应用

位图(Bitmap)是由一串二进制数字组成的,它不是一种数据类型,而是基于字符串、能面向字节操作的对象。位图的长度不固定,但是在计算机里 8 位(bit)能组成一个字节(Byte),所以位图的长度一般是 8 或者是8的倍数。

代码语言:javascript复制
setbit bit1 0 1
setbit bit1 1 1
setbit bit2 2 1
setbit bit1 3 1

注意:在设置位图数据时只能传入二进制数据 0 或 1

用 bitop 对位图进行运算 通过 bitop 命令能对多个位图数据进行运算。 其中操作符可以是 AND,也可以是 OR,还可以是表示异或的 XOR 或者表示取反的 NOT;

代码语言:javascript复制
bitop and result bit1 bit2 
bitop or result bit1 bit2 
bitop not result bit1 bit2 
bitop xor result bit1 bit2 

bitcount 命令能统计键为 key 的位图里 1 出现的次数。

代码语言:javascript复制
bitcount key [start end]

其中,start 和 end 参数表示统计的字节组范围。

地理位置相关操作

在 Redis 3.2 及以后的版本里存储描述地理位置的数据,并能用这些地理数据进行“测距”等运算。这些功能在外卖或物流配送等应用里用得非常广泛,下面将给出 Redis 中和地理位置有关的操作命令。

  • geoadd 命令存储地理位置
  • geopos 命令获取指定键指定别名的地理位置数据
  • georadius 命令查询指定 key 里指定范围内的地理信息
  • geodist 命令来计算两个地理位置间的距离

参考

基于 Docker 的 Redis 入门与实战-金华 胡书敏编著-微信读书 https://weread.qq.com/web/reader/f2932520725d0bbff2948bckc81322c012c81e728d9d180

0 人点赞