持续总结中!2024年面试必问 20 道 Redis面试题(二)

100 篇文章 0 订阅
10 篇文章 0 订阅

上一篇地址:持续总结中!2024年面试必问 20 道 Redis面试题(一)-CSDN博客

三、Redis支持哪些数据类型?

Redis是一个多才多艺的内存数据存储系统,它支持多种数据类型,使得它能够适应各种不同的用例场景。以下是Redis支持的主要数据类型及其特点:

  1. 字符串(Strings)

    • 基本的数据存储单元,一个键对应一个值。
    • 可以存储字符串、整数或浮点数。
    • 字符串的最大容量为512MB。
  2. 列表(Lists)

    • 一个列表可以存储多个字符串元素,元素是有序的。
    • 支持在列表头部或尾部添加(push)或移除(pop)元素。
    • 常用于实现消息队列或简单的堆栈/队列结构。
  3. 集合(Sets)

    • 一个集合可以存储多个不重复的字符串元素,元素是无序的。
    • 支持添加、删除和测试操作。
    • 可以进行集合间的交集、并集和差集操作。
  4. 有序集合(Sorted Sets)

    • 类似于集合,但每个元素都关联了一个分数(或权重)。
    • 元素会根据分数进行排序。
    • 支持范围查询和获取排名信息。
  5. 哈希(Hashes)

    • 一个哈希可以存储多个键值对(field-value)。
    • 类似于其他数据库中的字典或对象。
    • 支持添加、删除单个字段以及整个哈希。
  6. 位图(Bitmaps)

    • 可以将字符串数据视为位的集合,并对其进行操作。
    • 常用于实现大型数据集的快速操作。
  7. 超日志(HyperLogLogs)

    • 用于基数统计,可以估算一个集合中唯一元素的数量。
    • 优点是内存使用非常高效。
  8. 地理空间(Geospatial)

    • 可以存储地理位置信息。
    • 支持根据经纬度添加、删除和查询位置信息。
    • 支持计算两个位置之间的距离和范围查询。
  9. 发布/订阅(Pub/Sub)

    • 一种消息通信模式,允许消息发布者将消息发送到一个频道,而订阅者可以订阅一个或多个频道来接收消息。
    • 消息是实时传递的。
  10. 流(Streams)

    • Redis 5.0版本引入的新数据类型,用于消息队列(消息的持久化存储)。
    • 支持消息的追加、读取和消费。
    • 可以设置消息的过期时间。
  11. 键空间通知(Key-space notifications)

    • 允许客户端订阅键空间中的事件,如键的添加、删除或过期。
    • 可以用于实现缓存失效通知等场景。
  12. 脚本(Scripts)

    • 支持使用Lua脚本进行原子操作,可以编写复杂的逻辑。
  13. 虚拟内存(VM)

    • 允许Redis将部分数据交换到磁盘,以减少内存使用。

Redis的这些数据类型为开发者提供了极大的灵活性,使得Redis可以用于缓存、消息队列、排行榜、实时分析、数据聚合等多种应用场景。

四、Redis有哪几种数据淘汰策略?

Redis提供了多种数据淘汰策略,用于决定当内存不足时哪些数据应该被移除。这些策略对于内存管理至关重要,尤其是在处理大量数据时。以下是Redis支持的数据淘汰策略:

  1. noeviction

    • 不淘汰任何数据。当达到最大内存限制时,所有引起内存使用的写入操作都会被拒绝。
  2. allkeys-lru(Least Recently Used):

    • 从所有键中淘汰最近最少使用的数据。这是一种常见的缓存淘汰策略,适用于访问模式不均匀的情况。
  3. volatile-lru

    • 仅从设置了过期时间的键中淘汰最近最少使用的数据。如果设置了过期时间的键不足以释放所需内存,该策略将退化为noeviction。
  4. allkeys-lfu(Least Frequently Used):

    • 从所有键中淘汰使用频率最低的数据。这种策略适用于需要保留最常访问数据的场景。
  5. volatile-lfu

    • 仅从设置了过期时间的键中淘汰使用频率最低的数据。如果使用频率最低的键不足以释放所需内存,该策略将退化为noeviction。
  6. allkeys-random

    • 从所有键中随机淘汰数据。这种策略适用于数据访问模式均匀,且对数据的随机性要求不高的场景。
  7. volatile-random

    • 仅从设置了过期时间的键中随机淘汰数据。如果随机淘汰的键不足以释放所需内存,该策略将退化为noeviction。
  8. volatile-ttl

    • 从设置了过期时间的键中淘汰即将过期的数据。这种策略适用于希望尽快释放即将过期数据的场景。

Redis的淘汰策略可以通过配置文件中的maxmemory-policy选项设置,或者在运行时通过CONFIG SET命令动态更改。选择合适的淘汰策略取决于应用的具体需求和数据访问模式。例如,如果数据的访问频率和模式大致相同,可能会选择allkeys-random;如果希望保留最近被频繁访问的数据,则可能会选择allkeys-lru

值得注意的是,Redis的淘汰策略只适用于内存中的数据,不会影响到持久化到磁盘的数据。即使数据在内存中被淘汰,只要存在持久化文件,这些数据仍然可以在Redis重启后恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值