第54篇 Redis简单介绍
前言
Redis,作为一种开源的、基于内存且支持持久化的键值存储系统,以其卓越的性能、丰富灵活的数据结构和高度可扩展性在全球范围内广受欢迎。Redis不仅提供了一种简单直观的方式来存储和检索数据,更因其支持数据结构如字符串、哈希、列表、集合、有序集合等多种类型,使得其在众多场景下表现出强大的适用性和灵活性。
作为一个轻量级、灵活的键值存储系统,Redis在各种应用场景下都展现出了惊人的性能优势。无论是作为缓存工具、会话管理组件、消息传递媒介,还是在实时数据处理任务和复杂的分布式系统架构中,Redis均扮演了至关重要的角色。
1.Redis的核心特点
1.1 高性能
基于内存操作,读写速度极快,特别适用于对性能要求高的实时应用。
1.2 数据持久化
支持RDB和AOF两种持久化方式,确保即使在服务器重启后也能恢复数据。
1.3 分布式的特性
通过主从复制、哨兵模式或集群模式,Redis可以轻松地构建高可用和可扩展的服务。
1.4 丰富的数据结构
提供了多种数据结构支持,便于开发人员根据实际需求进行数据建模和处理。
Redis的广泛应用跨越了多个行业和技术领域,诸如网站加速、缓存服务、会话管理、实时统计、排行榜、消息队列、分布式锁、社交网络功能、限流控制等。
2 Redis为什么处理快
我们将从Redis基于内存操作的特性、高效的内存数据结构、单线程模型、I/O多路复用技术、底层模型和优化技术、持久化机制以及网络通信协议等多个方面进行分析和讨论。
2.1 完全基于内存
相较于依赖磁盘存储的传统数据库系统,Redis巧妙地运用内存的高速读写特性,显著提升了系统的响应速率与整体性能表现。
在读取操作层面,Redis无需经过耗时的磁盘I/O过程,只需在内存空间内迅速定位所需数据,从而显著降低了访问延迟;
在写入操作时,Redis同样直接作用于内存区域,新数据能即刻生效,仅在执行持久化策略时,例如RDB快照或AOF日志记录,数据才会被异步地或按需地同步至磁盘,以确保即使在系统重启后数据仍能得以恢复,但此过程并不会妨碍Redis在常规操作中维持其卓越的性能表现。
说到这,我们就会想到,一台服务器的内存不是无限的,相反的是比较紧张的,Redis基于内存操作,那么Redis究竟是如何在有限内存空间中进行精细且高效的内存管理呢?
2.1.1 过期键删除
Redis支持为键设置过期时间(TTL),并且在键过期后会通过两种方式自动删除它们:
-
惰性删除(Lazy Expire):在访问某个键时,Redis会检查该键是否已经过期,如果已经过期,则在访问时将其删除。这意味着只有当有客户端尝试访问过期的键时,Redis才会执行删除操作。这种方式的优势在于避免了不必要的操作,只有在需要时才进行删除,但缺点是可能会导致过期键在一段时间内仍然占用内存。
-
定期删除(Active Expire):Redis周期性地(默认每秒10次)随机抽取一部分键,并检查它们的过期时间。如果发现某个键已经过期,则立即将其删除。这种方式可以保证过期键在一定时间内被及时删除,避免了过期键长时间占用内存。但定期删除会带来额外的CPU消耗,因为需要在每次抽取时检查键的过期时间。
这两种方式结合起来,可以有效地管理和清理过期键,保证Redis的内存使用在合理范围内。同时,我们在日常开发中可以根据具体业务场景和需求调整过期策略的配置,以达到最佳的性能和内存利用率。
2.1.2 内存淘汰策略
内存淘汰策略是Redis用于释放内存空间的一种机制,当内存空间不足时(达到或超过了配置的maxmemory),Redis会根据预先设置的淘汰策略来选择要删除的键,从而释放内存空间。通过合理选择和配置内存淘汰策略,可以有效地管理内存使用,防止内存溢出,并保证系统的稳定性和性能。
常见的内存淘汰策略:
-
LRU(最近最少使用):
LRU策略会删除最近最少被访问的键。Redis会记录每个键最后一次被访问的时间戳,并定期检查这些时间戳,选择最久未被访问的键进行删除。LRU策略适用于缓存场景,通常最久未被访问的键可能是最不常用的,因此删除这些键可以释放更多的内存空间。 -
LFU(最不经常使用):
LFU策略会删除最不经常被访问的键。Redis会记录每个键被访问的频率,并定期检查这些频率,选择访问频率最低的键进行删除。LFU策略适用于对访问频率较低的键进行淘汰,从而释放内存空间。 -
TTL(键的过期时间):
TTL策略会删除已经过期的键。Redis会定期检查键的过期时间,并删除已经过期的键。通过设置键的过期时间,可以自动清理不再需要的数据,释放内存空间。 -
随机删除:
随机删除策略会随机选择一些键进行删除。虽然这种策略不考虑键的使用频率或过期时间,但在某些情况下可能会是一种简单且有效的淘汰方式,尤其是在内存空间不足时。 -
淘汰固定数量的键
淘汰固定数量的键策略会选择要删除的键的数量,然后按照一定的规则(如LRU或LFU)来选择要删除的键。这种策略可以保证每次淘汰都释放固定数量的内存空间。
当Redis的内存使用达到配置的maxmemory限制时,就会触发内存淘汰策略,以释放内存空间。合理选择内存淘汰策略,并根据系统的需求设置maxmemory参数,可以有效地管理内存使用,保证系统的稳定性和性能。通过合理配置内存限制和内存淘汰策略,可以有效地管理Redis的内存使用,保证系统在内存空间不足时能够及时释放内存,避免因内存溢出而导致系统性能下降或者崩溃。
本随笔借鉴或转载自:https://www.coderacademy.online/article/redisused.html
https://www.coderacademy.online/article/redishighperformance.html