为方便查阅,一篇文章介绍全部的命令,14类
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
Strings | Lists | Sets | Hashes | Sorted Sets | Pub/Sub | Connection |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
Server | Scripting | Keys | HyperLogLog | Geo | Transactions(事务) | Cluster(集群) |
Strings
- 基本字符串命令
- 字符串在长度小于 1M 之前,扩容空间采用加倍策略,也就是保留 100% 的冗余空间。当长度超过 1M 之后,为了避免加倍后的冗余空间过大而导致浪费,每次扩容只会多分配 1M 大小的冗余空间。
命令 | 描述 | 语法 |
---|---|---|
Set |
指定键设置任意值。存在则覆盖 XX :只在键已经存在时,才对键进行设置操作。 NX :只在键不存在时,才对键进行设置操作 |
Set key value [EX seconds] [PX milliseconds] [NX|XX] |
SetNX |
Set if Not eXists | SetNX key value |
SetEX |
指定键设置任意值,生存时间以秒为单位 | SetEX key seconds value |
PSetEX |
指定键设置任意值,生存时间以毫秒为单位 | PSetEX key milliseconds value |
MSet |
指多个定键设置任意值。存在则覆盖,操作具有原子性 | MSet key value [key value ...] |
MSetNX |
指多个定键设置任意值,不允许指定键已存在,原子操作 | MSetNX key value [key value ...] |
Get |
返回指定键的字符串值,不存在返回nil,不是字符串则报错 | Get key |
MGet |
同Get,只是可以指定多个键 | MGet key [key ...] |
Del |
删除指定键,还可以删除其他类型的值 | Del key [key ...] |
StrLen |
获取指定键的值为字符串的长度,非字符串则报错 | StrLen key |
- 修改字符串命令
命令 | 描述 | 语法 |
---|---|---|
Append |
追加字符串,不存在建立 | Append key value |
GetRange |
的到指定范围字符串的子串,start和end可以为负 | GetRange key start end |
GetSet |
得到旧值,设置新值,不存在返回nil,与Incr命令配合进行计数功能 | GetSet key value |
SetRange |
替换指定字符串的一部分,offset超过原长度时,则补0 | SetRange key offset value |
- 修改数字值命令,以下命令键不存在时先赋值0,再操作
命令 | 描述 | 语法 |
---|---|---|
Decr |
减一 | Decr key |
DecrBy |
减指定数,可以为负 | DecrBy key decrement |
Incr |
加一 | Incr key |
IncrBy |
加指定数,可以为负 | IncrBy key decrement |
IncrByFloat |
对浮点数加指定值 | IncrByFloat key decrement |
- 位图命令
命令 | 描述 | 语法 |
---|---|---|
SetBit |
设置或者清空指定位置的Bit值 | SetBit |
GetBit |
获取指定位置的Bit值 | GetBit |
BitCount |
统计字符串指定起始位置为1比特的位数 | BitCount key [start end] |
BItPos |
获取字符串里第一个被设置为1Bit或者0Bit的位置 | BItPos |
Bitop |
对一个或者多个二进制位进行位运算 | Bitop |
BitField |
对指定的字符串进行位数组寻址,位值自增自减操作 | BitField |
Lists
- Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n),这点让人非常意外。
命令 | 描述 | 语法 |
---|---|---|
LPush |
左边插入一个或者多个值,不存在则先创建 | Push key value [value ...] |
RPush |
右边插入一个或者多个值 | RPush key value [value ...] |
LPop |
左边读出并且删除一个元素,不存在返回nil | LPop key |
RPop |
右边读出并且删除一个元素,不存在返回nil | RPop key |
LIndex |
通过下标获取一个元素值,index可以为负 | LIndex key index |
LRem |
列表删除指定元素,count可以为负,返回值为删除的个数 | LRem key count value |
LRange |
获取指定范围列表元素,start和stop可以为负 | LRange key start stop |
LLen |
获取元素个数 | LLen key |
LSet |
设置列表指定位置的元素值 | LSet key index value |
LTrim |
对指定列表范围的元素进行修剪,保留start和stop之间的值,删除其他,可以为负 | LTrim key start stop |
LInsert |
在指定位置插入一个新元素 | LInsert key Before|After pivot value |
LPushX |
只有列表存在时,从左边插入元素,返回列表长度 | LPushX key value |
RPopLPush |
删除source右面最后一个元素,并追加到destination左边 | RPopLPush source destination |
RPushX |
只有列表存在时,从右边插入元素 | RPushX key value |
BLPop |
阻塞式LPop,timeout=0时为无过期时间 | BLPop key [key ...] timeout |
BRPop |
阻塞式RPop | BRPop key [key ...] timeout |
BRPopLPush |
阻塞式BRPopLPush | BRPopLPush source destination timeout |
- LInsert Before指定元素之前插入,After指定元素之后插入。pivot为列表里面指定的值,key不存在时命令不指定,插入成功返回列表长度,pivot不存在时返回-1
Hashes
基本操作
命令 | 描述 | 语法 |
---|---|---|
HSet |
插入一个键值对,存在则重写 | HSet key field value |
HGet |
返回指定键的一个值 | HGet key field |
HMSet |
插入一个或者多个键值对 | HMSet key field value [field value ...] |
HMGet |
返回指定键的一个或者多个值 | HMGet key field [field ...] |
HGetAll |
返回所有的键值对,键值对作为数组元素奇偶排列 | HGetAll key |
HExists |
返回是否存在指定的标志 | HExists key field |
HDel |
删除指定键值对 | HDel key field [field ...] |
HLen |
包含的键值对数量 | HLen key |
HSetNX |
仅对指定散列表的新键设置值,已存在时无操作 | HSetNX key field value |
HStrLen |
返回散列表指定键的字符串长度 | HStrLen key field |
HVals |
返回散列表所有的键的值 | HVals key |
HIncrBy |
对散列表指定的键的整型值进行增量操作,不存在时先赋0,再操作 | HIncrBy key field increment |
HIncrByFloat |
对散列表指定的键的浮点型值进行增量操作,不存在时先赋0,再操作 | HIncrByFloat key field increment |
HKeys |
返回指定散列表表的所有键名 | HKeys key |
HScan |
增量迭代返回列表中的指定键值对 | 同SScan |
Sets
- Redis 的集合相当于 Java 语言里面的 HashSet,它内部的键值对是无序的唯一的。它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值NULL。
基本命令
命令 | 描述 | 语法 |
---|---|---|
SAdd |
添加一个或者多个元素到集合,存在则忽略添加 | SAdd Key member [member ...] |
SMembers |
返回集合的所有元素 | SMembers Key |
SRem |
删除集合中指定的元素,不存在则忽略 | SRem key member [member ...] |
SCard |
返回集合中元素数量 | SCard key |
SRandMember |
从集合中随机返回一个或者多个元素 | SRandMember key [count] |
SMove |
把集合中一个元素移动到另外一个集合,原集合不存在则忽略,目标集合存在则只删除源集合 | SMove source destination member |
SPop |
从集合中随机删除并返回一个或者多个元素 | SPop key [count] |
SIsMember |
集合成员是否存在,存在返回1,否则为0 | SIsMember key member |
SScan |
增量迭代返回集合元素 | SScan key cursor [MATCH patttern] [COUNT count] |
- SRandMember count < 0 并且绝对值大于全部个数则返回值里面会出现一个元素多次出现情况,key不存在返回nil
- SScan和SMembers:SScan和SMembers在高并发大集合时存在性能问题,SScan可以避免,但是SScan存在时效性,元素返回多次的可能,每次最多返回十几个元素
合并交差
命令 | 描述 | 语法 |
---|---|---|
SUnion |
并,不重复 | SUnion key [key ...] |
SUnionStore |
带存储的并 | SUnionStore destination key [key ...] |
SInter |
交 | SInter key [key ...] |
SInterStore |
带存储的交 | SInterStore destination key [key ...] |
SDiff |
差集,前面key减去后面的key | SDiff key [key ...] |
SDiffStore |
带存储的差集 | SDiff destination key [key ...] |
ZSets
- zset 可能是 Redis 提供的最为特色的数据结构,它也是在面试中面试官最爱问的数据结构。它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。它的内部实现用的是一种叫做「跳跃列表」的数据结构。...
命令 | 描述 | 语法 |
---|---|---|
ZAdd | 有序集合添加键值对 | ZAdd key [NX|XX] [CH] [INCR] score member [score member ...] |
ZRange | 返回指定范围有序集合的键或键值对 | ZRange key start stop [WRRHSCORES] |
ZCount | 返回有序集合指定值范围的个数 | ZCount key min max |
ZRem | 删除有序集合指定键值对 | ZRem key member [member ...] |
ZCard | 返回有序集合键值对个数 | ZCard key |
ZIncrBy | 对有序集合指定键的值进行增量操作 | ZIncrBy key increment member |
ZLexCount | 返回有序集合指定键范围的个数 | ZLexCount min max |
ZScore | 返回游戏集合指定键对应的值 | ZScore key member |
ZRank | 返回有序集合指定值排名序号 | ZRank key member |
ZUnionStore | 带存储功能的多有序集合并运算 | ZUnionStore destination key [key ...] [WEIGHTS weight] [SUM|MIN|MAX] |
ZinterStore | 带存储功能的多有序集合交运算 | ZinterStore destination key [key ...] [WEIGHTS weight] [SUM|MIN|MAX] |
ZremRangeByLex | 在同值情况下,删除指定范围的键值对 | ZremRangeByLex key min max |
ZrangeByLex | 在同值情况下,返回指定范围的键值对 | ZrangeByLex key min max [LIMIT offset count] |
ZrangeByScore | 返回指定范围有序集的键或键值对列表 | ZrangeByScore key min max [WITHSCORES] [LIMIT offset count] |
ZremRangeByScore | 删除指定大小范围的键值对 | ZremRangeByScore key min max |
ZremRangeByRank | 删除指定小标范围的键值对 | ZremRangeByRank |
ZrevRange | 返回指定值下标范围的固定排序键或键值对列表 | ZrevRange key start stop [WITHSCORES] |
ZrevRangeByLex | 同值情况下返回指定键范围倒序键或键值对列表 | ZrevRangeByLex key max min [WITHSCORES] [LIMIT offset count] |
ZrevRangeByScore | 返回指定大小范围的固定排序键或键值对列表 | ZrevRangeByScore key max min [WITHSCORES] [LIMIT offset count] |
ZrevRank | 返回指定键在有序集合的排名 | ZrevRankkey member |
ZScan | 增量迭代返回所有有序集合中的键值对列表 | ZScan cursor [MATCH pattern] [COUNT count] |
HyperLogLog
命令 | 描述 | 语法 |
---|---|---|
PFAdd | 添加到HyperLogLog | PFAdd key element [element ...] |
PFCount | 返回指定key的近似基数 | PFCount key [key ...] |
PFMerge | 将多个添加到HyperLogLog合并成一个 | PFMerge destkey sourcekey [sourcekey ...] |
- pf 的内存占用为12k
GeoHash
命令 | 描述 | 语法 |
---|---|---|
GEOAdd | 将指定的空间元素添加到指定的key里,返回新添加的元素个数,不包括更新的元素个数 | GEOAdd key longitude latitude member [longitude latitude member ...] |
GEODist | 返回指定位置之间的距离,unit为返回的距离单位(m,km,mi,ft) | GEODist key member1 member2 [unit] |
GEOHash | 返回一个标准的地理空间GEOHash字符串 | GEOHash key member member2 [member ...] |
GEOPos | 返回地理空间的经纬度 | GEOPos key member [member ...] |
GEORadius | 查询指定半径内所有的地理空间元素的集合 | GEORadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] |
GEORadiusByMember | 查询指定半径匹配到的地理空间元素 | GEORadiusByMember key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] |
GEORadius
-
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 -
WITHCOORD
: 将位置元素的经度和维度也一并返回。 -
WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。 - ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
- DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。
Pub/Sub
命令 | 描述 | 语法 |
---|---|---|
Publish | 发布信息到指定频道,channel频道名,返回值为收到消息的客户端数量 | Publish channel message |
Subscribe | 订阅指定频道信息 | Publish channel [channel ...] |
PSubscribe | 订阅指定模式的频道信息 | PSubscribe pattern [pattern ...] |
PunSubscribe | 退订指定模式,并返回相关信息 | PunSubscribe pattern [pattern ...] |
UnSubscribe | 退订指定频道信息 | UnSubscribe channel [channel ...] |
PubSub | 统计Pub/Sub子系统状态的数量 | subcommand [argument [argument ...]] |
- Pub/Sub的缺点就是客户端一放下线,下线后信息无法继续接收,部分信息丢失
- PubSub subcommand为子命令,包括Channels、NumSub、NumPat。argument为对应参数
PubSub Channels [pattern] 累出当前活动的频道,活跃为有至少一个订阅者
PubSub NumSub [channel ...] 返回指定频道的订阅数量
PubSub NumPat 返回指定模式的订阅数量
Connection(连接命令)
命令 | 描述 | 语法 |
---|---|---|
Auth | 验证 | Auth password |
Echo | 客户端返回输入的字符串 | Echo message |
Ping | 测试连通性 | Ping 字符串 |
Quit | 关闭连接 | Quit |
Select | 选择一个数据库,下标值从0开始,一个新连接默认连接的数据库是DB0。 | Select index |
Server
命令 | 描述 | 语法 |
---|---|---|
Client List | 获得客户端连接信息及其数量列表 | Client List |
Client SetName | 设置当前链接的名称 | Client SetName name |
Client GetName | 获取当前列表的名称 | Client GetName |
Client Kill | 关闭客户端链接 | Client Kill [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no] |
Client Pause | 暂停处理客户端请求,timeout为暂停的时间 | Client Pause timeout |
Command | 返回redis所有命令 | Command |
Command Cound | 统计redis所有命令总数 | Command Cound |
Command GetKeys | 获得指定命令的所有键 | Command GetKeys |
Command Info | 获得指定命令的详细使用信息 | Command Info command-name [command-name ...] |
Config Get | 获取服务器端配置文件参数的值,paramenter为radis配置文件里的参数名 | Config Get paramenter |
Config ResetStat | 复位再分配使用Info命令报告的统计 | Config ResetStat |
Config Set | 设置配置文件中的指定参数的值 | Config Set paramenter value |
Config Rewrite | 重写内存中的配置文件 | Config Rewrite |
BGRewriterAof | 异步重写追加文件命令 | BGRewriterAof |
BGRSave | 异步保存数据集到磁盘上 | BGRSave |
LastSave | 获得最后一次同步磁盘的时间 | LastSave |
Save | 同步数据到磁盘上 | Save |
DBSize | 返回数据库实例里数据存储对象个数 | DBSize |
Debug Object | 数据存储对象调试命令 | Debug Object key |
Debug SegFault | 让Redis崩溃 | Debug SegFault |
FlushAll | 删除所有数据库所有数据 | FlushAll |
FlushDB | 删除当前数据库所有数据 | FlushDB |
Iofo | 返回redis服务器的各种信息和统计数据 | Iofo [section] |
Monitor | 持续返回服务器端处理的每条命令信息 | Monitor |
Role | 返回主从实例所属的角色 | Role |
ShutDown | 异步保存数据到磁盘,并关闭服务器Redis | ShutDown [NOSAVE] [SAVE] |
SlaveOf | 将当前服务器转变为指定服务器的从属服务器 | SlaveOf host port |
SlowLog | 管理Redis的慢速记录日志 | SlowLog subcommang [argument] |
SYNC | 用于复制功能的内部命令 | SYNC |
Time | 返回当前服务器时间 | Time |
- Client List
- Client Kill:[ip:port]指定客户端ip、端口号;[ID client-id]指定的客户端唯一id;TYPE指定一种特殊类型的客户端;[ADDR ip:port]为指定客户端ip、端口;SKIPME选择一种开关
Scripting(脚本命令)
命令 | 描述 | 语法 |
---|---|---|
EVal | 执行Lua脚本,numkeys为key的个数,key拜师在脚本中用到的键 | EVal script numkeys key [key ...] arg [arg ...] |
EValSha | 根据给定的校验码,执行服务器端Lua脚本命令 | EValSha sha1 numkeys key [key ...] arg [arg ...] |
Script Load | 把Lua脚本代码加载到服务缓存上,并不执行 | Script Load script |
Script Flush | 从脚本缓存中移除所有脚本 | Script Flush |
Script Exists | 查看指定的脚本是否已经被保存到缓存中 | Script Exists script [script ...] |
Script Kill | 终止当前正在运行的Lua脚本 | Script Kill |
Keys(键命令)
命令 | 描述 | 语法 |
---|---|---|
Del | 删除key指定的数据存储对象 | Del key [key ...] |
Dump | 序列化给定的key | Dump key |
Exists | 检查指定key是否存在 | Exists key [key ...] |
Expire | 设置key的过期时间,秒 | Expire key seconds |
ExpireAt | 设置key的过期时间,秒用时间戳 | ExpireAt key timestamp |
keys | 查找所有符合模式的key | keys pattern |
Migrate | 原子性的的把当前的key转移到指定数据库(可指定服务器)COPY为保留当前数据,REPLACE是否替换目标数据库中的key | Migrate host port key destinatoon-db timeout [COPY] [REPLACE] |
Move | 将当前数据库的key转移到指定数据库内(本机中) | Move key db |
Object | 以内部调试方式给出key的内部信息 | Object subcommand [arguments [arguments ...]] |
Persist | 移除key的过期时间 | Persist key |
PExpire | 设置key的过期时间,毫秒 | PExpire key milliseconds |
PExpireAt | 设置key的过期时间,毫秒用时间戳 | PExpireAt key milliseconds-timestamp |
RandomKey | 从数据库随机返回一个key | RandomKey |
Rename | 将指定key重命名,允许重复key | Rename key newkey |
RenameNX | 将指定key重命名不存在的key | RenameNX key newkey |
Restore | 反序列化指定key | Restore key ttl serialized-value [REPLACE] |
Scan | 增量迭代返回当前数据库中key的数组列表 | Scan cursor [MATCH pattern] [COUNT count] |
Sort | 对指定key对象进行排序并返回或者保存到目标key | Sort key [BY pattern] [LIMIT offset count] [GET pattern] [ASC|DESC] [ALPHA] STORE destination |
TTL | 秒返回key的剩余生存时间 | TTL key |
PTTL | 毫秒返回key的剩余生存时间 | PTTL key |
Type | 返回当前key的数据结构类型 | Type key |
Wait | 阻塞当前客户端到指定从服务器端的写操作 | Wait numslaves timeout |
-
序列化生成的值有以下几个特点:
- 它带有 64 位的校验和,用于检测错误,RESTORE 在进行反序列化之前会先检查校验和。
- 值的编码格式和 RDB 文件保持一致。
- RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。
- 序列化的值不包括任何生存时间信息
-
Migrate COPY为保留当前数据,REPLACE是否替换目标数据库中的key
Transactions(事务)
命令 | 描述 | 语法 |
---|---|---|
Multi | 标记一个事务块的开始 | Multi |
Exec | 执行所有事务块内的命令 | Exec |
Discard | 取消事务 | Discard |
Watch | 监事一个或者多个key | Watch key [key ...] |
UnWatch | 取消WATCH命令对所有key的监视 | Un Watch |
- Redis 的事务根本不能算「原子性」,而仅仅是满足了事务的「隔离性」,隔离性中的串行化——当前执行的事务有着不被其它事务打断的权利。
- watch 会在事务开始之前盯住 1 个或多个关键变量,当事务执行时,也就是服务器收到了 exec 指令要顺序执行缓存的事务队列时,Redis 会检查关键变量自 watch 之后,是否被修改了 (包括当前事务所在的客户端)。如果关键变量被人动过了,exec 指令就会返回 null 回复告知客户端事务执行失败,这个时候客户端一般会选择重试。...
- Redis 禁止在 multi 和 exec 之间执行 watch 指令,而必须在 multi 之前做好盯住关键变量,否则会出错。
Cluster(集群)
- Hash Slots:Redis数据分片
- Node:节点
- Gossip:Redis节点之间通信协议
命令 | 描述 | 语法 |
---|---|---|
Cluster Info | 获取redis集群相关所有命令 | Cluster Info |
Cluster Meet | 实现集群节点之间的通信 | Cluster Meet ip:port |
Cluster Replicate | 把Master节点改成Slave节点 | Cluster Replicate node-id |
Cluster nodes | 列出当前集群的所有节点 | Cluster nodes |
Cluster Forget | 移除指定节点 | Cluster Forget node-id |
Cluster Reset | 重新设置集合节点 | Cluster Reset [HARD|SOFT] |
Cluster SaveConfig | 将节点的配置文件保存到磁盘 | Cluster SaveConfig |
Cluster Set-Config-Epoch | 将新节点设置特定的新的配置时间标志 | Cluster Set-Config-Epoch config-epoch |
Cluster Slaves | 提供为指定主节点相关的从从节点信息列表 | Cluster Slaves node-id |
Cluster Count-Failure-Reports | 返回指定节点的故障报告数量 | Cluster Count-Failure-Reports node-id |
Cluster FailOver | 手动从节点变为主节点 | Cluster FailOver [FORCE|TAKEOVER] |
ReadOnly | 集群吗中的从节点开启只读模式 | ReadOnly |
ReadWrite | 禁止读取请求跳转到集群的从节点 | ReadWrite |
Cluster AddSlots | 把Hash插槽分配给街搜命令的服务器节点 | Cluster AddSlots slot [slot ...] |
Cluster SetSlot | 设置节点的插槽信息 | Cluster SetSlot slot IMPORTING|MIGRATING|STABLE|NODE [node-id] |
Cluster GetKeysSinslot | 返回链接节点指定Hash Slot 里的key | Cluster GetKeysSinslot slot count |
Cluster DelSlots | 删除当前节点的指定插槽 | Cluster DelSlots slot [slot ...] |
Cluster Slots | 返回与插槽相关的节点信息 | Cluster Slots |
Cluster KeySlot | 计算key应该被放置在那个插槽上 | Cluster KeySlot key |
Cluster CountKeySinSlot | 返回当前节点指定插槽中键的数量 | Cluster CountKeySinSlot key |
网友评论