3.Redis命令

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 Manager(RDM)图形客户端中可以直观地看到。
在这里插入图片描述
默认使用的是 0 号 DB,可以通过 select db 索引来切换 DB。例如,如下命令会切换到DB3,并会将 age-23 写入到 DB3 中。
在这里插入图片描述

并且这个结果在 RDM 中是可以直观地看到的
在这里插入图片描述

1.1.4 查看 key 数量 dbsize

dbsize 命令可以查看当前数据库中 key 的数量。

在这里插入图片描述
从以上查看情况看,DB0 中有 2 个 key,DB1 中没有 key,DB3 中有 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 的 key,pattern 为正则表达式。
  • 说明: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) 限速器
现在很多平台为了防止 DoS(Denial of Service,拒绝服务)攻击,一般都会限制一个 IP不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。
注意,其无法防止 DDoS(Distributed 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 中的每一个元素都有一个分值 score,Redis 会根据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 、 总述报告

这是总述性报告。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543625.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Live Capture 中实现面部捕捉同步模型动画

Unity Face Capture 是一个强大的工具,可以帮助你快速轻松地将真实人脸表情捕捉到数字模型中。在本文中,我们将介绍如何在 Unity Face Capture 中实现面部捕捉同步模型动画。 安装 |实时捕获 |4.0.0 (unity3d.com) 安装软件插件 安装 Live Capture 软件…

openGauss学习笔记-244 openGauss性能调优-SQL调优-典型SQL调优点-统计信息调优

文章目录 openGauss学习笔记-244 openGauss性能调优-SQL调优-典型SQL调优点-统计信息调优244.1 统计信息调优244.1.1 统计信息调优介绍244.1.2 实例分析:未收集统计信息导致查询性能差 openGauss学习笔记-244 openGauss性能调优-SQL调优-典型SQL调优点-统计信息调优…

ida pro 查看简易 Android .so 文件伪代码

参考: IDA Pro 反汇编器使用详解,适合逆向新人和老人的权威指南(一)-CSDN博客 注意,这篇只是我的简单记录,要学习详细使用,请参考其他大佬的。 让我们打开神器 IDA 直接把需要的文件拖到 IDA …

服务器部署项目总结

服务器部署项目总结 yzh 24/3/15 前言 本着一定成功的信心去部署前后端分离的项目,结果却“路遇坎坷”😭😭😭😭 代码和程序总是无情的啊,当然,也是因为一段时间没学习对于知识模糊了&#xff…

页面配置、网络数据请求

1. 页面配置文件的作用 小程序中,每个页面都有自己的 .json 配置文件,用来对当前页面的窗口外观、页面效果等进行配置。 2. 页面配置和全局配置的关系 小程序中, app.json 中的 window 节点,可以全局配置小程序中每个页面的窗口…

集合进阶map

双列集合 map集合的遍历 1. 2. 3. hashmap的基本使用 hashmap练习 1. 重写hashmap方法 2. linkedhashmap treemap 按降序排列i的话加一个比较器对象 2.由于这个案例 他的student不知道怎么去比大小 只需要继承一下cmp然后重写就ok 3. stringjoiner只能添加字符串 所以要在key…

【机器学习-02】矩阵基础运算---numpy操作

在机器学习-01中,我们介绍了关于机器学习的一般建模流程,并且在基本没有数学公式和代码的情况下,简单介绍了关于线性回归的一般实现形式。不过这只是在初学阶段、为了不增加基础概念理解难度所采取的方法,但所有的技术最终都是为了…

传统电力运维企业的数字化转型案例

一. 传统电力运维企业面临的主要问题 上海某电力集团企业下属有成套设备公司、电力工程公司,依托于自身的设备制造和工程服务能力,以及多年积累的终端客户资源,几年前该公司成立了电力运维服务公司进入用户侧电力托管运维服务行业。 该公司…

【薪酬体系搭建】建立差别化的薪酬体系,有效激励项目开拓人员

【客户评价】该国际贸易公司总经理:由于行业特点的影响,公司项目开拓人员的收入随着业务量的变化而随时变化,收入长期性的波动导致了人员的流失,如何能够合理平衡其收入,保留核心人才一直是困扰企业的一个难题。我们选…

SMART PLC 卷径计算(圈数检测+膜厚叠加法)

1、卷径计算(膜厚叠加+数值积分器应用博途PLC SCL代码) https://rxxw-control.blog.csdn.net/article/details/136719982https://rxxw-control.blog.csdn.net/article/details/1367199822、膜厚叠加法 https://rxxw-control.blog.csdn.net/article/details/128600466

15.7k stars一个实用型OCR,支持80多种语言

一个实用型 OCR,支持 80 多种语言和所有流行的书写脚本,包括:拉丁文、中文、阿拉伯文、梵文、西里尔文等。 特点 支持本地或云/API部署 准确度提高到 99% 以上 完全可定制,支持 80 多种语言 支持表格识别 二维码/条码提取识别 GitHub数据 15.7k s…

python自动化之(django)(2)

1、创建应用 python manage.py startapp apitest 这里还是从上节开始也就是命令行在所谓的autotest目录下来输入 然后可以清楚的看到 多了一个文件夹 2、创建视图 在views中加入test函数(所建应用下) from django.http import HttpResponse def tes…