Redis
本文最后更新于:2025年4月29日 下午
安装
windows:
Releases · tporadowski/redis (github.com)
通用命令:
查看所有键
keys
命令可用于查看所有键,语法如下keys pattern
说明:pattern 用于匹配 key,其中
*
表示任意个任意字符,?
表示一个任意字符。示例:
127.0.0.1:6379> KEYS * 1) "k3" 2) "k2" 3) "k1"
注意:该命令会遍历 Redis 服务器中保存的所有键,因此当键很多时会影响整个 Redis 服务的性能,线上环境需要谨慎使用。
键总数
dbsize
可用于查看键的总数,语法如下dbsize
判断键是否存在
exists
命令可用于判断一个键是否存在,语法如下exists key
说明:若键存在则返回 1,不存在则返回 0。
删除键
del
可用于删除指定键,语法如下del key [key ...]
说明:返回值为删除键的个数,若删除一个不存在的键,则返回 0。
查询键的剩余过期时间
ttl key
说明:
ttl
的含义为time to live,用于查询一个定时键的剩余存活时间,返回值以秒为单位。若查询的键的未设置过期时间,则返回-1
,若查询的键不存在,则返回-2
。数据库管理命令
Redis 默认有编号为 0~15 的 16 个逻辑数据库,每个数据库之间的数据是相互独立的,所有连接默认使用的都是 0 号数据库。
切换数据库
select
命令可用于切换数据库,语法如下select index
说明:若 index 超出范围,会报错
清空数据库
flushdb
命令会清空当前所选用的数据库,flushall
命令会清空 0~15 号所有的数据库。注意:生产环境慎用
常用数据类型
string 类型
概述:Redis 中的 string 类型保存的是字节序列(Sequence of bytes),因此任意类型的数据,只要经过序列化之后都可以保存到 Redis 的 string 类型中,包括文本、数字甚至是一个对象。
set
set
命令用于添加 string 类型的键值对,具体语法如下:
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
各选项含义:
EX seconds:设置过期时间,单位为秒
PX milliseconds:设置过期时间,单位为毫秒
NX:仅在 key 不存在时 set
XX:仅在 key 存在时 set
例如:set k2 v2 ex 20
:设置 key 为 k2,value 为 v2,20s 后过期
get
get
命令用于获取某个 string 类型的键对应的值,具体如下:
get key
incr
incr
命令用于对数值做自增操作,具体语法如下
incr key
若 key 对应的 value 是整数,则返回自增后的结果,若不是整数则报错,若 key 不存在则创建并返回 1
decr
decr
命令用于对数值做自减操作,具体语法如下
decr key
应用场景
string 类型常用于缓存、计数器等场景。
list 类型
概述:
list 类型可用于存储多个 string 类型的元素,并且所有元素按照被添加的顺序存储。
常用命令
list 类型相关的命令较多,下面分类进行进行介绍。
添加元素
向列表中添加元素的命令有lpush
、rpush
、linsert
,各命令的功能与用法如下
lpush
:该命令用于向 list 左侧添加元素,语法如下
lpush key value [value ...]
示例:
lpush l1 a b c
rpush
:该命令用于向 list 右侧添加元素,语法如下
rpush key value [value ...]
linsert
:该命令用于向 list 指定位置添加元素,语法如下
linsert key BEFORE|AFTER pivot value
示例:在 li 的 list 列表中,在 b 后新增一个 value 为 new
linsert l1 after b new
查询元素
查询 list 元素的命令有lindex
和lrange
,各命令的功能与用法如下
lindex
:该命令用于获取指定索引位置的元素,语法如下
lindex key index
说明:index 从左到右依次是 0,1,2…,从右到左依次是-1,-2,-3…
lrange
:该命令用于获取指定范围内的元素列表,语法如下
lrange key start stop
示例:获取 list 全部元素,命令如下
lrange l1 0 -1
删除元素
删除 list 元素的命令有lpop
、rpop
、lrem
,各命令的功能与用法如下
lpop
:该命令用于移除并返回 list 左侧元素,语法如下
lpop key [count]
说明:count 参数表示移除元素的个数
rpop
:该命令用于移除并返回 list 右侧的元素,语法如下
rpop key [count]
lrem
:该命令用于移除 list 中的指定元素,语法如下
lrem key count value
说明:count 参数表示要移除 element 元素的个数(list 中可以存在多个相同的元素),count 的用法如下
- 若 count>0,则从左到右删除最多 count 个 element 元素
- 若 count<0,则从右到左删除最多 count(的绝对值)个 element 元素
- 若 count=0,则删除所有的 element 元素
修改元素
lset
:命令可用于修改指定索引位置的元素,语法如下
lset key index value
其他
llen
命令可用于查看 list 长度,语法如下
llen key
应用场景
- 社交应用中,可使用 list 缓存每个用户发布的最新的 N 条记录。
- list 可用作异步消息队列。
set 类型
概述:和 list 类型相似,set 类型也可用来存储多个 string 类型的元素,但与 list 类型不同,set 中的元素是无序的,且 set 中不会包含相同元素。
集合内
sadd
:该命令用于向 set 中添加元素,语法如下
sadd key member [member ...]
smembers
:该命令用于查询 set 中的全部元素,语法如下
smembers key
srem
:该命令用于移除 set 中的指定元素,语法如下
srem key member [member ...]
spop
:该命令随机移除并返回 set 中的 n 个元素,语法如下
spop key [count]
srandmember:
该命令随机返回 set 中的 n 个元素(不删除),语法如下
srandmember key [count]
scard
:该命令用于查询 set 中的元素个数,语法如下
scard key
sismember
:该命令用于元素是否在 set 中,语法如下
sismember key member
集合间
sinter
:该命令用于计算多个集合的交集,语法如下
sinter key [key ...]
sunion
:该命令用于计算多个集合的并集,语法如下
sunion key [key ...]
sdiff
:该命令用于计算多个集合的差集,语法如下
sdiff key [key ...]
应用场景
set 可用于计算共同关注好友,随机抽奖系统等等。
Hash 类型
概述:hash 类型类似于 Java 语言中的HashMap
,可用于存储键值对。

hset
:该命令用于向 hash 中增加键值对,语法如下
hset key field value [field value ...]
hget
:该命令用于获取 hash 中某个键对应的值,语法如下
hget key field
hdel
:该命令用于删除 hash 中的指定的键值对,语法如下
hdel key field [field ...]
hlen
:该命令用于查询 hash 中的键值对个数,语法如下
hlen key
hexists
:该命令用于判断 hash 中的某个键是否存在,语法如下
hexists key field
hkeys
:该命令用于返回 hash 中所有的键,语法如下
hkeys key
hvals
:该命令用于返回 hash 中所有的值,语法如下
hvals key
hgetall
:该命令用于返回 hash 中所有的键与值,语法如下
hgetall key
应用场景
hash 类型可用于缓存对象等。
zet 类型
概述:zset(sorted set)被称为有序集合,同 set 相似,zset 中也不会包含相同元素,但不同的是,zset 中的元素是有序的。并且 zset 中的元素并非像 list 一样按照元素的插入顺序排序,而是按照每个元素的分数(score)排序。

zadd
:该命令用于向 zset 中添加元素,语法如下
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
**说明***:
- NX:仅当 member 不存在时才 add
- XX:仅当 member 存在时才 add
- CH:返回此次操作后有序集合元素发生变化的数量
- INCR:如果 member 存在,其分数会在原分数的基础上增加指定的增量值;如果成员不存在,则会添加该成员,并将其分数设置为增量值。
zcard
:该命令用于计算 zset 中的元素个数,语法如下
zcard key
zscore
:用于查看某个元素的分数,语法如下
zscore key member
zrank/zrevrank
:这组命令用于计算元素的排名,其中 zrank 按照 score 的升序排序,zrevrank 则按照降序排序,语法如下
zrank/zrevrank key member
说明:名次从 0 开始。
zrem
:该命令用于删除元素,语法如下
zrem key member [member ...]
zincrby
:该命令用于增加元素的分数,语法如下
zincrby key increment member
zrange
:该命令用于查询指定区间范围的元素,语法如下
zrange key start stop [byscore] [rev] [limit offset count] [withscores]
说明:
- start/stop:用于指定查询区间,但是在不同模式下,其代表的含义也不相同
- 默认模式下,
start~stop
表示的是名次区间,且该区间为闭区间。名次从 0 开始,且可为负数,-1 表示倒数第一,-2 表示倒数第二,以此类推。 - byscore 模式下(声明了 byscore 参数),则
start~stop
表示的就是分数区间,该区间默认仍为闭区间。在该模式下,可以在start
或stop
前增加(
来表示开区间,例如(1 (5
,表示的就是(1,5)
这个开区间。除此之外,还可以使用-inf
和+inf
表示负无穷和正无穷。
- 默认模式下,
- byscore:用于切换到分数模式
- rev:表示降序排序。在 byscore 模式下使用 rev 参数需要注意查询区间,start 应大于 stop。
- limit:该选项只用于 byscore 模式,作用和 sql 语句中的 limit 一致
- withscores:用于打印分数
应用场景
zset 主要用于各种排行榜。
Redis
Redis.conf 详解
Redis 持久化
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以 Redis 提供了持久化功能!
RDB(Redis DataBase)
什么是 RDB
AOF(Append Only File)
将我们的所有命令都记录下来,history,恢复的时候就把这个文件全部执行一遍!
AOF
Redis 发布订阅
Redis 发布订阅(pub/sub)是一种==消息通信模式==:发送者(pub),订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
Redis 主从复制
Redis 缓存穿透和雪崩
Redis 数据备份与恢复
备份数据
redis Save 命令基本语法如下:
127.0.0.1:6379> SAVE
OK
该命令将在 redis 安装目录中创建 dump.rdb 文件。
恢复数据
登录目标 redis 服务器,我们先停止 redis 服务:
service redis stop #停止redis服务
然后进入 redis 的文件存放目录 redis,把刚刚备份的 dump.rdb 文件替换该目录下的 dump.rdb 文件(建议先备份当前目录下的 dump.rdb 文件),重启 redis 服务
service redis start #启动redis服务
到此,redis 数据迁移完成
获取
获取 redis 目录可以使用 CONFIG 命令,如下所示:
redis 127.0.0.1:6379> CONFIG GET dir