Redis概述二 Redis命令汇总 | 青训营

125 阅读12分钟

redis基本命令

  1. dbsize 查询当前数据库内容长度
  2. flushdb 删除当前数据库中所有数据
  3. flushall 删除所有数据库中所有数据
  4. ping 心跳命令,检测客户端与 Redis 的连接是否正常
  5. set <key> <value> 将指定key-value 写入到当前DB
  6. get <key> 读取指定key的value值
  7. select 5 选择数据库
  8. quit/exit 退出Redis客户端
  9. redis-cli shutdown 关闭Redis服务

Key操作命令

keys

  • 格式 KEYS pattern

查找所有符合给定模式 pattern 的 key, pattern 为正则表达式

KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令,而使用 scan 命令代替

exists

  • 格式 EXISTS key

检查给定 key 是否存在

若 key 存在,返回 1,反之 0

del

  • 格式 DEL key [key ...]

删除给定的一个或多个 key。不存在的 key 会被忽略

返回被删除 key 的数量

rename

  • 格式 RENAME key newKey

将 key 改为 newKey

当 key 与 newKey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时,RENAME 命令将覆盖旧值。改名成功后提示 OK,失败时候返回一个错误

move

  • 格式 MOVE key db

将当前数据库的 key 移动到给定的数据库 db 当中

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果,移动成功返回 1,反之 0

type

  • 格式 TYPE key

返回 key 所储存的值的类型

返回值有以下六种

  • none(key 不存在)
  • string
  • list
  • set
  • zset
  • hash

expire 与 pexpire

  • 格式 EXPIRE key seconds

为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key 被称为'易失的'(volatile)

ttl 与 pttl

  • 格式 TTL key

TTL,time to live,返回给定 key 的剩余生存时间

其返回值存在三种可能

  • 当 key 不存在时,返回 -2
  • 当 key 存在但没有设置剩余生存时间时,返回 -1
  • 否则,返回 key 的剩余生存时间,ttl 命令返回的时间单位为秒,而 pttl 命令返回的时间单位为毫秒

persist

  • 格式 persist key

去除给定 key 的生存时间,将这个 key 从'易失的'转换成'持久的'

当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,则返回 0

randomkey

  • 格式 RANDOMKEY

从当前数据库中随机返回(不删除)一个key

当前数据库不为空时,返回一个 key。当数据库为空时,返回nil

scan

  • 格式 SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

用于迭代数据库中的 key

  • cursor:本次迭代开始的游标
  • pattern:本次迭代要匹配的 key 的模式
  • count:本次迭代要从数据集里返回多少元素,默认值为 10
  • type:本次迭代要返回的 value 的类型,默认为所有类型

使用间断的,负数,超出范围的或者其他非正常的游标来执行增量式迭代

不会造成服务器崩溃。

当数据量很大时,count 的数据量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。由于 scan 命令每次执行都只会返回少量元素,所以该命令可以用于生产环境

String 型 Value 操作命令

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

getset

  • 格式 GETSET key value

将给定 key 的值设置为value,并返回 key 的旧值

当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回nil

mset 与 msetnx

  • 格式 MSET/MSETNX key value [key value ...]

同时设置一个或多个 key-value 对

如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令;他只会在所有给定 key 都不存在的情况下进行操作操作,某些给定 key 被更新而另一些给定 key 没有改变的情况不可发生

mget

  • 格式 MGET key [key ...]

返回(一个或多个)给定 key 的值

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil,因此,该命令永不失败

append

  • 格式 APPEND key value

如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在,append 就简单的将给定的 key 设为 value,就像执行 SET key value 一样

追加之后,返回 key 中字符串的长度

incr 与 decr

  • 格式 incr keydecr key

increment 自动递增,将 key 中存储的数字值增一

decrement 自动递减,将 key 中存储的数字值减一

如果 key 不存在,那么 key 的值会先被初始化为 0,然后在执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后的值

incrby 与 decrby

  • 格式 incrby key incrementdecrby key decrement

将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数

如果 key 不存在,那么 key 的值会先被初始化 0,然后再执行操作,同 incr/decr

incrbyfloat

  • 格式 incrbyfloat key increment

为 key 中所储存的值加上浮点数增量,没有 decrbyfloat

strlen

  • 格式 strlen key

查看 key 中字符串长度

getrange

  • 格式 getrange key start end

返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内

end 必须要比 start 大,支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,以此类推

setrange

  • 格式 setrange key offset value

用 offset 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始

当 offset 值大于 str 长度时,中间使用零字节\x00填充,对于不存在的 key 当作空串处理

应用场景

数据缓存

Redis 作为数据缓存层,MySQL 作为数据存储层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从 MySQL 中获取后先存入缓存层再返回给应用服务器

共享 Session

对于一个分布式应用系统,如果将类似用户登陆信息这样的 Session 数据保存在提供登陆服务的服务器中,那么如果用户再次提交像收藏,支付等请求时可能会出现的问题:在提供收藏,支付等服务的服务器中并没有该用户的 Session 数据,从而导致该用户需要重新登录。对于用户来说这是不能接受的。

此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从 Redis 中查找相应的 Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。这样就不会引发'重新登录问题'

限制器

Redis 可以结合 key 的过期时间与 incr 命令来完成限速,防止 DoS 攻击

Hash 型 Value 操作命令

Hash 表就是一个映射表 Map,也是由键-值对构成的,为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型

hset

  • 格式 HSET key field value

将 hash 表 key 中的域 field 的值设为 value

如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作,返回1。已存在则覆盖,返回0

hget

  • 格式 hget key <field>

同 String

hmset

  • 格式 hmset key field value [field value ...]

同 String

hmget

  • 格式 hmget key field [field ...]

同 String

hgetall

  • 格式 hgetall key

获取 key 中所有 field 和 value 值

hkeys

  • 格式 hkeys key

获取 key 中所有 field 值

hlen

  • 格式 hlen key

获取 key 的 长度

略(大多与String命令同)

应用场景

存储对象数据,对对象属性的修改再=在 Redis 中就可以直接完成,其不像 String 型 Value 存储对象,那个对象是序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为 JSON 串后写入到 Redis

List 型 Value 操作命令

lpush/rpush

  • 格式 LPUSH key value [value ...]RPUSH key value [value ...]

表头/表尾添加元素

linsert

  • 格式 LINSERT key BEFORE|AFTER pivot value

将值 value 插入到列表 ley 当中,位于元素 pivot 之前或之后

lpop/rpop

  • 格式 LPOP key [count]RPOP key [count]

从列表 key 的表头/表尾移除 count 个元素,并返回移除的元素,count 默认值 1

当 key 不存在时,返回 nil

blpop/brpop

  • 格式 Blpop key [key ...] timeoutbrpop key [key ..] timeout

列表的阻塞式(blocking)弹出,命令。它们是 LPOP/RPOP 的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLpop/Brpop 命令阻塞,知道等待 timeout 超时或发现可弹出元素为止

rpoplpush

  • 格式 rpoplpush source destnation

将source 列表的尾元素,放到 destnation 列表的表头

brpoplpush

rpoplpush 的阻塞版本

lrem

  • 格式 lrem key count value

根据参数 count 的值,移除列表中与参数 value 相等的元素

count值为下列几种

  • count > 0:从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
  • count < 0:从表尾开始向表头搜索
  • count = 0:移除表中所有与 value 相等的值

返回被移除元素的数量,当 key 不存在时,返回 0

ltrim

  • 格式 LTRIM key start stop

对一个列表进行修剪,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

下表参数 start 和 stop 都以 0 为底,如果 start > stop,返回空列表,如果 stop < end,Redis 将 stop 的值设置为 end

应用场景

通过构建不同的数据结构来实现相应的业务功能

  • 列(lpush + lpop)
  • 队列(lpush + rpop)
  • 阻塞式消息队列(lpush + brpop)
  • 动态有限集合(lpush + ltrim)

Set 型 Value 操作命令

Set 型的底层是 Hash 表,Set 中的元素具有无序性与不可重复性

sadd

  • 格式 SADD key member [member ...]

将一个或多个 member 元素加入到集合 key 中,已经存在于集合的 member 元素将被忽略

key 不存在,则创建。当 key 不是集合类型时,返回一个错误

smembers

  • 格式 SMEMBERS key

查看 key 中的所有值

scard

  • 格式 SCARD key

返回 Set 集合的长度

sismember

  • 格式 SISMEMBER key member

判断 member 元素是否是集合 key 的成员

smove

  • 格式 SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合

srem

  • 格式 SREM key member [member ...]

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

srandmember

  • 格式 srandmember key [count]

在 key 中随机 count 个元素,count 默认为 1

count 为正数时,且小于集合长度,那么返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合长度,返回整个集合。如果 count 为负数,那么返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复

spop

  • 格式 SPOP key [count]

移除并返回集合中的 count 个随机元素,count 必须为正数,且默认值为 1

sdiff

  • 格式 SDIFF key key2

差集,返回 key 相对于 key2 不同的元素

sdiffstore

  • 格式 SDIFFSTORE destination key key2

差集存储,将 key 相对于 key2 的差集存储在 destation 集合中

sinter

  • 格式 SINTER key key2

交集,返回 key 与 key2 的交集

sinterstore

  • 格式 SINTERSTROE destination key key2

交集存储,将 key 与 key2 的交集存储在 destination 集合中

sunion

并集,同上

sunionstore

并集存储,同上

应用场景

  • 动态黑白名单
  • 有限随机数(spop 或 srandmember)
  • 用户画像(sadd/sinter/sinterstore)

有序 Set 型 Value 操作命令(ZSet)

Redis 存储数据的 Value 可以是一个有序的 Set,这个有序的 Set 中的每个元素均 String 类型,有序 Set 与 Set 的不同之处是,有序 Set 中的每个元素都有一个分值 scor,Redis 会根据 score 的值对集合进行由小到大的排序。其与 Set 集合要求相同,元素不能重复,但元素的 score 可以重复,由于该类型的所有命令均是 z 开头,所有该 Set 也称为 ZSet

zadd

  • 格式 ZADD key score member [[score member] ...]

将一个或多个 member 元素以及其 score 值加入到有序 key 中的适当位置

zrange

  • 格式 zrange key start end [withscores]

将集合 key 中从 start 到 end 的元素切片输出,添加 withscores 显示 key 内元素的 score 值

zrangebyscore 与 zrevrangebyscore

  • 格式 zrangebyscore key min max [withscores] [LIMIT offset count]
  • 格式 zrangebyscore key max min [withscores] [LIMIT offset count]

将集合 key 中 score > min,score <= max 的 元素输出,limit 按照前部分查询到的结果 从下标为 offset 开始,切片 count 数量元素并返回

zrevrangebyscore 是 zrangebyscore 的反向

zcard

查询 key 集合的长度,同Set

zcount

  • 格式 zcount key start end

计数 key 集合中下标 > start,下标 <= end 的元素个数

zscore

  • 格式 zscore key field

查询 key 集合中 field 元素的 score 值

zrank 与 zrevrank

  • 格式 zrank key fieldzrevrank key field

查询 key 中 field 元素的排名,zrevrank 倒序排名

zrem 与 zremrangerank

删除 key 中元素,zremrangerank 删除 key 中一个范围内的元素

zremrangebyscore

删除 key 中 score 在一个范围内的元素

zrangebylex

  • 格式 zrangebylex key (min [max

按照第一个字母排序切片,min 和 max 前必须添加符号

zlexcount

根据字母返回计数