Redis进阶(一)——为什么redis这么快

本文探讨了Redis为何如此快速,主要聚焦于其纯内存访问、简单数据结构、早期的单线程模型以及IO多路复用技术。Redis通过将数据存储在内存中,使用高效的数据结构和避免线程竞争来提升性能。尽管6.0版本引入了多线程,但在早期版本中,单线程模型配合IO多路复用技术,确保了在空闲时的有效资源利用,降低了不必要的操作。

在尝试了redis的相关操作,接下来我们需要进一步去了解redis的特性及其原理。

如标题所言,为什么redis这么快?这是个面试常被问到的问题,虽然能靠自己的理解去回答,但还是记录一下。

1、纯内存访问

redis把所有数据放在内存中,内存响应的速度非常快。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

2、数据结构简单

对数据操作简单,Redis中的数据结构是专门进行设计的;

3、采用单线程

redis采用多单线程,避免了线程切换和竞态产生的消耗,同时不存在加锁释放锁操作,因为不会出现因为死锁而导致性能消耗
在这里插入图片描述
注意:目前我是用的redis还是5.* 版本,6.0版本已经采用多线程

4、IO多路复用技术

在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流,并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作

多路:多个网络连接
复用:复用同一个线程

### Redis 的高级用法与深入解析 #### Redis 复制机制 Redis 提供了主从复制功能,允许数据从Redis 实例(主节点)同步到其他实例(从节点)。这种设计不仅提高了系统的可扩展性和可靠性,还支持读写分离以优化性能。通过配置文件或命令行参数可以轻松设置复制关系[^2]。 #### 二、Lua 脚本执行 为了提高操作效率并减少网络开销,Redis 支持 Lua 脚本的运行环境。开发者可以通过 `EVAL` 或 `SCRIPT LOAD` 命令加载脚本,在单次请求中完成复杂逻辑处理。这种方式能够显著降低客户端和服务端之间的交互次数。 ```lua -- 示例:原子计数器 local current = tonumber(redis.call('GET', KEYS[1])) if not current then current = 0 end current = current + ARGV[1] redis.call('SET', KEYS[1], current) return current ``` #### 三、LRU 驱逐策略 当内存不足时,Redis 可采用多种驱逐算法来释放空间,默认情况下会使用 LRU (Least Recently Used) 方法移除最近最少使用的键值对。此行为可通过配置项调整为 LFU (Least Frequently Used),或者基于 TTL 的淘汰方式等。 #### 四、事务支持 尽管 Redis种单线程模型数据库,但它依然提供了基本的事务能力——即 MULTI/EXEC/BLOCK/DISCARD 组合指令集。这些工具帮助用户在个批次内顺序执行多条命令而不会被中断,从而保障了定程度上的隔离性。 #### 五、持久化选项 Redis 主要有两种类型的持久化方案: - **RDB (Redis Database Backup)**: 它会在指定时间间隔创建完整的照保存至硬盘上; - **AOF (Append Only File)**: 记录服务器接收到每个写入操作的具体过程,并在重启期间重新应用它们恢复状态。 两者各有优劣,可以根据实际需求灵活选用。 #### 六、高可用架构 借助于 Redis Sentinel 和集群模式(Cluster Mode),即使部分节点发生故障也能维持整个服务正常运转。Sentinel 自动监测所有 Master-Slave 关系中的成员健康状况;旦检测到异常,则立即启动选举流程选出新的领导者接管业务流量。与此同时,Cluster 功能实现了水平方向的数据分片存储管理,极大地增强了吞吐量上限。 #### 七、分布式锁实现 利用 Redis 设计高效的分布式互斥锁定协议是项常见任务。随着版本迭代更新,目前推荐直接依赖成熟的开源框架如 Redission 来简化开发难度。它内部封装好了许多细节考量比如续期续约防止死锁等问题,极大地方便了日常维护工作[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值