- 博客(165)
- 收藏
- 关注
原创 【C++】protobuf序列化与反序列化
编译 contacts.proto 后,会生成所选择语言的代码,我们选择的是C++,所以编译后生成了两个文件:contacts.pb.h 和 contacts.pb.cc。受该选项影响,设置不同的优化级别,编译 .proto 文件后生成的代码内容不同。oneof是protobuf中定义互斥字段的关键字,核心作用是在一组字段里,最多只能同时设置一个字段,设置其中一个会自动清空同组内的其他所有字段。等,文件级是在整个 proto 文件中设置,消息级是在message中进行设置,字段级是在字段中进行设置。
2026-06-07 19:08:18
235
1
原创 【Redis存储】分布式锁
对于 Redis 中写入的加锁键值对,其他的节点也是可以删除的。这样就可以在删除 key(解锁)的时候先校验当前删除 key 的服务器是否是当初加锁的服务器,如果是才能真正删除;连续锁本质是加锁的服务器上的⼀个单独的线程,通过这个线程来对锁过期时间进行 “续约”。当节点所持有的锁过期后,即加锁,会启动一个后台线程(连续锁),每隔一段时间后(如每3或10秒)检查任务是否完成,若完成,会释放锁;这个公共的服务器可以是 Redis,也可以是其他组件(比如 MySQL 等),还可以是我们自己写的一个服务。
2026-03-06 00:58:59
113
原创 【Redis存储】集群
槽是全局的,集群内所有节点都知晓槽到节点的映射关系。此种算法大大降低了扩容时数据搬运的规模,提高了扩容操作的效率,但是,若物理节点数量少,哈希后可能集中在哈希环的某一段,导致部分节点存储大量数据,负载过高;与节点扩充相似,假设节点 B 下线,仅影响节点 D 到节点 C 之间的 key(如原本映射到 B 的 key,现在映射到 C),其余 key 映射关系不变。做相同的哈希计算,得到哈希值后映射到哈希环的某个位置,然后,从该位置顺时针查找,找到第一个遇到的节点,该节点就是这个 key 要存储的节点。
2026-03-03 04:05:47
633
原创 【Redis存储】哨兵
如果下线的是主节点,它还会和其他的哨兵节点进行 “协商”,当大多数哨兵节点对主节点不可达这个结论达成共识之后,它们会在内部 “选举” 出一个哨兵领导节点来完成自动故障转移的工作,即从从节点中选择一个作为新主节点,并让其他从节点同步新主节点,将这个变化实时通知给 Redis 应用方,即为客户端提供新主节点地址。哨兵节点监控从节点的主要作用是为了监控从节点状态,让主节点挂了后能够选出新的主节点,以及切换后能让其他从节点挂到新主节点上。哨兵节点这里会对主/从节点和其他哨兵节点进行监控。,使其同步新主节点。
2026-03-02 02:43:58
657
原创 【Redis存储】主从复制
建立主从结构的流程是,当从节点绑定主节点后,首先会清空从节点上的所有数据,然后从主节点同步最新的全量数据(RDB 快照),最终从节点的数据会和主节点完全一致。主从结构是将redis服务部署到多个物理服务器上,每个服务器称为一个节点,里面有且只有一个主节点,其余节点称为从节点,而从节点上的数据要随主节点上的数据变化而变化,即从节点上的数据要和主节点保持一致,主节点上的数据做出任何修改,都会将修改同步到从节点上。其次,主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。从节点这里只能读取,不能写入。
2026-02-28 03:58:59
579
原创 【Redis存储】渐进式遍历和数据库管理
这是因为本身 Redis 并没有为多数据库提供太多的特性,其次无论是否有多个数据库,Redis 都是使用单线程模型,所以彼此之间还是需要排队等待命令的执行。所以实践中,始终使用数据库 0 其实是一个很好的选择。Redis 中存在数据库的概念,与MySQL不同的是,Redis 默认提供了16 个数据库,编号 0-15,不能像MySQL那样创建和删除。这16个数据库中的数据是隔离的,互相之间不会受到影响,默认情况下私用的数据库编号是0(实际应用中很少会关注redis数据库,默认使用0号就可以)。
2025-11-22 16:02:57
493
原创 【Redis存储】集合
ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个), 同时每个元素的值都小于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会⽤ ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使用。集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中元素之间是无序的,且元素不允许重复。从0开始,支持负数。:(默认)将所有集合中该元素的分数(已乘以权重)相加。
2025-11-21 22:23:42
842
原创 【Redis存储】List列表
ziplist(压缩列表):当列表的元素个数小于 list-max-ziplist-entries 配置(默认 512 个),同时,列表中每个元素的长度都小于 list-max-ziplist-value 配置(默认 64 字节)时,Redis会选用 ziplist 来作为列表的内部编码实现来减少内存消耗。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。元素的位置由插入顺序决定(先插的在前,后插的在后),不会自动排序。
2025-11-20 14:29:22
758
原创 【Redis存储】Hash哈希
ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认512个)、同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis会使用 ziplist 作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable 更加优秀。在字段不存在的情况下,设置 hash 中的字段和值。设置 hash 中指定的字段的值。获取 hash 中的所有的值。
2025-11-19 20:20:20
326
原创 【Redis存储】string字符串
如果value的数据类型不是string,会报错。mget与get的区别是mget可以⼀次性获取多个key的值,get只能一次获取一个。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。mset与set的区别是mset⼀次性设置多个 key 的值。setnx设置键值对,但只允许在key之前不存在的情况下。setex和psetex都是在设置键的字符串值时,再指定个过期时间。redis中的字符串都是按照二进制数据的方式存储的,所以 Redis 是不处理字符集编码问题的,即不会做任何的编码转换。
2025-11-19 12:08:33
614
原创 【Redis存储】数据类型和编码方式
小数据和大数据分别使用不同编码,使小数据减少内存的占用,大数据用高效编码合理利用内存。Redis中,key固定为字符串,value是Redis中的数据类型,而Redis采用。的设计,每种数据结构都有自己的底层内部编码实现。Redis这样设计的目的是。命令查询 key 对应 value 的内部编码。
2025-11-18 15:46:36
269
原创 【Qt开发】输入类控件
Line Edit、Text Edit、Combo Box、Spin Box、Date Edit和Time Edit、Dial、Slider输出类控件的说明
2025-05-26 21:31:39
1092
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅