企业建站,专门做实习计算机项目的网站平台,深圳快速seo,wamp wordpressRedis命令
Redis 根据命令所操作对象的不同#xff0c; 可以分为三大类#xff1a; 对 Redis 进行基础性操作的命令#xff0c;对 Key 的操作命令#xff0c;对 Value 的操作命令。
1.1 Redis
首先通过 redis-cli 命令进入到 Redis 命令行客户端#xff0c;然后再运行下…Redis命令
Redis 根据命令所操作对象的不同 可以分为三大类 对 Redis 进行基础性操作的命令对 Key 的操作命令对 Value 的操作命令。
1.1 Redis
首先通过 redis-cli 命令进入到 Redis 命令行客户端然后再运行下面的命令。
1.1.1心跳命令PING
键入 ping 命令会看到 PONG 响应则说明该客户端与 Redis 的连接是正常的。该命令,亦称为心跳命令。 1.1.2 读写键值命令
set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。关于更多 set 与 get 命令格式后面会详细学习。 1.1.3 DB 切换 select
Redis 默认有 16 个数据库。这个在 Redis Desktop ManagerRDM图形客户端中可以直观地看到。 默认使用的是 0 号 DB可以通过 select db 索引来切换 DB。例如如下命令会切换到DB3并会将 age-23 写入到 DB3 中。
并且这个结果在 RDM 中是可以直观地看到的
1.1.4 查看 key 数量 dbsize
dbsize 命令可以查看当前数据库中 key 的数量。 从以上查看情况看DB0 中有 2 个 keyDB1 中没有 keyDB3 中有 1 个 key。
1.1.5 删除当前库中数据 flushdb
flushdb 命令仅仅删除的是当前数据库中的数据不影响其它库。
1.1.6 删除所有库中数据命令 flushall
flushall 命令可以删除所有库中的所有数据。所以该命令的使用一定要慎重。 1.2 Key 操作命令
Redis 中存储的数据整体是一个 Map其 key 为 String 类型而 value 则可以是 String、Hash 表、List、Set 等类型。
1.2.1 keys
格式KEYS pattern功能查找所有符合给定模式 pattern 的 keypattern 为正则表达式。说明KEYS 的速度非常快但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令而使用 scan 命令代替。
1.2.2 exists
格式EXISTS key功能检查给定 key 是否存在。说明若 key 存在返回 1 否则返回 0 。
1.2.3 del
格式DEL key [key …]功能删除给定的一个或多个 key 。不存在的 key 会被忽略。说明返回被删除 key 的数量。
1.2.4 rename
格式RENAME key newkey功能将 key 改名为 newkey。说明当 key 和 newkey 相同或者 key 不存在时返回一个错误。当 newkey 已经存在时 RENAME 命令将覆盖旧值。改名成功时提示 OK 失败时候返回一个错误。
1.2.5 move
格式MOVE key db功能将当前数据库的 key 移动到给定的数据库 db 当中。说明如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key 或者 key 不存在于当前数据库那么 MOVE 没有任何效果。移动成功返回 1 失败则返回 0 。
1.2.6 type
格式TYPE key功能返回 key 所储存的值的类型。说明返回值有以下六种 none (key 不存在)string (字符串)list (列表)set (集合)zset (有序集)hash (哈希表)
1.2.7 expire 与 pexpire 格式EXPIRE key seconds 功能为给定 key 设置生存时间。当 key 过期时(生存时间为 0)它会被自动删除。 expire 的时间单位为秒pexpire 的时间单位为毫秒。在 Redis 中带有生存时 间的 key被称为“易失的”(volatile)。 说明生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。
1.2.8 ttl 与 pttl
格式TTL key功能TTL, time to live返回给定 key 的剩余生存时间。说明其返回值存在三种可能 当 key 不存在时返回 -2 。当 key 存在但没有设置剩余生存时间时返回 -1 。否则返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒而 pttl 命令 返回的时间单位为毫秒。
1.2.9 persist
格式PERSIST key功能去除给定 key 的生存时间将这个 key 从“易失的”转换成“持久的”。说明当生存时间移除成功时返回 1若 key 不存在或 key 没有设置生存时间则返回 0
1.3 String型Value操作命令
Redis 存储数据的 Value 可以是一个 String 类型数据。 String 类型的 Value 是 Redis 中最基本最常见的类型。String 类型的 Value 中可以存放任意数据包括数值型甚至是二进制的图片、音频、视频、序列化对象等。一个 String 类型的 Value 最大是 512M 大小。
1.3.1 set
格式SET key value [EX seconds | PX milliseconds] [NX|XX]功能SET 除了可以直接将 key 的值设为 value 外还可以指定一些参数。 EX seconds为当前 key 设置过期时间单位秒。等价于 SETEX 命令。PX milliseconds为当前 key 设置过期时间单位毫秒。等价于 PSETEX 命令。NX指定的 key 不存在才会设置成功用于添加指定的 key。等价于 SETNX 命令。XX指定的 key 必须存在才会设置成功用于更新指定 key 的 value。 说明如果 value 字符串中带有空格则该字符串需要使用双引号或单引号引起来否则会认为 set 命令的参数数量不正确报错。
1.3.2 setex 与 与 psetex
格式SETEX/PSETEX key seconds value功能set expire其不仅为 key 指定了 value还为其设置了生存时间。setex 的单位为秒psetex 的单位为毫秒。说明如果 key 已经存在 则覆写旧值。该命令类似于以下两个命令不同之处是SETEX 是一个原子性操作关联值和设置生存时间两个动作会在同一时间内完成该命令在 Redis 用作缓存时非常实用。 SET key value EXPIRE key seconds # 设置生存时间
1.3.3 setnx
格式SETNX key value功能SET if Not eXists将 key 的值设为 value 当且仅当 key 不存在。若给定的 key已经存在则 SETNX 不做任何动作。成功返回 1否则返回 0。说明该命令等价于 set key value nx
1.3.4 getset
格式GETSET key value功能将给定 key 的值设为 value 并返回 key 的旧值。说明 当 key 存在但不是字符串类型时 返回一个错误 当 key 不存在时 返回 nil 。
1.3.5 mset 与 msetnx
格式MSET/MSETNX key value [key value …]功能同时设置一个或多个 key-value 对。说明如果某个给定 key 已经存在那么 MSET 会用新值覆盖原来的旧值如果这不是你所希望的效果请考虑使用 MSETNX 命令它只会在所有给定 key 都不存在的情况下进行设置操作。 MSET/MSETNX 是一个原子性(atomic)操作 所有给定 key 都会在同一时间内被设置某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。该命令永不失败。
3.3.6 mget
格式MGET key [key …]功能返回所有(一个或多个)给定 key 的值。说明如果给定的 key 里面有某个 key 不存在那么这个 key 返回特殊值 nil 。因此该命令永不失败。
3.3.7 append
格式APPEND key value功能如果 key 已经存在并且是一个字符串 APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在 APPEND 就简单地将给定 key 设为 value 就像执行 SET key value 一样。说明追加 value 之后 key 中字符串的长度。
3.3.8 strlen
格式STRLEN key功能返回 key 所储存的字符串值的长度。说明当 key 储存的不是字符串值时返回一个错误当 key 不存在时返回 0 。
1.4 String典型应用场景
Value 为 String 类型的应用场景很多这里仅举这种典型应用场景的例子
(1) 数据缓存 Redis 作为数据缓存层 MySQL 作为数据存储层。 应用服务器首先从 Redis 中获取数据如果缓存层中没有则从 MySQL 中获取后先存入缓存层再返回给应用服务器。 (2) 计数器 在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等。每个有效客户端访问一次或视频每播放一次都是直接修改 Redis 中的计数器然后再以异步方式持久化到其它数据源中例如持久化到 MySQL。 (3) 共享 Session 对于一个分布式应用系统如果将类似用户登录信息这样的 Session 数据保存在提供登录服务的服务器中那么如果用户再次提交像收藏、支付等请求时可能会出现问题在提供收藏、 支付等服务的服务器中并没有该用户的 Session 数据 从而导致该用户需要重新登录。对于用户来说这是不能接受的。.
此时可以将系统中所有用户的 Session 数据全部保存到 Redis 中用户在提交新的请求后系统先从 Redis 中查找相应的 Session 数据如果存在则再进行相关操作否则跳转到登录页面。这样就不会引发“重新登录”问题。
(4) 限速器 现在很多平台为了防止 DoSDenial of Service拒绝服务攻击一般都会限制一个 IP不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能充当限速器。 注意其无法防止 DDoSDistributed Denial of Service分布式拒绝服务攻击。
2.1 Hash型 Value
Redis 存储数据的 Value 可以是一个 Hash 类型。Hash 类型也称为 Hash 表、字典等。Hash 表就是一个映射表 Map也是由键-值对构成为了与整体的 key 进行区分这里的键称为 field值称为 value。注意Redis 的 Hash 表中的 field-value 对均为 String 类型。
2.1.1 hset
格式HSET key field value功能将哈希表 key 中的域 field 的值设为 value 。说明如果 key 不存在一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中旧值将被覆盖。如果 field 是哈希表中的一个新建域并且值设置 成功返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖返回 0 。
2.1.2 hget
格式HGET key field功能返回哈希表 key 中给定域 field 的值。说明当给定域不存在或是给定 key 不存在时返回 nil 。
2.1.3 hmset
格式HMSET key field value [field value …]功能同时将多个 field-value (域-值)对设置到哈希表 key 中。说明此命令会覆盖哈希表中已存在的域。如果 key 不存在一个空哈希表被创建并执行 HMSET 操作。如果命令执行成功返回 OK 。当 key 不是哈希表(hash)类型时返回一个错误。
2.1.4 hmget
格式HMGET key field [field …]功能按照给出顺序返回哈希表 key 中一个或多个域的值。说明如果给定的域不存在于哈希表那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
2.1.5 hgetall
格式HGETALL key功能返回哈希表 key 中所有的域和值。说明在返回值里紧跟每个域名(field name)之后是域的值(value)所以返回值的长度是哈希表大小的两倍。若 key 不存在返回空列表。若 key 中包含大量元素则该命令可能会阻塞 Redis 服务。 所以生产环境中一般不使用该命令 而使用 hscan 命令代替。
2.1.6 hsetnx
格式HSETNX key field value功能将哈希表 key 中的域 field 的值设置为 value 当且仅当域 field 不存在。说明若域 field 已经存在该操作无效。如果 key 不存在一个新哈希表被创建并执行 HSETNX 命令。
2.1.7 hdel
格式HDEL key field [field …]功能删除哈希表 key 中的一个或多个指定域不存在的域将被忽略。说明返回被成功移除的域的数量不包括被忽略的域。
2.1.8 hexits
格式HEXISTS key field功能查看哈希表 key 中给定域 field 是否存在。说明 如果哈希表含有给定域 返回 1 。 如果不含有给定域 或 key 不存在 返回 0 。
2.1.9 hlen
格式HLEN key功能返回哈希表 key 中域的数量。说明当 key 不存在时返回 0 。
2.1.10 hstrlen
格式HSTRLEN key field功能 返回哈希表 key 中 与给定域 field 相关联的值的字符串长度 string length 。说明如果给定的键或者域不存在 那么命令返回 0 。
2.2 应用场景
Hash 型 Value 非常适合存储对象数据。 key 为对象名称 value 为描述对象属性的 Map 对对象属性的修改在 Redis 中就可直接完成。其不像 String 型 Value 存储对象那个对象是 序列化过的 例如序列化为 JSON 串 对对象属性值的修改需要先反序列化为对象后再修改 修改后再序列化为 JSON 串后写入到 Redis。
3.1 Lis型Value操作命令
Redis 存储数据的 Value 可以是一个 String 列表类型数据。即该列表中的每个元素均为String 类型数据。列表中的数据会按照插入顺序进行排序。不过该列表的底层实际是一个无头节点的双向链表 所以对列表表头与表尾的操作性能较高 但对中间元素的插入与删除的操作的性能相对较差。
3.1.1 lpush/rpush
格式LPUSH key value [value …] 或 RPUSH key value [value …]功能将一个或多个值 value 插入到列表 key 的表头/表尾表头在左表尾在右说明如果有多个 value 值对于 lpush 来说各个 value 会按从左到右的顺序依次插入到表头 对于 rpush 来说 各个 value 会按从左到右的顺序依次插入到表尾。 如果 key不存在一个空列表会被创建并执行操作。当 key 存在但不是列表类型时返回一个错误。执行成功时返回列表的长度。
3.1.2 llen
格式LLEN key功能返回列表 key 的长度。说明如果 key 不存在则 key 被解释为一个空列表返回 0 。如果 key 不是列表类型返回一个错误。
3.1.3 lindex
格式LINDEX key index功能返回列表 key 中下标为 index 的元素。列表从 0 开始计数。说明如果 index 参数的值不在列表的区间范围内(out of range)返回 nil 。
3.1.4 lset
格式LSET key index value功能将列表 key 下标为 index 的元素的值设置为 value 。说明当 index 参数超出范围或对一个空列表key 不存在进行 LSET 时返回一个错误。
3.1.5 lrange
格式LRANGE key start stop功能返回列表 key 中指定区间[start, stop]内的元素即包含两个端点。说明List 的下标从 0 开始即以 0 表示列表的第一个元素以 1 表示列表的第二个元素以此类推。也可以使用负数下标以 -1 表示列表的最后一个元素 -2 表示列表的倒数第二个元素以此类推。
3.1.6 lpushx与rpushx
格式LPUSHX key value 或 RPUSHX key value功能 将值 value 插入到列表 key 的表头/表尾 当且仅当 key 存在并且是一个列表。说明当 key 不存在时命令什么也不做。若执行成功则输出表的长度。
3.1.7 blpop / brpop
格式BLPOP key [key …] timeout 或 BRPOP key [key …] timeout功能BLPOP/BRPOP 是列表的阻塞式(blocking)弹出命令。它们是 LPOP/RPOP 命令的阻塞版本当给定列表内没有任何元素可供弹出的时候连接将被 BLPOP/BRPOP 命令阻塞 直到等待 timeout 超时或发现可弹出元素为止。说明假如在指定时间内没有任何元素被弹出则返回一个 nil 和等待时长。反之返回一个含有两个元素的列表第一个元素是被弹出元素所属的 key 第二个元素是被弹出元素的值。
3.1.8 rpoplpush
格式RPOPLPUSH source destination功能命令 RPOPLPUSH 在一个原子时间内执行以下两个动作将列表 source 中的最后一个元素(尾元素)弹出并返回给客户端。将 source 弹出的元素插入到列表 destination 作为 destination 列表的的头元素。如果 source 不存在 值 nil 被返回 并且不执行其他动作。 如果 source 和 destination相同则列表中的表尾元素被移动到表头并返回该元素可以把这种特殊情况视作列表的旋转(rotation)操作。
3.1.9 brpoplpush
格式BRPOPLPUSH source destination timeout功能BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本当给定列表 source 不为空时BRPOPLPUSH 的表现和 RPOPLPUSH 一样。当列表 source 为空时 BRPOPLPUSH 命令将阻塞连接直到等待超时或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。timeout 为阻塞时长单位为秒其值若为 0则表示只要没有可弹出元素则一直阻塞。
3.2 应用场景
Value 为 List 类型的应用场景很多主要是通过构建不同的数据结构来实现相应的业务功能。这里仅对这些数据结构的实现方式进行总结不举具体的例子。
1 栈 通过 lpush lpop 可以实现栈数据结构效果先进后出。通过 lpush 从列表左侧插入数据通过 lpop 从列表左侧取出数据。当然通过 rpush rpop 也可以实现相同效果只不过操作的是列表右侧。
2 队列 通过 lpush rpop 可以实现队列数据结构效果先进先出。通过 lpush 从列表左侧插入数据通过 rpop 从列表右侧取出数据。当然通过 rpush lpop 也可以实现相同效果只不过操作的方向正好相反。
3 阻塞式消息队列 通过 lpush brpop 可以实现阻塞式消息队列效果。作为消息生产者的客户端使用 lpush从列表左侧插入数据作为消息消费者的多个客户端使用 brpop 阻塞式“抢占”列表尾部数据进行消费保证了消费的负载均衡与高可用性。brpop 的 timeout 设置为 0表示只要没有数据可弹出就永久阻塞。
4 动态有限集合 通过 lpush ltrim 可以实现有限集合。通过 lpush 从列表左侧向列表中添加数据通过ltrim 保持集合的动态有限性。像企业的末位淘汰、学校的重点班等动态管理都可通过这种动态有限集合来实现。当然通过 rpush ltrim 也可以实现相同效果只不过操作的方向正好相反。
4.1 Set 型 Value 操作命令
Redis 存储数据的 Value 可以是一个 Set 集合 且集合中的每一个元素均 String 类型。 Set 与 List 非常相似但不同之处是 Set 中的元素具有无序性与不可重复性而 List 则具有有序性与可重复性。 Redis 中的 Set 集合与 Java 中的 Set 集合的实现相似其底层都是 value 为 null 的 hash表。也正因为此才会引发无序性与不可重复性。
4.1.1 sadd
格式SADD key member [member …]功能将一个或多个 member 元素加入到集合 key 当中已经存在于集合的 member元素将被忽略。说明假如 key 不存在则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时返回一个错误。
4.1.2 smembers
格式SMEMBERS key功能返回集合 key 中的所有成员。说明 不存在的 key 被视为空集合。 若 key 中包含大量元素 则该命令可能会阻塞 Redis服务。所以生产环境中一般不使用该命令而使用 sscan 命令代替。
4.1.3 scard
格式SCARD key功能返回 Set 集合的长度说明当 key 不存在时返回 0 。
4.1.4 sismember
格式SISMEMBER key member功能判断 member 元素是否集合 key 的成员。说明如果 member 元素是集合的成员返回 1 。如果 member 元素不是集合的成员或 key 不存在返回 0 。
4.1.5 smove
格式SMOVE source destination member功能将 member 元素从 source 集合移动到 destination 集合。说明如果 source 集合不存在或不包含指定的 member 元素则 SMOVE 命令不执行任何操作仅返回 0 。否则 member 元素从 source 集合中被移除并添加到destination 集合中去 返回 1。 当 destination 集合已经包含 member 元素时 SMOVE命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时返回一个错误。
4.1.6 srem
格式SREM key member [member …]功能移除集合 key 中的一个或多个 member 元素不存在的 member 元素会被忽略且返回成功移除的元素个数。说明当 key 不是集合类型返回一个错误。
4.1.7 srandmember
格式SRANDMEMBER key [count]功能返回集合中的 count 个随机元素。count 默认值为 1。说明若 count 为正数且小于集合长度那么返回一个包含 count 个元素的数组数组中的元素各不相同。如果 count 大于等于集合长度那么返回整个集合。如果
4.2 应用场景
Value 为 Set 类型的应用场景很多这里对这些场景仅进行总结。
1 动态黑白名单 例如某服务器中要设置用于访问控制的黑名单。 如果直接将黑名单写入服务器的配置文件那么存在的问题是无法动态修改黑名单。此时可以将黑名单直接写入 Redis只要有客户端来访问服务器 服务器在获取到客户端IP后先从Redis的黑名单中查看是否存在该IP如果存在则拒绝访问否则访问通过。
2 有限随机数 有限随机数是指返回的随机数是基于某一集合范围内的随机数例如抽奖、随机选人。通过 spop 或 srandmember 可以实现从指定集合中随机选出元素。
3 用户画像 社交平台、 电商平台等各种需要用户注册登录的平台 会根据用户提供的资料与用户使用习惯为每个用户进行画像即为每个用户定义很多可以反映该用户特征的标签这些标签就可以使用 sadd 添加到该用户对应的集合中。这些标签具有无序、不重复特征。
5.1 有序 Set 型 Value 操作命令
Redis 存储数据的 Value 可以是一个有序 Set 这个有序 Set 中的每个元素均 String 类型。有序 Set 与 Set 的不同之处是有序 Set 中的每一个元素都有一个分值 scoreRedis 会根据score 的值对集合进行由小到大的排序。其与 Set 集合要求相同元素不能重复但元素的score 可以重复。由于该类型的所有命令均是字母 z 开头所以该 Set 也称为 ZSet。
5.1.1 zadd
格式ZADD key score member [[score member] [score member] …]功能将一个或多个 member 元素及其 score 值加入到有序集 key 中的适当位置。说明score 值可以是整数值或双精度浮点数。如果 key 不存在则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时返回一个错误。如果命令执行成功则返回被成功添加的新成员的数量不包括那些被更新的、已经存在的成员。若写入的 member 值已经存在但 score 值不同则新的 score 值将覆盖老 score。
5.1.2 zcard
格式ZCARD key功能返回集合的长度说明当 key 不存在时返回 0 。
5.1.3 zcount
格式ZCOUNT key min max功能 返回有序集 key 中 score 值在 min 和 max 之间(默认包括 score 值等于 min或 max )的成员的数量。
5.1.4 zscore
格式ZSCORE key member功能返回有序集 key 中成员 member 的 score 值。说明如果 member 元素不是有序集 key 的成员或 key 不存在返回 nil 。
5.1.5 zincrby
格式ZINCRBY key increment member功能为有序集 key 的成员 member 的 score 值加上增量 increment 。increment 值可以是整数值或双精度浮点数。说明 可以通过传递一个负数值 increment 让 score 减去相应的值。 当 key 不存在或 member 不是 key 的成员时 ZINCRBY key increment member 等同于 ZADD keyincrement member 。当 key 不是有序集类型时返回一个错误。命令执行成功则返回 member 成员的新 score 值。
5.1.6 zrank 与 与 zrevrank
格式ZRANK key member 或 ZREVRANK key member功能返回有序集 key 中成员 member 的排名。zrank 命令会按 score 值递增排序zrevrank 命令会按 score 递减排序。说明 score 值最小的成员排名为 0 。 如果 member 不是有序集 key 的成员 返回 nil 。
5.2 应用场景
有序 Set 最为典型的应用场景就是排行榜例如音乐、视频平台中根据播放量进行排序的排行榜电商平台根据用户评价或销售量进行排序的排行榜等。将播放量作为 score将作品 id 作为 member将用户评价积分或销售量作为 score将商家 id 作为 member。使用zincrby 增加排序 score使用 zrevrange 获取 Top 前几名使用 zrevrank 查询当前排名使用zscore 查询当前排序 score 等。
6 benchmark 测试工具
6.1 简介
在Redis安装完毕后会自动安装一个redis-benchmark测试工具 其是一个压力测试工具用于测试 Redis 的性能。 通过 redis-benchmark –help 命令可以查看到其用法 6.2 测试 1
1 命令解析 以上命令中选项的意义
-h指定要测试的 Redis 的 IP若为本机则可省略-p指定要测试的 Redis 的 port若为 6379则可省略-c指定模拟有客户端的数量默认值为 50-n指定这些客户端发出的请求的总量默认值为 100000-d指定测试 get/set 命令时其操作的 value 的数据长度单位字节默认值为 3。在测试其它命令时该指定没有用处。 以上命令的意义是使用 100 个客户端连接该 Redis这些客户端总共会发起 100000个请求set/get 的 value 为 8 字节数据。
6.3 测试结果分析
该命令会逐个测试所有 Redis 命令每个命令都会给出一份测试报告每个测试报告由四部分构成 A 、 测试环境报告
首先就是测试环境 B 、 延迟百分比分布 这是按照百分比进行的统计报告每完成一次剩余测试量的 50%就给出一个统计数据。 C 、 延迟的累积分布 这是按照时间间隔统计的报告基本是每 0.1 毫秒统计一次。 D 、 总述报告
这是总述性报告。