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 # 自增102. 哈希(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 表示键不存在。
📝 详细原理解析:
定时删除:
- 为每个过期键创建一个定时器,到期立即删除。
- 缺点:如果过期键很多,会占用大量 CPU 资源。
惰性删除:
- 只有当访问这个键时,才检查是否过期,过期就删除。
- 缺点:如果过期键永远不被访问,会一直占用内存(内存泄漏)。
定期删除(Redis 实际采用):
- Redis 每隔一段时间(默认 100ms),随机抽取一些设置了过期时间的键,检查并删除已过期的键。
- 优点:平衡了 CPU 和内存,既不会占用太多 CPU,也不会让过期键堆积。
🌟 TTL 返回值详解:
redis
TTL key
# 返回正数:剩余过期时间(秒)
# 返回 -1:键存在但永不过期
# 返回 -2:键不存在🔥 内存淘汰策略(加分项): "如果 Redis 内存满了,且所有键都没有设置过期时间,Redis 会根据配置的淘汰策略(如 allkeys-lru、volatile-lru)自动删除一些键,为新数据腾出空间。"