redis学习-9-Redis命令行模式和客户端/服务器命令

5.Redis命令行模式

  • Redis 命令大致可分为以下几种:
    • 服务端(server)命令
    • 客户端(client)命令
    • 键命令(key)
    • 数据类型命令(包括 String、List、Hash、Set 以及 Sorted Set。)
    • 功能应用命令
  • Redis 命令用于在 Redis 服务器上执行一些操作,而命令运行的方式是通过客户端命令行来执行的,这种方式也被称为“命令行模式”。因此想要在 Redis 服务器上运行命令,首先需要开启一个 Redis 客户端。操作方法如下:在 CMD 命令行输入以下命令启动一个 Redis 客户端:
#注意:在开启客户端之前,你要确定 Redis 服务器已经开启。
redis-cli
  • 本地服务器运行命令:本地服务器指的是,Redis 服务器和客户端安装在同一台计算机上。在计算机上打开一个 Redis 客户端输入以下命令,验证客户端与Redis 服务器是否成功连接。
[root@VM-0-3-centos ~]# redis-cli -a 13xxxx
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 
#通过执行命令 PING,以检查服务器是否正在运行,结果返回 PONG,说明已经成功连接了本地 Redis 服务器。
#redis-cli -a 密码 -p 6379 --raw  启动的时候解决乱码的
  • 远程服务器上运行命令:远程服务器指的是服务器安装在另外一台计算机上,而非本地。这台远程计算机可以是局域网中的一台,也可以是 Internet 联网状态下的远程计算机。Redis 提供了连接远程服务器的命令,格式如下:
C:\Users\Administrator>redis-cli -h host -p port -a password
  • 参数说明:

    • -h:用于指定远程 Redis 服务器的 IP 地址;
    • -p:用于指定 Redis 远程服务器的端口号;
    • -a:可选参数,若远程服务器设置了密码,则需要输入。
  • 如何连接到 Redis 远程服务器。服务器在主机 IP 是 121.x.x.x,端口号为 6379 ,密码为 132xxxx,使用git bash工具进行测试。

CNCLUKZK@LAPTOP-HGE63E13 MINGW64 /e/zkNote/typora-user-images
$ redis-cli -h 121.x.x.x -p 6379 -a xxxxx
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
ping
PONG
  • 命令行自动提示功能:Redis 拥有强大的命令行提示功能,支持Tab键自动补全,并且可以通过HELP命令查看帮助信息,如下所示:
127.0.0.1:6379> help set

  SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

127.0.0.1:6379> help mset

  MSET key value [key value ...]
  summary: Set multiple keys to multiple values
  since: 1.0.1
  group: string

16.客户端(client)命令

  • Redis 提供了一些操作客户端(client)的命令,比如查询所有已连接到服务器的客户端数量,控制客户端的连接状态(关闭或者挂起)等。通过客户端命令我们可以轻松的实现对客户端的管理、控制。

  • Redis 服务器通过监听 TCP 端口的方式来接受客户端的连接。当一个连接建立后,Redis 会自动执行以下过程:

    • 首先客户端 socket 被设置为非阻塞模式,这是因为 Redis 在网络事件处理上采用了非阻塞式 IO(即 IO 多路复用模型);
    • 其次设置 socket 的 TCP_NODELAY 属性,从而禁用 Nagle 算法;
    • 最后创建一个可读的文件事件,用它来监听客户端 socket 的数据发送。
  • Redis 使用命令的格式向客户端输入数据,这个数据量是非常小的。当向客户端输入命令后,我们希望能快速的得到服务器的应答,也就是低延时性,但如果开启了Nagle算法就会出现频繁延时的现象,导致用户体验极差。

TCP_NODELAY 控制是否开启 Nagle 算法,该算法可以提高广域网传输效率,减少分组的报文个数,适合传输体量较大的数据。

16.1 Redis IO多路复用
  • Redis 的底层是一个单线程模型,单线程指的是使用一个线程来处理所有的网络事件请求,这样就避免了多进程或者多线程切换导致的 CPU 消耗,而且也不用考虑各种锁的问题。
  • redis基于内存操作处理速度很快,cpu不是redis的性能瓶颈而是多线程的瓶颈,redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程,为什么还需要使用多线程呢。
  • Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-vale的Memcache差!(c语言贴近底层,所以效率高)
  • Redis 为了充分利用单线程,加快服务器的处理速度,它采用 IO 多路复用模型来处理客户端与服务端的连接,这种模型有三种实现方式,分别是 select、poll、epoll。Redis 正是采用 epoll 的方式来监控多个 IO 事件,对读写等事件的响应是经过对epoll函数的包装来作到的。当客户端空闲时,线程处于阻塞状态;当一个或多个 IO 事件触发时(客户端发起网路连接请求),线程就会从阻塞状态唤醒,并同时使用epoll来轮询触发事件,并依次提交给线程处理。Redis的实际处理速度彻底依靠主进程的执行效率

Epoll是Linux内核为处理大批量文件描述符而做了改进的epoll,是Linux下多路复用IO接口select/poll的加强版本,它能显著提升程序在大量并发链接中只有少许活跃的状况下的系统CPU利用率

注意:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路 IO 复用技术可以让单个线程高效的处理多个连接请求。

redis 6 支持多线程是指网络io、分发存储等用多线程 ,读写执行命令还是单线程,默认是关闭多线程的。需要去设置配置文件的,开启多线程不能大于机器和核数

多线程应用目的,为了提高资源利用率。在涉及到硬盘数据时,CPU在执行时会有很多时间阻塞到IO,采用多线程可以利用阻塞这段时间。比如:删除操作,对于一些大键值对的删除操作,通过多线程非阻塞地释放内存空间也能减少对 Redis 主线程阻塞的时间,提高执行的效率,因此引入了多线程

  • Redis为什么单线程还这么快?
    • 1、误区1:高性能的服务器一定是多线程的?
    • 2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
    • CPU>内存>硬盘的速度要有所了解!
    • 核心:redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作。)对于内存系统来说,如果没有上下文切换效率就是最高的!单cpu对一块内存进行多次读写都是在一个CPU上的,没有线程切换的耗时(1500ns-2000ns),使用内存情况下,这个就是最佳的方案!
16.2 常用命令
命令说明
CLIENT LIST以列表的形式返回所有连接到 Redis 服务器的客户端。
CLIENT SETNAME设置当前连接的名称。
CLIENT GETNAME获取通过 CLIENT SETNAME 命令设置的服务名称。
CLIENT PAUSE挂起客户端连接,将所有客户端挂起指定的时间(以毫秒为计算)。
CLIENT KILL关闭客户端连接。
CLIENT ID返回当前客户端 ID。
CLIENT REPLY控制发送到当前连接的回复,可选值包括 on|off|skip。
16.3 客户端最大连接数
  • 在 Redis 配置文件中,有一个maxclients的配置项,它指定了连接到 Redis 服务器的最大客户端数量。其默认值是 10000。配置项如下所示:
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
#更改最大连接数量
127.0.0.1:6379> config set maxclients 20000
OK
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "20000"

  • 的使用示例,如下所示:
#返回当前客户端 ID。
remote:0>client id
"2058"
#返回所有连接到 Redis 服务器的客户端。
remote:0>client list
"id=2058 addr=110.xx.xx.xx:5518 laddr=172.xx.xx.xx:6379 fd=8 name= age=20733 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22298 events=r cmd=client|list user=default redir=-1 resp=2
id=2079 addr=127.0.0.1:45800 laddr=127.0.0.1:6379 fd=9 name= age=49 idle=30 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=1800 events=r cmd=config|get user=default redir=-1 resp=2
"

remote:0>client getname
null
#名字不能有空格
remote:0>client setname "redis_desktop_manager"
"OK"
remote:0>client getname 
"redis_desktop_manager

17.服务器命令

  • Redis 服务器是对客户端提供服务的主体,只要是安装了 Redis 数据库的计算机都可以通过本地,或者远程的方式对外提供服务。
  • Redis 服务器能够以高可用集群的方式对外提供服务。所谓高可用集群,指的是多台 Redis 服务器组成的服务器架构,每台服务器都提供相同的服务,从而让服务器达到一个稳定,高效的运行状态。

从 3.0 版本开始,Redis 已经实现了对 Redis-cluster 集群部署的支持。

  • Redis 提供了诸多操作服务器的命令,这些命令都有着各自重要的作用,比如BGSAVE命令,用异步的方式将 Redis 数据库的数据同步到本地磁盘中,实现数据的持久化存储,这对服务器的数据安全有着重要的作用。

  • 常用的Redis 服务器命令:

命令说明
BGREWRITEAOF在后台以异步的方式执行一个 AOF 文件的重写操作,对源文件进行压缩,使其体积变小。 AOF 是实现数据持久化存储的方式之一。
BGSAVE在后台执行初始化操作,并以异步的方式将当前数据库的数据保存到磁盘中。
CLIENT KILL [ip:port] [ID client-id]关闭客户端连接。
CLIENT LIST获取连接到服务器的客户端连接列表。
CLIENT GETNAME获取当前连接客户端的名称。
CLIENT PAUSE timeout使服务器在指定的时间停止执行来自客户端的命令。
CLIENT SETNAME connection-name设置当前连接客户端的名称。
COMMAND返回所有 Redis 命令的详细描述信息。
COMMAND COUNT此命令用于获取 Redis 命令的总数。
COMMAND GETKEYS获取指定命令的所有键。
INFO [section]获取 Redis 服务器的各种信息和统计数值。
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 的调试信息。当 key 存在时,返回有关信息;当 key 不存在时,返回一个错误。
DEBUG SEGFAULT使用此命令可以让服务器崩溃。
FLUSHALL清空数据库中的所有键。
FLUSHDB清空当前数据库的所有 key。
LASTSAVE返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 格式表示。
MONITOR实时打印出 Redis 服务器接收到的命令。
ROLE查看主从实例所属的角色,角色包括三种,分别是 master、slave、sentinel。
SAVE执行数据同步操作,将 Redis 数据库中的所有数据以 RDB 文件的形式保存到磁盘中。 RDB 是 Redis 中的一种数据持久化方式。
SHUTDOWN [NOSAVE] [SAVE]将数据同步到磁盘后,然后关闭服务器。
SLAVEOF host port此命令用于设置主从服务器,使当前服务器转变成为指定服务器的从属服务器, 或者将其提升为主服务器(执行 SLAVEOF NO ONE 命令)。
SLOWLOG subcommand [argument]用来记录查询执行时间的日志系统。
SYNC用于同步主从服务器。
SWAPDB index index用于交换同一 Redis 服务器上的两个数据库,可以实现访问其中一个数据库的客户端连接,也可以立即访问另外一个数据库的数据。
TIME此命令用于返回当前服务器时间。
  • 举例:
#查看主从实例所属的角色
:0>role
 1)  "master"
 2)  "0"
 3)  
#查看redis命令的描述信息
remote:0>command info lpush zadd
 1)    1)   "lpush"
  2)   "-3"
  3)      1)    "write"
   2)    "denyoom"
   3)    "fast"

  4)   "1"
  5)   "1"
  6)   "1"
  7)      1)    "@write"
   2)    "@list"
   3)    "@fast"

  8)   
  9)      1)        1)     "flags"
    2)          1)      "RW"
     2)      "insert"

    3)     "begin_search"
    4)          1)      "type"
     2)      "index"
     3)      "spec"
     4)            1)       "index"
      2)       "1"


    5)     "find_keys"
    6)          1)      "type"
     2)      "range"
     3)      "spec"
     4)            1)       "lastkey"
      2)       "0"
      3)       "keystep"
      4)       "1"
      5)       "limit"
      6)       "0"




  10)   

 2)    1)   "zadd"
  2)   "-4"
  3)      1)    "write"
   2)    "denyoom"
   3)    "fast"

  4)   "1"
  5)   "1"
  6)   "1"
  7)      1)    "@write"
   2)    "@sortedset"
   3)    "@fast"

  8)   
  9)      1)        1)     "flags"
    2)          1)      "RW"
     2)      "update"

    3)     "begin_search"
    4)          1)      "type"
     2)      "index"
     3)      "spec"
     4)            1)       "index"
      2)       "1"


    5)     "find_keys"
    6)          1)      "type"
     2)      "range"
     3)      "spec"
     4)            1)       "lastkey"
      2)       "0"
      3)       "keystep"
      4)       "1"
      5)       "limit"
      6)       "0"




  10)   
#最近一次执行数据持久化存储的时间
remote:0>lastsave
"1670150012"
#实时打印redis服务器接收的命令
127.0.0.1:6379> monitor
OK
1670168000.366344 [0 110.19.110.129:5518] "zrange" "height" "0" "9"
1670168046.890580 [0 110.19.110.129:5518] "role"
1670168275.620122 [0 110.19.110.129:5518] "command" "info" "lpush" "zadd"
1670168329.479631 [0 110.19.110.129:5518] "lastsave"
1670168333.407452 [0 110.19.110.129:5518] "lastsave"
查看当前服务器时间
#第一个字符串是当前时间以 UNIX 时间戳格式表示
#第二个字符串表示:当前这一秒钟已经逝去的微秒数
remote:0>time
 1)  "1670168383"
 2)  "445941"
#查看前3条日志信息
remote:0>slowlog get 3
 1)    1)   "2"
  2)   "1669866989"
  3)   "200629"
  4)      1)    "COMMAND"
   2)    "DOCS"

  5)   "127.0.0.1:33854"
  6)   ""

 2)    1)   "1"
  2)   "1669864245"
  3)   "24343"
  4)      1)    "scan"
   2)    "0"
   3)    "MATCH"
   4)    "*"
   5)    "COUNT"
   6)    "10000"

  5)   "110.19.110.129:4672"
  6)   ""

 3)    1)   "0"
  2)   "1669864242"
  3)   "40306"
  4)      1)    "INFO"

  5)   "110.19.110.129:4672"
  6)   ""
  
 #共有多少条日志记录
 remote:0>slowlog len
"3"
#清空所有日志记录
remote:0>slowlog reset
"OK"
remote:0>slowlog len
"0"
#用于同步主从服务器数据
remote:0>sync
下一篇:redis学习-10- redis key键操作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值