快速索引(按功能)

所有命令均可在 redis-cli 中执行。
示例中 > 表示命令提示符, 表示返回结果。

需求命令
存一个值SET, GET
存对象HSET, HGETALL
队列LPUSH + RPOPRPUSH + LPOP
唯一集合SADD, SISMEMBER
排行榜ZADD, ZREVRANGE
计数器INCR, DECR
分布式锁SET NX EX
缓存过期EXPIRE, TTL
批量操作MSET, MGET
原子操作INCR, SETNX, Lua 脚本
清空当前库FLUSHDB(慎用!)
查看所有键KEYS *(生产用 SCAN

一、键(Key)通用命令

适用于任何数据类型的键。

命令功能示例
DEL key [key ...]删除一个或多个键> DEL user:1001 book:2001(integer) 2
EXISTS key检查键是否存在> EXISTS user:1001(integer) 1
EXPIRE key seconds设置过期时间(秒)> EXPIRE session:abc 3600(integer) 1
TTL key查看剩余生存时间(秒,-1永久,-2不存在)> TTL session:abc(integer) 3598
PERSIST key移除过期时间,变为永久> PERSIST session:abc(integer) 1
TYPE key返回键的数据类型> TYPE user:1001string / hash / list / set / zset
KEYS pattern查找匹配模式的键(生产慎用)> KEYS book:*1) "book:1001" 2) "book:1002"
SCAN cursor [MATCH pattern] [COUNT count]迭代键(替代 KEYS,安全)> SCAN 0 MATCH book:* COUNT 10
RENAME key newkey重命名键> RENAME user:1001 user:1001_newOK
RENAMENX key newkey仅当 newkey 不存在时重命名> RENAMENX user:1001 user:1002(integer) 1

二、字符串(String)命令

命令功能示例
SET key value [EX seconds] [PX ms] [NX] [XX]设置字符串值> SET name "张三"OK
> SET token "abc123" EX 60OK(60秒过期)
> SET lock "1" NXOK(仅当不存在时成功)
GET key获取值> GET name"张三"
MSET key value [key value ...]批量设置> MSET a 1 b 2 c 3OK
MGET key [key ...]批量获取> MGET a b1) "1" 2) "2"
INCR key整数自增1(原子)> INCR views(integer) 1
INCRBY key increment整数增加指定值> INCRBY views 5(integer) 6
DECR key整数自减1> DECR stock(integer) 9
DECRBY key decrement整数减少指定值> DECRBY stock 3(integer) 6
INCRBYFLOAT key increment浮点数增加> INCRBYFLOAT price 0.5"10.5"
APPEND key value追加字符串> APPEND name " 李四"(integer) 9(新长度)
STRLEN key获取字符串长度> STRLEN name(integer) 9
SETEX key seconds value设置值并指定过期时间(秒)> SETEX captcha 60 "1234"OK
SETNX key value仅当键不存在时设置(分布式锁常用)> SETNX lock "1"(integer) 1(成功)

三、哈希(Hash)命令

命令功能示例
HSET key field value [field value ...]设置哈希字段> HSET user:1001 name "张三" age 25(integer) 2
HGET key field获取指定字段> HGET user:1001 name"张三"
HGETALL key获取所有字段和值> HGETALL user:10011) "name" 2) "张三" 3) "age" 4) "25"
HMGET key field [field ...]批量获取字段> HMGET user:1001 name age1) "张三" 2) "25"
HMSET key field value [field value ...]批量设置字段(已废弃,用 HSET 代替)-
HDEL key field [field ...]删除一个或多个字段> HDEL user:1001 age(integer) 1
HEXISTS key field检查字段是否存在> HEXISTS user:1001 name(integer) 1
HINCRBY key field increment整数自增> HINCRBY user:1001 age 1(integer) 26
HINCRBYFLOAT key field increment浮点数自增> HINCRBYFLOAT product:2001 price 0.8"20.8"
HKEYS key获取所有字段名> HKEYS user:10011) "name"
HVALS key获取所有字段值> HVALS user:10011) "张三"
HLEN key获取字段数量> HLEN user:1001(integer) 1
HSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希字段> HSCAN user:1001 0

四、列表(List)命令

命令功能示例
LPUSH key value [value ...]从左侧插入一个或多个元素> LPUSH queue "task1" "task2"(integer) 2
RPUSH key value [value ...]从右侧插入> RPUSH queue "task3"(integer) 3
LPOP key [count]从左侧弹出一个或多个元素> LPOP queue"task2"
RPOP key [count]从右侧弹出> RPOP queue"task3"
LRANGE key start stop获取指定范围元素(索引从0开始,-1表示最后)> LRANGE queue 0 -11) "task1"
LLEN key获取列表长度> LLEN queue(integer) 1
LINDEX key index获取指定索引的元素> LINDEX queue 0"task1"
LSET key index value设置指定索引的元素值> LSET queue 0 "newtask"OK
`LINSERT key BEFOREAFTER pivot value`在指定元素前后插入
LREM key count value删除 count 个等于 value 的元素(count>0从左,<0从右,=0全部)> LREM queue 1 "task1"(integer) 1
LTRIM key start stop保留区间内元素,其余删除> LTRIM queue 0 0OK(只保留第一个)
RPOPLPUSH source destination从源列表右侧弹出,推入目标列表左侧(原子)> RPOPLPUSH queue backup"task1.5"

五、集合(Set)命令

命令功能示例
SADD key member [member ...]添加一个或多个成员(自动去重)> SADD tags "redis" "database" "cache"(integer) 3
SMEMBERS key获取所有成员> SMEMBERS tags1) "cache" 2) "database" 3) "redis"
SISMEMBER key member判断成员是否存在> SISMEMBER tags "redis"(integer) 1
SCARD key获取成员数量> SCARD tags(integer) 3
SREM key member [member ...]删除成员> SREM tags "cache"(integer) 1
SPOP key [count]随机弹出 count 个成员> SPOP tags 11) "database"
SRANDMEMBER key [count]随机返回 count 个成员(不删除)> SRANDMEMBER tags 21) "redis" 2) "cache"
SINTER key [key ...]求交集> SINTER setA setB
SUNION key [key ...]求并集> SUNION setA setB
SDIFF key [key ...]求差集(第一个集合有,后面没有的)> SDIFF setA setB
SINTERSTORE destination key [key ...]将交集结果存入 destination> SINTERSTORE common setA setB
SUNIONSTORE destination key [key ...]将并集结果存入 destination
SDIFFSTORE destination key [key ...]将差集结果存入 destination
SMOVE source destination member将成员从一个集合移动到另一个> SMOVE tags old_tags "redis"(integer) 1

六、有序集合(Sorted Set)命令

命令功能示例
ZADD key score member [score member ...] [NX|XX] [CH] [INCR]添加或更新成员及分数> ZADD rank 100 "张三" 95 "李四"(integer) 2
ZRANGE key start stop [WITHSCORES]按分数升序获取索引范围内的成员> ZRANGE rank 0 -1 WITHSCORES1) "李四" 2) "95" 3) "张三" 4) "100"
ZREVRANGE key start stop [WITHSCORES]按分数降序获取(排行榜常用)> ZREVRANGE rank 0 2 WITHSCORES → 前三名
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]按分数范围升序获取> ZRANGEBYSCORE rank 90 100 WITHSCORES
ZREVRANGEBYSCORE key max min [WITHSCORES]按分数范围降序获取
ZREM key member [member ...]删除成员> ZREM rank "李四"(integer) 1
ZINCRBY key increment member增加成员分数> ZINCRBY rank 5 "张三""105"
ZSCORE key member获取成员分数> ZSCORE rank "张三""105"
ZCARD key获取成员数量> ZCARD rank(integer) 1
ZCOUNT key min max统计分数在 min-max 之间的成员数> ZCOUNT rank 90 100(integer) 1
ZRANK key member获取成员排名(升序,从0开始)> ZRANK rank "张三"(integer) 0
ZREVRANK key member获取成员排名(降序)> ZREVRANK rank "张三"(integer) 0
ZPOPMIN key [count]弹出分数最低的 count 个成员> ZPOPMIN rank1) "张三" 2) "105"
ZPOPMAX key [count]弹出分数最高的 count 个成员
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]计算多个有序集合的并集并存储> ZUNIONSTORE total 2 rank1 rank2 WEIGHTS 1 2
ZINTERSTORE destination numkeys key [key ...]计算交集并存储

七、位图(Bitmap)命令

位图本质是字符串,但可操作二进制位。

命令功能示例
SETBIT key offset value设置指定偏移量上的位(0或1)> SETBIT login:2025-01-01 100 1(integer) 0
GETBIT key offset获取指定偏移量上的位> GETBIT login:2025-01-01 100(integer) 1
BITCOUNT key [start end]统计值为1的位数> BITCOUNT login:2025-01-01(integer) 1
BITOP operation destkey key [key ...]按位运算(AND, OR, XOR, NOT)> BITOP AND unique user1 user2

八、HyperLogLog 命令

用于近似基数统计,固定内存 12KB。

命令功能示例
PFADD key element [element ...]添加元素> PFADD uv:2025-01-01 "user1" "user2"(integer) 1
PFCOUNT key [key ...]获取近似基数> PFCOUNT uv:2025-01-01(integer) 2
PFMERGE destkey sourcekey [sourcekey ...]合并多个 HyperLogLog> PFMERGE total uv:day1 uv:day2

九、地理空间(GEO)命令

基于有序集合实现,存储地理位置。

命令功能示例
GEOADD key longitude latitude member [longitude latitude member ...]添加地理位置> GEOADD cities 116.40 39.90 "北京" 121.48 31.22 "上海"(integer) 2
GEOPOS key member [member ...]获取地理位置> GEOPOS cities "北京"1) "116.399998962..."
GEODIST key member1 member2 [unit]计算两个位置距离(单位 m/km/mi/ft)> GEODIST cities "北京" "上海" km"1067.8"
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count]根据圆心查找附近成员> GEORADIUS cities 116.40 39.90 100 km WITHDIST
GEORADIUSBYMEMBER key member radius unit根据已有成员查找附近> GEORADIUSBYMEMBER cities "北京" 200 km

十、事务命令

Redis 事务是将多个命令打包,顺序执行,但不支持回滚。

命令功能示例
MULTI开启事务> MULTIOK
命令1在事务中排队命令> SET a 1QUEUED
> INCR aQUEUED
EXEC执行事务> EXEC1) OK 2) (integer) 2
DISCARD取消事务> DISCARDOK
WATCH key [key ...]监视键,若在 EXEC 前被修改则事务失败> WATCH aOK
UNWATCH取消监视

十一、脚本命令(Lua)

命令功能示例
EVAL script numkeys key [key ...] arg [arg ...]执行 Lua 脚本> EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 a 100OK
EVALSHA sha1 numkeys key [key ...] arg [arg ...]执行已缓存的脚本(通过 SCRIPT LOAD)
SCRIPT LOAD script加载脚本到缓存,返回 SHA1> SCRIPT LOAD "return redis.call('GET', KEYS[1])""sha1..."
SCRIPT FLUSH清空脚本缓存> SCRIPT FLUSHOK
SCRIPT KILL杀死正在运行的脚本(如果没有写操作)

十二、发布/订阅(Pub/Sub)命令

命令功能示例
PUBLISH channel message向频道发送消息> PUBLISH news "hello"(integer) 1(接收者数量)
SUBSCRIBE channel [channel ...]订阅频道> SUBSCRIBE news → 进入监听模式
PSUBSCRIBE pattern [pattern ...]按模式订阅(支持 * 通配符)> PSUBSCRIBE news.*
UNSUBSCRIBE [channel ...]退订
PUNSUBSCRIBE [pattern ...]按模式退订

十三、服务器管理命令

命令功能示例
PING测试连接> PINGPONG
SELECT index切换数据库(0-15)> SELECT 1OK
FLUSHDB清空当前数据库> FLUSHDBOK
FLUSHALL清空所有数据库> FLUSHALLOK
DBSIZE返回当前数据库键数量> DBSIZE(integer) 42
INFO [section]查看服务器信息(内存、CPU、客户端等)> INFO memory
CONFIG GET parameter获取配置参数> CONFIG GET maxmemory1) "maxmemory" 2) "0"
CONFIG SET parameter value动态修改配置(不持久化)> CONFIG SET maxmemory 256mbOK
CLIENT LIST查看所有客户端连接
CLIENT KILL addr:port断开客户端
MONITOR实时打印服务器接收到的命令(调试用)
SLOWLOG GET [count]获取慢查询日志> SLOWLOG GET 10