筑基期

1. 什么是 Redis?它的主要特点是什么?

Redis(Remote Dictionary Server)是一个开源的、基于内存存储的 NoSQL 数据库,支持丰富的数据结构,通常用于缓存和消息队列等场景。

Redis 的主要特点

  • 高性能Redis 是基于内存的数据库,数据存储和访问速度非常快,适合高并发场景。

  • 丰富的数据类型:支持五种基础数据类型(字符串、列表、集合、有序集合、哈希)和一些高级数据结构(如 HyperLogLog、位图等)。

  • 持久化Redis 支持将数据持久化到磁盘,可以恢复数据,即使在重启时也不会丢失。

  • 发布/订阅模型:支持消息的发布和订阅,适合实时消息系统。

  • 分布式支持:可以通过 Redis Cluster 进行水平扩展,支持高可用和分布式环境。


2. Redis 支持哪些数据类型?这些数据类型的应用场景是什么?

字符串(String)

  • 应用场景:缓存简单的键值对、计数器、存储 JSON 或序列化后的数据。

  • 示例命令SET key valueGET key

列表(List)

  • 应用场景:实现队列或栈,消息队列、任务队列等。

  • 示例命令LPUSH key valueRPOP key

集合(Set)

  • 应用场景:存储无序且唯一的元素,如标签集合、去重等。

  • 示例命令SADD key valueSMEMBERS key

有序集合(Sorted Set,ZSet)

  • 应用场景:实现排行榜、按权重排序的场景,如游戏得分排行榜。

  • 示例命令ZADD key score valueZRANGE key 0 -1 WITHSCORES

哈希(Hash)

  • 应用场景:存储对象或用户信息等复杂结构,每个键对应多个字段。

  • 示例命令HSET key field valueHGET key field


3. 如何在 Redis 中设置和获取键值对?常用的 Redis 命令有哪些?

设置键值对

SET key value

示例

SET username "Alice"

这条命令将键 username 的值设置为 "Alice"

获取键的值

GET key

示例

GET username

这条命令将返回键 username 对应的值,即 "Alice"

其他常用命令

  • DEL key:删除键。

  • EXISTS key:检查键是否存在。

  • INCR key:对数值键进行自增操作。

  • EXPIRE key seconds:设置键的过期时间。


4. Redis 是如何持久化数据的?有哪些持久化方式?

Redis 提供了两种主要的持久化方式,确保数据在断电或重启时不会丢失。

RDB(Redis Database Backup)

  • Redis 会定期生成整个内存快照,并将其保存到磁盘上。

  • 优点:占用资源少,适合备份和快速恢复大规模数据。

  • 缺点:可能在 Redis 崩溃前的一段时间内丢失数据。

    触发 RDB 快照的命令

    SAVE
    BGSAVE
    

AOF(Append Only File)

  • Redis 会将每条写入命令记录到日志文件中,Redis 重启时会根据 AOF 日志重放命令恢复数据。

  • 优点:数据丢失最小,可以设置每次写入操作后立刻记录日志。

  • 缺点:日志文件较大,写入频繁时性能较低。

    AOF 配置

    appendonly yes
    

如果希望减少数据丢失,建议使用 AOF

如果需要更好的性能并且可以接受少量数据丢失,使用 RDB


5. Redis 的内存管理机制是什么?如何处理内存不足的情况?

Redis 是基于内存的数据库,所有数据存储在内存中。当内存不足时,Redis 会根据配置采取相应措施。

内存管理机制

  • maxmemoryRedis 可以通过配置 maxmemory 参数来限制可使用的最大内存大小。

  • 内存淘汰策略:当达到内存上限时,Redis 提供了多种淘汰策略,可以根据需要进行配置。

常见的内存淘汰策略有:

  • noeviction:不再接受写入请求,直接返回错误。

  • allkeys-lru:在所有键中,移除最近最少使用的键(LRU 算法)。

  • volatile-lru:只从设置了过期时间的键中,移除最近最少使用的键。

  • allkeys-random:随机移除任意键。

配置内存淘汰策略

maxmemory 2gb
maxmemory-policy allkeys-lru

6. 如何在 Redis 中设置键的过期时间?

Redis 支持为键设置过期时间,过期后键会自动被删除。

设置过期时间可以通过 EXPIRESETEX 命令。

设置过期时间

EXPIRE key seconds

示例

EXPIRE session_token 3600

该命令为 session_token 键设置了 3600 秒(1 小时)的过期时间,1 小时后该键将被自动删除。

使用 SETEX 设置键值和过期时间

SETEX key seconds value

示例

SETEX session_token 3600 "abc123"

这个命令同时设置了键值对 session_token 和过期时间。

查看剩余过期时间

TTL key

返回剩余的生存时间(秒),若返回 -1,则表示该键没有设置过期时间。


7. Redis 中的发布/订阅(Pub/Sub)模式是什么?它的应用场景有哪些?

发布/订阅(Pub/Sub)Redis 支持的一种消息传递模式,允许消息的发布者和订阅者在不同的通道中进行通信。

发布者发送消息到一个通道,订阅者可以实时接收到该通道的消息。

示例

  • 订阅频道

      SUBSCRIBE my_channel
    
  • 发布消息

      PUBLISH my_channel "Hello, Redis!"
    

应用场景

  • 实时消息系统:如聊天应用、即时通知等场景中,多个客户端需要实时接收消息。

  • 系统事件广播:系统内部模块之间通过 Redis 进行事件广播,如任务完成通知、状态变更等。

results matching ""

    No results matching ""