- 博客(118)
- 收藏
- 关注
原创 redis-cpp-cpp如何使用lua脚本
我今天要在项目中使用lua脚本,结果搞半天都没有弄明白这个函数怎么调用,而且也似乎很少有redis++相关的博客介绍,ai也回答的不准确!
2025-04-04 12:02:05
288
原创 Go语言中的基本数据类型之间的转换方法
strconv包提供了丰富的函数,能够方便地实现字符串和基本数据类型之间的转换。在使用这些函数时,要留意错误处理,因为转换可能会失败。
2025-03-20 09:00:00
132
原创 Git使用和原理(3)
1.远程操作1.远程操作1.1分布式版本控制系统我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢?可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这样你⼯作的时候,就不需要联⽹了,因为版本库就在你⾃⼰的电脑上。既然每个⼈电脑上都有⼀个完整的版本库,那多个⼈如何协作 呢?
2025-03-15 20:30:26
1256
原创 RabbitMq C++客户端的使用
RabbitMQ 是一款功能强大、成熟稳定的消息队列,适合对可靠性和灵活性要求较高的中小型项目。如果需要处理海量数据或追求极致性能,可考虑 Kafka 或 RocketMQ 等其他方案。
2025-03-15 09:00:00
869
原创 websocketpp 使用安装与使用
WebSocket是从HTML5开始支持的一种网页端和服务端保持长连接的 消息推送机制。•传统的web程序都是属于一问一答的形式,即客户端给服务器发送了一个HTTP请求,服务器给客户端返回一个HTTP响应。这种情况下服务器是属于被动的一方,如果客户端不主动发起请求服务器就无法主动给客户端响应•像网页即时聊天或者我们做的五子棋游戏这样的程序都是非常依赖消息推送的,即需要服务器主动推动消息到客户端。如果只是使用原生的HTTP协议,要想实现消息推送一般需要通过轮询。
2025-03-12 09:30:00
902
原创 cpp-httplib 安装与使用
C++ HTTP库()是一个轻量级的C++ HTTP客户端服务器库,它提供了简单的API来创建HTTP服务器和客户端,支持同步和异步操作。以下是一些关于的主要特点:1.
2025-03-12 09:00:00
717
原创 Etcd的安装与使用
Etcd是一个golang编写的分布式、高可用的一致性键值存储系统,用于配置共享和服务发现等。它使用Raft一致性算法来保持集群数据的一致性,且客户端通过长连接watch功能,能够及时收到数据变化通知。以下是关于etcd的安装与使用方法的详细介绍。
2025-03-08 08:30:00
498
原创 spdlog的安装与使用
spdlog是一个高性能、超快速、零配置的C++日志库,它旨在提供简洁的API和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。以下是对spdlog的详细介绍和使用方法。github链接:
2025-03-08 08:00:00
384
原创 gtest安装与使用
主要用来创建一个简单测试, 它定义了一个测试函数, 在这个函数中可。:主要用来进行多样测试,适用于多个测试场景如果需要相同的数据配置。系列:如果当前点检测失败则退出当前函数。系列:如果当前点检测失败则继续往下执行。代码并且使用框架提供的断言进行检查。的情况, 即相同的数据测不同的行为。下面是经常使用的断言介绍。改成a-b就无法通过了。
2025-03-07 12:04:37
320
原创 gflags的安装与使用
gflags是Google开发的一个开源库,用于C++应用程序中命令行参数的声明、定义和解析。gflags库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。它具有如下几个特点。
2025-03-07 11:51:46
405
原创 仿mudou库one thread oneloop式并发服务器
通过咱们实现的⾼并发服务器组件,可以简洁快速的完成⼀个⾼性能的服务器搭建。并且,通过组件内提供的不同应⽤层协议⽀持,也可以快速完成⼀个⾼性能应⽤服务器的搭建(当前项⽬中提供HTTP协议组件的⽀持)。在这⾥,要明确的是咱们要实现的是⼀个⾼并发服务器组件,因此当前的项⽬中并不包含实际的业务容。
2025-03-05 21:48:06
1078
原创 Git原理与使⽤(2)
你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上 正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀ 上,这样,既安全,⼜不影响别⼈⼯作。⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布 时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽ HEAD只要⼀直指向master分⽀即可指向当前分⽀。
2025-03-02 09:49:01
851
原创 Git原理与使⽤(1)
还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂ 件,⽹⻚,所有的程序代码等等。⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进 制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不 知道,也没法知道。⽐如你新增了⼀⾏,这就是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符, 也是⼀个修改,删了⼀些⼜加了⼀些,也是⼀个修改,甚⾄创建⼀个新⽂件,也算⼀个修改。
2025-03-02 09:48:50
636
原创 Redis分布式锁
我们引⼊⼀组 Redis 节点. 其中每⼀组 Redis 节点都包含⼀个主节点和若⼲从节点. 并且组和组之间存 储的数据都是⼀致的, 相互之间是 "备份" 关系(⽽并⾮是数据集合的⼀部分, 这点有别于 Redis cluster). 加锁的时候, 按照⼀定的顺序, 写多个 master 节点. 在写锁的时候需要设定操作的 "超时时间". ⽐如 50ms. 即如果 setnx 操作超过了 50ms 还没有成功, 就视为加锁失败.把这个过期时间设置的⾜够⻓, ⽐如 30s, 是否能解决这个问题呢?
2025-02-19 09:00:00
433
原创 Redis之集群
表⽰的. 表⽰ 16384 (16k) 个 slots, 需要的位图⼤⼩是 2KB. 如果给定的 slots 数更多了, ⽐如 65536 个了, 此时就需要消耗更多的空间, 8 KB 位图表⽰了. 8 KB, 对于内存来说不算什么, 但是在频繁的⽹ 络⼼跳包中, 还是⼀个不⼩的开销的.读取的时候⼜应该去哪个分⽚读取?缺点: ⼀旦需要进⾏扩容, N 改变了, 原有的映射规则被破坏, 就需要让节点之间的数据相互传输, 重新排 列, 以满⾜新的映射规则. 此时需要搬运的数据量是⽐较多的, 开销较⼤.
2025-02-19 08:00:00
720
原创 Redis之缓存
使⽤ Redis 作为 MySQL 的缓存的时候, 当 Redis 刚刚启动, 或者 Redis ⼤批 key 失效之后, 此时由于 Redis ⾃⾝相当于是空着的, 没啥缓存数据, 那么 MySQL 就可能直接被访问到, 从⽽造成较⼤的压⼒. 因此就需要提前把热点数据准备好, 直接写⼊到 Redis 中. 使 Redis 可以尽快为 MySQL 撑起保护伞. 热点数据可以基于之前介绍的统计的⽅式⽣成即可. 这份热点数据不⼀定⾮得那么 "准确", 只要能帮助。
2025-02-18 09:39:00
1142
原创 Redis之哨兵
Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的, 于是 Redis 从 2.8 开始提供了 Redis Sentinel(哨兵)加个来解决这个问题。本章主要内容如下:•Redis Sentinel 的概念•Redis Sentinel 的部署•Redis Sentinel 命令•Redis Sentinel 客⼾端•Redis Sentinel 实现原理。
2025-02-18 09:00:00
961
原创 Redis之主从复制
主从复制本文重点带⼤家理解流程和原理.在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis 也是如此,它为我们提供了复制的功能,实现了相同数据的多个 Redis 副 本。复制功能是⾼可⽤ Redis 的基础,哨兵和集群都是在复制的基础上构建的。本章内容如下:•介绍复制的使⽤⽅式:如何建⽴或断开复制、安全性、只读等。•说明复制可⽀持的拓扑结构,以及每个拓扑结构的适⽤场景。•。
2025-02-17 17:35:46
691
原创 Redis之事务
1.前言什么是事务Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执 ⾏. 但是注意体会 Redis 的事务和 MySQL 事务的区别:•弱化的原⼦性: redis 没有 "回滚机制". 只能做到这些操作 "批量执⾏". 不能做到 "⼀个失败就恢复到 初始状态".•不保证⼀致性: 不涉及 "约束". 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都 是合理有效的, 不会出现中间⾮法状态.•。
2025-02-17 16:01:09
516
原创 Redis之持久化
Redis⽀持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。本文内容:• 介绍RDB、AOF的配置和运⾏流程,以及控制持久化的命令,如bgsave和bgrewriteaof。• 对常⻅持久化问题进⾏分析定位和优化。
2025-02-16 17:03:17
817
原创 Redis c++安装使用教程(redis-plus-plus)
C++操作redis的库有很多.咱们此处使⽤redis-plus-plus.这个库的功能强⼤,使⽤简单.Github地址:https://github.com/sewenew/redis-plus-plus。
2025-02-16 09:33:19
547
原创 Mysql进阶——1
可以在选项⽂件中指定常⽤选 项,这样就不⽤在每次运⾏程序时都在命令⾏中输⼊它们。对于带值的短选项,选项值可以紧跟在 选项之后,也可以⽤空格隔开,例如: --host=127.0.0.1。mysql是⼀个简单的 SQL shell, 可以输⼊命令和执⾏SQL语句,当执⾏SQL语句时,查询结果以。运⾏ MySQL 程序时在命令⾏上指定的任何⻓选项都可以在选项⽂件中指定,要获取选项列表可以 使⽤如下命令。来获取程序不同选项的描述。在mysql后⾯指定配置⽂件的路径,以便在程序启动时读取配置⽂件中的选项。
2024-09-21 10:09:16
962
原创 Protubuf入门
编译 contacts.proto ⽂件后,会⽣成所选择语⾔的代码,我们选择的是C++,所以编译后⽣成了两个 ⽂件: contacts.pb.h contacts.pb.cc。依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏ 设置和获取,和对 message 对象进⾏序列化和反序列化。依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏ 设置和获取,和对 message 对象进⾏序列化和反序列化。
2024-09-15 15:32:14
710
原创 Redis入门和基础使用
Redis是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、 Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis 可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能⾮常惊 ⼈。
2024-08-30 15:24:46
712
原创 Docker核心技术和实现原理
rootfs 等等,这种容器的组装方式提供了非常大的灵活性,只读的镜像层通过共享也能够减少磁盘的占用。而宿主机上的文件系统,也自然包括了我们要使用的容器镜像。镜像制作是因为某种需求,官方的镜像无法满足需求,需要我们通过一定手段来自定。用所需要的最小化环境。如果确实要从外部引入数据,需要指定持久的地址,并带版本信息等,让他人可以复。这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是。中间层镜像,是其它镜像所依赖的镜像。实际上,这些镜像也没必要删除,因为之前说过,相同。
2024-08-20 11:01:27
610
原创 docker入门教程
常见问题和docker run有什么区别?命令从Docker映像创建一个全新的容器。但是,它不会立即运行它。命令将启动任何已停止的容器。如果使用命令创建容器,则可以使用此命令启动它。docker run命令是创建和启动的组合,因为它创建了一个新容器并立即启动它。实际上,如果docker run命令在您的系统上找不到上述映像,它可以从Docker Hub中提取映像。和有什么区别?想要了解与命令的区别,还必须知道与命令:•:将一个镜像导出为文件,再使用命。
2024-08-17 09:50:59
1839
原创 Spring Boot ⽇志
⽇志级别是开发⼈员设置的, ⽤来给开发⼈员看的. ⽇志级别的正确设置, 也与开发⼈员的⼯作经验有 关. 如果开发⼈员把error级别的⽇志设置成了info, 就很有可能会影响开发⼈员对项⽬运⾏情况的判 断. 出现error级别的⽇志信息较多时, 可能也没有任何问题. 测试的bug级别更多是依据现象和影响范 围来判断。SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范, 标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤。
2024-08-10 07:12:51
944
原创 SpringBoot 配置⽂件
计算机上有数以千计的配置⽂件, 我们使⽤的绝⼤多数软件, ⽐如浏览器, 微信, Idea, 甚⾄电脑, ⼿机, 都 离不开配置⽂件. 我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在 我们的计算机上, ⽐如C:\Users, C:\Windows⽂件夹, 以及各种 *.config, *.xml ⽂件。配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏.
2024-08-09 13:15:26
753
原创 Spring I
在上⾯的程序中, 我们是根据轮⼦的尺⼨设计的底盘,轮⼦的尺⼨⼀改,底盘的设计就得修改. 同样因 为我们是根据底盘设计的⻋⾝,那么⻋⾝也得改,同理汽⻋设计也得改, 也就是整个设计⼏乎都得改 我们尝试换⼀种思路, 我们先设计汽⻋的⼤概样⼦,然后根据汽⻋的样⼦来设计⻋⾝,根据⻋⾝来设计 底盘,最后根据底盘来设计轮⼦. 这时候,依赖关系就倒置过来了:轮⼦依赖底盘, 底盘依赖⻋⾝, ⻋⾝依赖汽⻋。IoC 是⼀种思想,也是"⽬标", ⽽思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI 就属于 具体的实现。
2024-08-08 15:33:51
976
原创 Java之SpringBoot入门(含Spring Mvc)
在计算机领域, 会话是⼀个客⼾与服务器之间的不中断的请求响应. 对客⼾的每个请求,服务器能够识 别出请求来⾃于同⼀个客⼾. 当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话. 当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了.服务器同⼀时刻收到的请求是很多的. 服务器需要清楚的区分每个请求是从属于哪个⽤⼾, 也就是属于 哪个会话, 就需要在服务器这边记录每个会话以及与⽤⼾的信息的对应关系. Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象.
2024-08-06 18:39:03
1307
原创 Java容器之顺序表和链表,栈,队列的使用
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物。的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。个具有相同特性的数据元素的有限序列。构,常见的线性表:顺序表、链表、栈、队列...)是指允许两端都可以进行入队和出队操作的队列,理上存储时,通常以数组和链式结构的形式存储。出栈:栈的删除操作叫做出栈。
2024-07-12 07:08:23
668
原创 Java包装类&简单认识泛型
一般的类和方法,只能使用具体的类型要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。-----来源《Java编程思想》对泛型的介绍。泛型是在JDK1.5。
2024-07-10 07:30:25
314
原创 Java集合框架
该阶段,我们主要学习以下容器,每个容器其实都是对某种特定数据结构的封装,大概了解一下,后序会给大家详细讲解(以前的文章有讲过c++版本的,之后只会讲在Java中如何使用)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的 集合。使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码。:底层是队列,队列是一种特殊的顺序表。:底层为哈希桶,查询的时间复杂度为。:底层为红黑树,查询的时间复杂度为。:底层为红黑树,查询的时间复杂度为。:集合,是一个接口,里面放置的是。
2024-07-09 08:26:56
283
原创 Java异常
程序先执行try中的代码如果try中的代码出现异常就会结束try中的代码看和catch中的异常类型是否匹配如果找到匹配的异常类型就会执行catch中的代码如果没有找到匹配的异常类型就会将异常向上传递到上层调用者无论是否找到匹配的异常类型中的代码都会被执行到在该方法结束之前执行).如果上层调用者也没有处理的了异常就继续向上传递一直到main方法也没有合适的代码处理异常就会交给JVM来进行处理此时程序就会异常终止8.
2024-07-08 08:58:46
787
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人