Skip to content

2. 数据结构:常用命令与过期策略 ​


❓ 面试官:Redis 有哪些常用的基础命令?SET、GET、DEL、EXISTS 这些命令的作用是什么? ​

频率:🔥🔥🔥🔥

💡 一句话总结(先抛结论): Redis 的命令分为字符串操作、哈希操作、列表操作、集合操作、有序集合操作等几大类。基础命令是操作 Redis 的入门必备。

📝 常用命令速查:

1. 字符串(String)命令:

redis
SET key value          # 设置键值对
GET key                # 获取值
DEL key                # 删除键
EXISTS key             # 判断键是否存在
EXPIRE key 60          # 设置过期时间(60秒)
TTL key                # 查看剩余过期时间
INCR key               # 自增1(常用于计数器)
DECR key               # 自减1
INCRBY key 10          # 自增10

2. 哈希(Hash)命令:

redis
HSET user:1 name "张三" age 25    # 设置哈希字段
HGET user:1 name                  # 获取字段值
HGETALL user:1                    # 获取所有字段和值
HDEL user:1 age                   # 删除字段

3. 列表(List)命令:

redis
LPUSH list "a" "b" "c"    # 从左边插入(栈)
RPUSH list "d"             # 从右边插入(队列)
LPOP list                  # 从左边弹出
RPOP list                  # 从右边弹出
LRANGE list 0 -1           # 获取所有元素

4. 集合(Set)命令:

redis
SADD tags "Java" "Redis"    # 添加元素
SMEMBERS tags               # 获取所有元素
SISMEMBER tags "Java"       # 判断元素是否存在
SREM tags "Java"           # 删除元素

🌟 实战应用场景: "在项目中,我们常用 INCR 做接口访问计数、用 EXPIRE 做临时 Token 过期、用 HSET 存储用户信息(比多个 SET 更节省内存)。"


❓ 面试官:Redis 的过期策略有哪些?TTL 命令返回 -1 和 -2 分别代表什么意思? ​

频率:🔥🔥🔥🔥

💡 一句话总结(先抛结论): Redis 的过期策略有定时删除、惰性删除、定期删除三种。TTL 返回 -1 表示键永不过期,返回 -2 表示键不存在。

📝 详细原理解析:

  1. 定时删除:

    • 为每个过期键创建一个定时器,到期立即删除。
    • 缺点:如果过期键很多,会占用大量 CPU 资源。
  2. 惰性删除:

    • 只有当访问这个键时,才检查是否过期,过期就删除。
    • 缺点:如果过期键永远不被访问,会一直占用内存(内存泄漏)。
  3. 定期删除(Redis 实际采用):

    • Redis 每隔一段时间(默认 100ms),随机抽取一些设置了过期时间的键,检查并删除已过期的键。
    • 优点:平衡了 CPU 和内存,既不会占用太多 CPU,也不会让过期键堆积。

🌟 TTL 返回值详解:

redis
TTL key
# 返回正数:剩余过期时间(秒)
# 返回 -1:键存在但永不过期
# 返回 -2:键不存在

🔥 内存淘汰策略(加分项): "如果 Redis 内存满了,且所有键都没有设置过期时间,Redis 会根据配置的淘汰策略(如 allkeys-lru、volatile-lru)自动删除一些键,为新数据腾出空间。"