疯狂的小鸡

Redis常用命令总结

字数统计: 4.8k阅读时长: 18 min
2018/10/09 Share

资料性内容,请善用Ctrl+F

针对key的操作

1.1 del key [key .. ] , 删除指定的一个或者多个key;
1.2 dump key , 序列化给定的key
1.3 restore key ttl serialized-value , 反序列化到key
1.4 exists key , 判断某一key是否存在
1.5 expire key seconds , 设置key的过期时间
① set命令可以覆盖过期时间;不改变key的操作不会影响key的生存时间
② rename也不会改变key的过期时间
③ persist命令可以删除key的过期时间,即永久
④ ttl可以查看redis中key的过期时间
1.6 expireat key timestamp , 设置key的生存时间
1.7 keys pattern , 查找所有符合给定模式pattern的key
①KEYS 匹配数据库中所有 key 。
②KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
③KEYS h
llo 匹配 hllo 和 heeeeello 等。
④KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
1.8 move key db , 将当前数据库中的key移动数据库 db中。使用select db可以切换数据库
1.9 persist key , 移除给定 key 的生存时间
1.10 pexpire,pexpireat , 设置key的过期、生存时间,单位毫秒
1.11 ttl,pttl , key的剩余过期时间,单位秒,单位是毫秒
1.12 randomkey , 随机返回一个key
1.13 rename key newkey , 将 key 改名为 newkey ,当newkey存在时会覆盖
1.14 renamenx key newkey , 当newkey不存在时,将key改名为newkey
1.15 sort key [by pattern] [get pattern [get pattern]] [limit offset count] [asc | desc] [alpha] [store destination] ,排序,pattern可以有 *字符出现
1.16 type key , 返回key所存储的值的类型 (none,string,list,set,zset,hash)
1.17 scan [db] cursor [MATCH pattern] [COUNT count] ,增量式迭代。 类似有 sscan,hscan,zscan
① SCAN命令用于迭代当前数据库中的数据库键。 返回结果为:用于下一次迭代的新游标;所有被迭代的元素
② SSCAN 命令用于迭代集合键中的 元素。
③ HSCAN 命令用于迭代哈希键中的 键值对。
④ ZSCAN 命令用于迭代有序集合中的 元素(包括元素成员和元素分值)

keys vs. scan
我们需要遍历Redis所有key或者指定模式的key时, 可以用到keys 或 scan 命令。
官网对于KEYS命令有一个提示: KEYS 的速度非常快,例如,Redis在一个有1百万个key的数据库里面执行一次查询需要的时间是40毫秒 。但在一个大的数据库中使用它仍然可能造成性能问题。redis的单线程的。keys指令会导致线程阻塞一段时间,如果这个redis正在给线上的业务提供服务,线上服务会停顿,直到指令执行完毕,服务才能恢复。(jedis中应尽量避免使用templateKey方法)。
Redis 2.8以上版本,可以使用scan指令,scan指令每次执行都只会返回少量元素,可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率。
SCAN cursor [MATCH pattern] [COUNT count]
SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程。
当SCAN命令的游标参数(即cursor)被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。SCAN增量式迭代命令并不保证每次执行都返回某个给定数量的元素,甚至可能会返回零个元素, 但只要命令返回的游标不是 0 , 应用程序就不应该将迭代视作结束。
使用COUNT选项, 能够让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。注意COUNT选项并不能严格控制返回的key数量,只能说是一个大致的约束。并非每次迭代都要使用相同的 COUNT 值。

String操作

2.1 append key value , 将value追加到原先值的末尾
2.2 bitcount key [start] [end] , 计算给定字符串中,设置为1的比特位的数据量。
① 注意字符串”1”对应的十进制为49,二进制为00110001
② 可以通过setbit key offset value
2.3 bitop operation destkey key [key …] , 对key的二进制字符串进行元操作,operation可以是and,or, not,xor。
2.4 decr key , 将key中存储的数字值减一
① 与incr命令相反
2.5 decrby key decrement , 将key所存储的值减去减量decrement
② 与incrby命令相反
2.6 get key
2.7 getbit key offset , 获取key中所存储字符串值对应偏移量上的bit
2.8 getrange key start end , 返回key中字符串值的子字符串
2.9 getset key value , 设置key的值为value,并返回key的旧值
2.10 mget key [key …] , 返回指定的多个key的值
2.11 mset key value [key value …] , 同时设置多个key-value值
2.12 msetnx key value [key value …] , 当且仅当所有的key都不存在时,同时设置多个key-value对
2.13 set key value [EX second] [PX millisceonds] [NX|XX]
① setex key second value , 设置key的同时设置过期时间单位为秒
② psetex key millisceonds value , 过期时间单位为毫秒
③ setbit key offset value , 设置指定偏移量上的位
④ setnx key value , 当且仅当key不存在时设置key的value
⑤ setrange key offset value , 从offset开始,用value参数覆盖key中的值
2.14 strlen key , 返回key中所存字符串的长度

Hash操作

3.1 hdel key field [field …] , 删除哈希表key中的一个或多个指定域
3.2 hexists key field , 查看哈希表key中给定的field是否存在
3.3 hget key feild , 查看哈希表key中给定的field的值
① hgetall key , 查看哈希表key中所有的field的值
② hmget key field [field …] , 返回哈希表key中一个或多个给定域的值
3.4 hincrby key field increment , 为哈希表key中的field的值加上增量increment
3.5 hkeys key , 获取哈希表key中的所有域
3.6 hlen key , 返回哈希表key中域的数量
3.7 hset key field value , 设置哈希表key中field的值
① hmset key field value [field value] , 同时设置过个field的值
② hsetnx key field value , 当field不存在时,设置field的值
3.8 hvals key , 返回哈希表key中所有域的值
3.9 hstrlen key field , 返回哈希表key中给定field关联值的字符长度

List操作(List相当于堆栈)

4.1 lpush key value [value …] , 将一个或者多个值插入到列表key的表头
① rpush key value [value …] , 将一个或者多个值插入到列表key的表尾
② lpushx key value ,当且仅当key存在时将值value插入到key的表头
③ rpushx key value ,当且仅当key存在时将值value插入到key的表尾
4.2 lpop key , 移除并返回列表key的头元素
① rpop key , 移除并返回列表的尾元素
② blpop key [key …] timeout , lpop的阻塞式指令
③ brpop key [key …] timeout , rpop的阻塞式指令
④ rpoplpush source destination , 将列表Source的尾元素弹出以及返回客户端,并且将该元素插入到destination列表中
⑤ brpoplpush source destination timeout , rpoplpush的阻塞版
4.3 lindex key index , 返回key中下表为index的元素
4.4 linsert key before|after pivot value , 将值value插入到key中,位为pivot之前或者之后
4.5 llen key , 返回列表key的长度
4.6 lrange key start stop , 返回列表key中指定区间内的元素
4.7 lrem key count value , 根据count的值,移除列表中与参数value相等的元素
4.8 lset key index value , 将列表key下表为index的元素值设置为value
4.9 ltrim key start stop , 对一个列表进行trim

Set操作(不可重复)

5.1 sadd key member [member …] , 将元素加入到集合key中,已经有的忽略
5.2 scard key , 返回集合key的元素个数
5.3 sdiff key [key …] , 返回一个集合的全部成员,该集合是所有给定集合之间的差集
5.4 sdiffstore destination key [key …] , 放回集合之间的差集,并将它保存在destination集合中
5.5 sinter key [key …] ,返回集合中给定集合的交集
5.6 sinterstore destination key [key …] , 返回给定集合之间的差集,并将它保存在destination集合中
5.7 sismember key member , 判断member元素是否为集合key成员
5.8 smembers key , 返回集合中的所有成员
5.9 smove source destination member , 将member元素从source集合移动到destination集合
5.10 spop key , 移除并返回集合中的一个随机元素
5.11 srandmember key [count] , 返回指定count个数的集合,count为正数表示不能重复,负数可以重复
5.12 srem key member [member …] , 移除集合key中的多个元素
5.13 sunion key [key …] , 返回所有指定key的并集
5.14 sunionstore destination key [key …]

ZADD操作(有序集合)

6.1 zadd key source member [[source member] […]] , 将一个或者多个member元素及其score值加入到有序集合key中
6.2 zcard key , 返回有序集合key的元素个数
6.3 zcount key min max , 返回有序集合key中,score值在min和max之间的元素个数
6.4 zincrby key increment member , 为有序集合key的成员member的score值加上增量increment
6.5 zrange key start stop , 返回有序集key中,指定下标区间内的成员
① zrevrange key start stop [withscores] , 返回指定区间内的成员递减顺序
② zrevrangebyrank key max min [withscores] [limit offset count]
6.6 zrangebyscore key min max [withscopes] [limit offset count] , 返回score值介于min和max之间的集合
6.7 zrank key member , 返回有序集key中成员member的排名
① zrevrank key member , 返回有序集key中成员member的递减排名
6.8 zrem key member [member …] , 移除有序集key中的多个成员
① zremrangebyrank key start stop , 移除有序集key中,指定排名区间内的所有成员
② zremrangebyscore key min max , 移除有序集key中,指定score范围内的成员
6.9 zscore key member , 返回成员member的score值

pub/sub(发布、订阅)

7.1 psubscribe pattern [pattern …] , 订阅一个或者多个符合给定模式的频道
7.2 publish channel message , 将信息message发送到指定的频道channel
7.3 pubsub [argument …] , 查看订阅与发布系统状态的内省命令
eg pubsub channels [pattern] , 列出当前的活跃频道,订阅模式的客户端不计算在内
eg pubsub numsub [channel-1 …] , 返回给定频道的订阅者数量,订阅模式的客户端不计算在内
7.4 punsubscribe [pattern …] , 指示客户端退订所有给定模式
7.5 subscribe channel [channel …] , 订阅给定的一个或者多个频道信息
7.6 unsubscribe [channel …] , 指示客户端退订给定的频道

Transaction(事务)

8.1 discard , 取消执行事务块内的所有命令
8.2 exec , 执行事务块内的命令
8.3 multi , 标记一个事务块的开始
8.4 unwatch , 取消watch命令对所有key的监视
8.5 watch key [key …] , 监视一个或者多个key,如果事务执行之前,这个kye被其它命令所动,则事务被打断

Connection(连接)

9.1 auth password , 登录redis时输入密码
9.2 echo message , 打印一个特定的信息message,测试时使用
9.3 ping , 测试与服务器的连接,如果正常则返回pong
9.4 quit , 请求服务器关闭与当前客户端的连接
9.5 select index , 切换到指定的数据库

Server(服务器)

10.1 bgsave , 后台异步保存数据到硬盘
10.2 client setname/client getname , 为连接设置、获取名字
10.3 client kill ip:port , 关闭地址为 ip:port的客户端
10.4 client list , 以人类可读的方式,返回所有的连接客户端信息和统计数据
10.5 config get parameter , 取得运行redis服务器的配置参数
10.6 config set parameter value , 设置redis服务器的配置参数
10.7 config resetstat , 重置info命令的某些统计数据
10.8 dbsize , 返回当前数据库中key的数量
10.9 flushall , 清空整个redis服务器的数据(删除所有数据库的所有 key)
10.10 flushdb , 清空当前数据库中的所有key
10.11 info [section] , 返回redis服务器的各种信息和统计数据
10.12 lastsave , 返回最近一次redis成功将数据保存到磁盘时的时间
10.13 monitor , 实时打印出redis服务器接收到的指令
10.14 save , 将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘
10.15 slaveof host port , 将当前服务器转变为指定服务器的从属服务器
10.16 slowlog subcommand [argument] , Redis 用来记录查询执行时间的日志系统

HyperLogLog

11.1 命令:PFADD key element [element …]
时间复杂度:O(1)
命令描述:将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中。这个命令的一个副作用是它可能会更改这个HyperLogLog的内部来反映在每添加一个唯一的对象时估计的基数(集合的基数)。如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD返回1,否则返回0,如果指定的key不存在,这个命令会自动创建一个空的HyperLogLog结构(指定长度和编码的字符串)。如果在调用该命令时仅提供变量名而不指定元素也是可以的,如果这个变量名存在,则不会有任何操作,如果不存在,则会创建一个数据结构。
返回值:如果 HyperLogLog 的内部被修改了,那么返回 1,否则返回 0 。
11.2命令:PFCOUNT key [key …]
命令描述:当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0。当参数为多个key时,返回这些HyperLogLog并集的近似基数,这个值是将所给定的所有key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的。HyperLogLog可以使用固定且很少的内存(每个HyperLogLog结构需要12K字节再加上key本身的几个字节)来存储集合的唯一元素。返回的可见集合基数并不是精确值, 而是一个带有 0.81% 标准错误(standard error)的近似值。
返回值:PFADD添加的唯一元素的近似数量。
11.3命令:PFMERGE destkey sourcekey [sourcekey …]
命令描述:将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的。
返回值:这个命令只会返回 OK。

Geo地理位置

12.1命令:GEOADD key longitude latitude member [longitude latitude member …]
命令描述:将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
返回值:添加到sorted set元素的数目,但不包括已更新score的元素。
12.2命令:GEODIST key member1 member2 [unit]
命令描述:返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。指定单位的参数 unit 必须是以下单位的其中一个:m 表示单位为米。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。
12.3命令:GEOPOS key member [member …]
命令描述:从key里返回所有给定位置元素的位置(经度和纬度)。
返回值:GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。当给定的位置元素不存在时, 对应的数组项为空值。
12.4命令:GEOHASH key member [member …]
命令描述:返回一个或多个位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。此命令返回一个标准的Geohash
返回值:一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。
12.5命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
命令描述:以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。范围可以使用以下其中一个单位:m 表示单位为米。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。
在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。
返回值:
在没有给定任何 WITH 选项的情况下, 命令只会返回一个像 [“New York”,”Milan”,”Paris”] 这样的线性(linear)列表。
在指定了 WITHCOORD 、 WITHDIST 、 WITHHASH 等选项的情况下, 命令返回一个二层嵌套数组, 内层的每个子数组就表示一个元素。
在返回嵌套数组时, 子数组的第一个元素总是位置元素的名字。 至于额外的信息, 则会作为子数组的后续元素, 按照以下顺序被返回:
以浮点数格式返回的中心与位置元素之间的距离, 单位与用户指定范围时的单位一致。
geohash 整数。
由两个元素组成的坐标,分别为经度和纬度。
12.6命令:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
命令描述:这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的。

CATALOG
  1. 1. 针对key的操作
  2. 2. String操作
  3. 3. Hash操作
  4. 4. List操作(List相当于堆栈)
  5. 5. Set操作(不可重复)
  6. 6. ZADD操作(有序集合)
  7. 7. pub/sub(发布、订阅)
  8. 8. Transaction(事务)
  9. 9. Connection(连接)
  10. 10. Server(服务器)
  11. 11. HyperLogLog
  12. 12. Geo地理位置