- 博客(18)
- 收藏
- 关注
原创 TCP 的粘包和拆包
TCP 是面向字节流的协议,它不关心数据的边界,因此在传输过程中可能会出现粘包和拆包(也称半包)现象。这些问题会影响接收方对数据的正确解析,需要通过特定的方法来解决。
2025-01-14 22:11:03
370
原创 HTTP 轮询与长轮询
在 Web 开发中,如何在不刷新页面的情况下实时更新数据是一个常见的需求。传统的 HTTP 轮询和长轮询是两种常见的解决方案,用于实现服务器向客户端推送数据的“伪”实时效果。
2025-01-14 22:10:07
493
原创 从输入网址到网页显示的过程
服务器处理 HTTP 请求,执行相应的业务逻辑(如读取数据库、访问文件系统等)。URL 解析是整个过程的第一步,决定了后续的请求目标和方式。DNS 服务器通过递归查询,最终返回域名对应的 IP 地址。DNS 解析是将域名转换为 IP 地址的关键步骤。根据端口号找到对应的监听进程,应用层接收到数据。,包含源 MAC 地址和目标 MAC 地址。,并封装为 TCP、IP、MAC 数据包。服务器处理请求并生成响应是整个过程的核心。,包含源 IP 地址和目标 IP 地址。IP 封装是实现数据包跨网络传输的基础。
2025-01-14 22:08:54
1216
原创 Cookie、Session、Token 之间的区别
Cookie是存储在用户浏览器端的一个小型数据文件,用于跟踪和保存用户的状态信息。Session是服务器端保存用户状态的机制,每个用户会话都有一个唯一的Session ID。Token是一种加密的字符串,用于身份验证和授权,通常包含用户信息和权限。
2025-01-14 22:08:18
297
原创 TCP 的三次握手
三次握手的目的是确保客户端和服务器之间的通信通道是可靠的,双方都准备好发送和接收数据。收到服务器的 SYN-ACK 报文后,向服务器发送一个。:设置为 1,表示确认服务器的 SYN-ACK 报文。:客户端随机生成的一个序列号,用于标识数据包的顺序。收到客户端的 SYN 报文后,向客户端回复一个。:设置为 1,表示确认客户端的 SYN 报文。:值为客户端的初始序列号 + 1。:值为服务器的初始序列号 + 1。:设置为 1,表示请求建立连接。:设置为 1,表示同意建立连接。:服务器随机生成的一个序列号。
2025-01-12 21:01:35
184
原创 什么是策略模式?
是一种行为型设计模式,它允许你定义一系列算法或行为,并将它们封装在独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而提高了代码的灵活性和可维护性。将不同的算法或行为封装到独立的类中,每个类实现相同的接口。客户端可以在运行时根据需要选择不同的策略(算法)。通过策略模式可以避免使用大量的if-else或语句来选择算法。定义所有具体策略类必须实现的方法。实现策略接口,提供具体的算法或行为。持有一个策略对象的引用,并通过策略接口调用具体策略的算法。创建具体策略对象并将其传递给上下文类。
2025-01-08 14:46:43
1073
原创 Redis 单线程和多线程模型(Redis 6.0+)对比
通过多线程优化网络 I/O,提升高并发场景下的性能,同时保持核心操作的简单性。: 网络 I/O 部分引入多线程,但核心操作保持单线程,整体设计仍相对简单。: 通过多线程处理网络 I/O,更好地利用多核 CPU,提升网络吞吐量。: 核心数据操作仍由单线程处理,但网络 I/O 由多线程处理。: 适合高并发场景,如大型分布式系统或需要高网络吞吐量的场景。:简单高效,适合中低并发场景,但网络 I/O 可能成为瓶颈。: 在高并发场景下,网络 I/O 可能成为性能瓶颈。
2025-01-02 22:55:07
323
原创 为什么 Redis 6.0 引入多线程?
尽管单线程模型在大多数场景下表现优异,但随着硬件的发展和业务需求的变化,Redis 在某些方面遇到了性能瓶颈。Redis 6.0 引入了多线程来处理网络 I/O(如读取请求和写回响应),而核心的数据操作仍然是单线程的。现代服务器的 CPU 核心数越来越多,单线程无法充分利用多核 CPU 的性能。Redis 6.0 的多线程仅用于网络 I/O,核心的数据操作仍然是单线程的。这种设计在提升性能的同时,保持了 Redis 核心操作的简单性和一致性。在超高并发场景下,单线程处理网络 I/O 可能成为性能瓶颈。
2025-01-02 22:53:04
264
原创 为什么 Redis 设计为单线程?
Redis 的数据存储在内存中,内存操作的速度非常快,单线程已经能够处理大量的请求。多线程编程涉及线程同步、锁竞争、死锁等问题,增加了系统的复杂性和调试难度。对于 CPU 密集型的操作(如数据结构的操作),单线程的性能已经足够。单线程模型简化了 Redis 的设计和实现,降低了开发和维护成本。多线程环境下,共享资源需要加锁保护,锁竞争会降低性能。多线程会导致频繁的上下文切换,消耗 CPU 资源。单线程避免了上下文切换,能够更高效地利用 CPU。单线程模型天然避免了锁竞争,所有操作都是原子性的。
2025-01-02 22:52:12
244
原创 Redis为什么这么快
单线程避免了多线程的上下文切换和竞争条件,减少了锁的开销,简化了设计。: Redis 提供了 RDB(快照)和 AOF(追加日志)两种持久化方式,这些操作在后台异步执行,不会阻塞主线程,保证了高性能的同时也支持数据持久化。: Redis 将所有数据存储在内存中,内存的访问速度远远快于磁盘(通常是纳秒级 vs 毫秒级),这使得 Redis 能够实现极低延迟的读写操作。: 传统的数据库系统(如 MySQL)需要频繁读写磁盘,而 Redis 通过内存存储避免了磁盘 I/O 的开销,极大地提升了性能。
2025-01-02 22:36:53
343
原创 Redis常见数据类型和使用场景
可以是字符串、整数或浮点数等任何数据类型,最大长度为 512MB。: 存储简单的键值对,如用户会话、页面缓存等。: 利用INCR和DECR: 通过SET命令的NX选项实现简单的分布式锁。
2025-01-02 22:29:57
231
原创 MySQL InnoDB 引擎中的聚簇索引和非聚簇索引
例如,如果你想找作者是 "坤坤" 的书,先在分类标签中找到 "坤坤",然后根据标签上的位置信息去书架上找书。因为书架上的书是按照书名排列的,所以你需要先通过分类标签找到书名,再按照书名查找书的位置。如果有一本新书《坤说》,需要插入到 "K" 开头的区域,可能会导致书架上的书重新排列(如果有一本新书《Man》,只需要在分类标签中添加一条记录,书的物理位置不需要改变。想象一个图书馆的书架,所有的书都按照书名的字母顺序(A~Z)排列。分类标签按照主题、作者等信息分类,但书的物理位置仍然按照书名排列。
2024-12-31 17:06:29
475
原创 MySQL三层B+树能存多少数据
例如,如果数据页大小增加到 32 KB,每个非叶子节点可以存储大约 2340 个条目,每个叶子节点可以存储大约 64 条记录,总记录数将增加到约 175,000,000 条。例如,如果索引键值大小增加到 16 字节,每个非叶子节点只能存储大约 819 个条目,总记录数将减少到约 21,000,000 条。:如果记录大小增加,每个叶子节点存储的记录数量会减少,从而降低总存储容量。例如,如果每条记录的大小增加到 1 KB,每个叶子节点只能存储大约 16 条记录,总记录数将减少到约 2200 万条。
2024-12-31 17:00:46
1743
原创 Mysql的索引类型
根据查询需求选择合适的索引类型,例如 B+树索引适用于范围查询,哈希索引适用于等值查询。在 InnoDB 中,二级索引存储的是主键值,需要通过主键查找数据行。:避免在查询中使用导致索引失效的操作,例如对索引列进行函数操作或使用。:过多的索引会增加写操作的开销,定期维护和优化索引。最常用的索引类型,适用于范围查询和排序操作。用于空间数据类型的索引,支持地理空间查询。用于地理空间数据类型的索引,支持空间查询。也称为普通索引或辅助索引,用于加速查询。在多个列上创建的索引,支持多列查询。
2024-12-31 16:38:03
230
原创 什么样的字段适合加索引?索引失效了解吗?
通过合理使用索引,可以显著提高数据库查询性能,但需要注意避免索引失效和不必要的索引开销。:小表的查询通常非常快,加索引不会带来明显的性能提升,反而增加存储开销。:频繁更新的字段会导致索引结构频繁维护,增加更新操作的开销,降低性能。:例如索引列是字符串类型,但查询时使用了数字类型,索引可能失效。:外键字段通常用于表连接操作,加索引可以提高连接性能。:在编写 SQL 时,注意避免导致索引失效的操作。:删除不必要的索引,优化索引结构,提高查询性能。连接的字段中有未加索引的字段,索引可能失效。
2024-12-31 16:34:40
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅