- 博客(225)
- 收藏
- 关注
原创 技术准备十:etcd
etcd 可以存储键值对,用于实现注册中心,可以存放大量键值对,并针对每个键值对设置租约(保活时间),进行数据监控,而且支持目录结构。
2025-11-01 16:56:32
237
原创 技术准备九:FFmpeg
HLS 协议:http 流媒体传输协议,将视频切分成一个个小分片,并转码成不同码率的分片,播放视频只需要播放分片就能保证既轻量又高效。
2025-11-01 16:46:39
199
原创 技术准备七:websocket
websocket 是一个协议,用于支持网页端和服务端之间长连接的机制。一般的 http 协议都是客户端问,服务器答,服务器无法主动向客户端发消息。但是用 websocket 协议,服务器可以向客户端发送消息,保持网页端和服务端之间长连接。
2025-11-01 16:30:52
329
原创 技术准备三:spdlog
先定义出输出的格式:格式枚举:%t - 线程ID(Thread ID)%n - ⽇志器名称(Logger name)%l - ⽇志级别名称(Level name),如 INFO, DEBUG, ERROR 等%v - ⽇志内容(message)%Y - 年(Year)。%H - ⼩时(24-hour format)%M - 分钟(Minute)%S - 秒(Second)
2025-10-15 16:37:52
435
原创 技术准备一:gflags
在程序执行前,需要先用宏定义一些会用到的参数,便于后续在程序中用 gflags 的宏获取参数。例:DEFINE_bool(reuse_addr, true, "是否开始⽹络地址重⽤选项");DEFINE_int32(log_level, 1, "⽇志等级:1-DEBUG, 2-WARN, 3-ERROR");DEFINE_string(log_file, "stdout", "⽇志输出位置设置,默认为标准输出");宏定义的参数分别是:命令行参数名,参数默认值,参数备注。
2025-10-15 16:12:10
330
原创 Redis分布式锁
本质上是一组服务器给其他服务器提供加锁解锁的服务(控制其他节点互斥)最基本流程:执行业务逻辑前先尝试设置一组 key value,设置成功就代表加锁成功,期间其他服务器再次设置相同 key 发现已经被设置了代表加锁失败,执行完逻辑之后删除 key 代表解锁。也就是 setnx 和 del 命令。
2025-08-24 20:02:22
277
原创 Redis集群
广义:多个机器构成分布式系统。狭义:Redis 提供的集群模式,用于解决存储空间不够。数据全集会被平均分成若干份存储在一组主从节点,叫做分片中,这样就能解决存储容量的问题。但是新来一个数据,我们应该把数据放在哪个分片中呢?
2025-08-23 19:42:09
500
原创 Redis哨兵
1、哨兵要不只一个,防止一个哨兵网络的抖动误判主节点挂了,要与其他哨兵进行商量2、哨兵个数要奇数,便于投票3、哨兵不负责数据存储4、哨兵 + 主从复制只是提高可用性,并不能提高数据存储量,下一章的集群用于解决数据存储量问题。
2025-08-22 19:22:54
201
原创 Redis主从复制
在分布式系统中,多个服务器部署 Redis 形成集群。其中部署方式有主从模式,主从 + 哨兵,集群模式,本文介绍的时主从模式。其中主节点用于修改和查询,每次的修改数据同步给从节点,多个从节点分担主节点的查询压力,即从节点只读,主节点可读可写。所以有一个从节点挂了没有关系,但是主节点挂了就有问题了,没法写了。那么能不能有多个主节点解决问题呢?也不行,如果主节点之间数据不一致就会出问题,即没法解决主节点之间的数据同步。之后哨兵 + 主节点解决问题。
2025-08-21 19:19:03
337
原创 Redis持久化机制
数据存储在硬盘上就是持久的,数据存储在内存上就是不持久的。所以 Redis 的持久化策略:插入新元素的时候内存硬盘全写入,读数据从内存读。硬盘数据只有在 Redis 重启的时候才会使用,用于恢复内存数据。而把数据写入硬盘时间开销很大,直接写入数据 Redis 单线程会阻塞,导致服务器无法处理请求,所以引入两种持久化方法:RDB 和 AOF。
2025-08-19 19:19:46
511
原创 Redis客户端接口介绍
cout << "get和set的使用:" << endl;// 清空数据库// 返回值是optional_string,要拿到string类型使用函数value()if(val4)// 没有k4抛异常cout << "get和set使用:" << endl;cout << "lpush lrange使用:" << endl;Print(ret);cout << "hset hget使用:" << endl;});
2025-08-18 19:05:51
508
原创 数据类型 zset
有序集合,数据在集合中是有序的(仅仅指根据数字的升序降序优先级,不是 list 那种先后顺序)给每一个 member 分配一个分数 score 进行排序,member 唯一,score 可以相同一般按照分数升序排序,由于有序,所以可以有下标的概念。
2025-08-14 19:25:33
494
原创 数据类型 set
存储一些元素的集合。与 list 区别:set 元素无序,元素无法重复和 list 一样只能存 string,但是可以存 JSON 实现存储结构化数据。
2025-08-13 19:11:48
436
原创 数据类型 string
在 string 中,存储方式就是直接二进制存储,存进去是什么取出来就是什么。所以可以存文本,整数,JSON,二进制数据(图片,视频,音频)存储大小限制 512 MB,所以一般不存视频和音频。
2025-08-11 18:49:47
591
原创 Redis 数据类型和单线程模型补充
对于 key 只有一种数据类型就是 string对于 value 有五种常见的数据类型 string, hash, list, set, zset。
2025-08-10 18:25:37
365
原创 最小生成树(竞赛)
最小生成树一般针对的是无向图,用 n - 1 条边连接 n 个节点,并且权值最小。接下来介绍两种算法:克鲁斯卡尔算法,普利姆算法。
2025-05-15 18:50:27
401
原创 多重背包、分组背包、混合背包和多维背包
在每一组中挑一个物品例题:分组背包P1757 通天之分组背包 - 洛谷01背包,完全背包,多重背包,分组背包结合在一起的背包问题例题:樱花P1833 樱花 - 洛谷限制条件增多的背包问题,必须要空间优化。例题:L 国的战斗之间谍P1910 L 国的战斗之间谍 - 洛谷。
2025-05-12 18:54:43
619
原创 质数和约数
把质数和约数放在一起就是因为他们有非常多的联系,为了验证这个观点我们可以先学习唯一分解定理:一个大于 1 的自然数一定能被唯一分解为有限个质数的乘积。而且一个数不仅能被质数分解,原本也应该被自己的约数分解,所以在数论的题目中,一个或多个数被分解的题型可以是让你求被质数分解和被约数分解。所以他们两个放在一起既是相似,也可以起到对比防止混淆。这篇文章我更倾向于写成质数与约数的对比文章,所以筛质数这个操作我会放到文章最后介绍。
2025-05-10 20:09:25
1265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2