3.1 redis基础命令
3.1.1 心跳命令 ping
键入 ping 命令,会看到 PONG 响应,说明客户端与 Redis 的连接是正常的。
3.1.2 读写键值命令
set key value 将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。更多格式后面会详细学习。
3.1.3 DB 切换 select
Redis 默认有 16 个数据库。
select 15 #切换到最后一个数据库
3.1.4 查看 key 数量 dbsize
dbsize 命令可以查看当前数据库中 key 的数量。
3.1.5 删除当前库中数据 flushdb
3.1.6 删除所有库中数据命令 flushall
3.1.7 退出客户端命令 exit/quit
3.2 Key操作命令
Redis 中存储的数据整体是一个 Map,其 key 为 String 类型,而 value 则可以是 String、 Hash 表、List、Set 等类型。
3.2.1 keys
格式:KEYS pattern
查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。
KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般使用 scan 命令代替。
3.2.2 exists
格式:exist key
检查给定 key 是否存在。
若 key 存在,返回 1 ,否则返回 0 。
3.2.3 del
格式:DEL key [key ...]
删除给定的一个或多个 key 。不存在的 key 会被忽略。
返回被删除 key 的数量。
3.2.4 rename
格式:RENAME key newkey
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。
3.2.5 move
格式:MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。
如果当前数据库和目标数据库有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有效果。移动成功返回 1 ,失败则返回 0 。
3.2.6 type
格式:TYPE key
返回 key 所储存的值的类型。
有以下6种类型:
- none (key 不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
3.2.7 expire 与 pexpire
格式:EXPIRE key seconds
为 key 设置生存时间。key 过期时会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key 被称为“易失的”(volatile)。
生存时间设置成功返回 1。若 key 不存在时返回 0 。
3.2.8 ttl 与 pttl
格式:TTL key
TTL, time to live,返回给定 key 的剩余生存时间。
返回值存在三种可能:
- key 不存在时,返回 -2
- key 存在但没有设置剩余生存时间时,返回 -1
- 否则,返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒,而 pttl 命令返回的时间单位为毫秒。
3.2.9 persist
格式:PERSIST key
去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”。
当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,返回 0。
3.2.10 randomkey
格式:RANDOMKEY
从当前数据库中随机返回(不删除)一个 key。数据库为空时,返回 nil。
3.2.11 scan
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
用于迭代数据库中的数据库键。其各个选项的意义为:
- cursor:本次迭代开始的游标。
- pattern :本次迭代要匹配的 key 的模式。
- count :本次迭代要从数据集里返回多少元素,默认值为 10
- type:本次迭代要返回的 value 的类型,默认为所有类型。
SCAN 命令是一个基于游标 cursor 的迭代器:SCAN 命令每次被调用之后,都会向用户返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。用户在下次迭代 时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。如果新游标返回 0 表示迭代已结束。
使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成 服务器崩溃。
3.3 String 型 Value 操作命令
一个 String 类型的 Value 最大为 512M
3.3.1 set
格式:SET key value [EX seconds | PX milliseconds] [NX|XX]
SET 除了可以直接将 key 的值设为 value 外,还可以指定一些参数。
- EX seconds:为当前 key 设置过期时间,单位秒。
- PX milliseconds:为当前 key 设置过期时间,单位毫秒。
- NX:指定的 key 不存在才会设置成功,用于添加指定的 key。
- XX:指定的 key 必须存在才会设置成功,用于更新指定 key 的 value。
如果 value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来
3.3.2 setex 与 psetex
格式:SETEX/PSETEX key seconds value
set expire,其不仅为 key 指定了 value,还为其设置了生存时间。如果 key 已经存在,则覆写旧值。
该命令类似于Set + Expire,不同之处是, SETEX 是一个原子操作
3.3.3 setnx
格式:SETNX key value
将 key 的值设为 value 。若 key 存在,则不做任何动作。成功,返回 1,否则,返回 0。
3.3.4 getset
格式:GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值。
key 存在但不是字符串类型时,返回一个错误;key 不存在时,返回 nil
3.3.5 mset 与 msetnx
格式:MSET/MSETNX key value [key value ...]
同时设置一个或多个 key-value 对。
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。MSET/MSETNX 是原子操作,所有给定 key 都会同时被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。 该命令永不失败。
3.3.6 mget
格式:MGET key [key ...]
返回所有(一个或多个)给定 key 的值。key不存在的返回nil
3.3.7 append
格式:APPEND key value
key 存在且是一个字符串, APPEND 将 value 追加到 key 原值的末尾。key 不存在则为Set命令
3.3.8 incr 与 decr
格式:INCR key 或 DECR key
将key中存储的数字值+-1
说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。 如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后 的值。
3.3.9 incrby 与 decrby
格式:INCRBY key increment 或 DECRBY key decrement
将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数
说明:同上
3.3.10 incrbyfloat
格式:INCRBYFLOAT key increment
为 key 中所储存的值加上浮点数增量 increment
说明:同上
3.3.11 strlen
格式:STRLEN key
返回 key 所储存的字符串值的长度。
当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。
3.3.12 getrange
格式:GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,闭区间。
end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符
3.3.13 setrange
格式:SETRANGE key offset value
用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。
当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充; 对于不存在的 key 当作空串处理。
3.4 Hash 型 Value 操作命令
Redis 存储数据的 Value 可以是一个 Hash 类型。
为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。
3.4.1 hset
格式:HSET key field value
向 key 的哈希表 插入 field,value对。如果 key 不存在,创建一个新的哈希表。如果 field 已经存在于哈希表中,旧值将被覆盖。如果 field 是哈希表中新建的并且值设置成功,返回 1 。如果 field 已经存在且旧值已被新值覆盖,返回 0 。
3.4.2 hget
格式:HGET key field
返回哈希表 key 中给定 field 的值。当给定域不存在或是给定 key 不存在时,返回 nil 。
3.4.3 hmset
格式:HMSET key field value [field value ...]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
如果 key 不存在,创建哈希表。命令执行成功返回 OK 。当 key 不是哈希表(hash)类型时, 返回一个错误。
3.4.4 hmget
格式:HMGET key field [field ...]
按照给出顺序返回哈希表 key 中一个或多个域的值。如果给定的 field 不存在于哈希表,返回一个 nil 值。key不存在则返回只带nil的表
3.4.5 hgetall
格式:HGETALL key
返回哈希表 key 中所有的域和值。key 不存在则返回空列表。
若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般使用 hscan 命令代替。
3.4..6 hsetnx
格式:HSETNX key field value
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
3.4.7 hdel
格式:HDEL key field [field ...]
删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。返回被成功移除的域的数量
3.4..8 hexits
格式:HEXISTS key field
查看哈希表 key 中给定域 field 是否存在。存在返回1,其他返回0
3.4.9 hincrby 与 hincrbyfloat
格式:HINCRBY key field increment
为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。
如果 key 不存在,创建哈希表并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
3.4.10 hkeys 与 hvals
格式:HKEYS key 或 HVALS key
返回哈希表 key 中的所有域/值。key 不存在时,返回一个空表。
3.4.11 hlen
格式:HLEN key
返回哈希表 key 中域的数量。key 不存在时,返回 0
3.4.12 hstrlen
格式:HSTRLEN key field
返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度。给定的键或域不存在则返回0