- 博客(208)
- 收藏
- 关注
原创 《Redis》缓存与分布式锁
本文介绍了缓存的基本概念及其应用场景,通过身份验证的例子生动说明了缓存提高访问效率的原理。重点讨论了缓存的更新策略,包括定期生成和实时生成两种方式,并分析了FIFO、LRU、LFU、Random等常见缓存淘汰策略。针对缓存常见问题,文章详细阐述了缓存预热、缓存穿透、缓存雪崩和缓存击穿的成因及解决方案。最后,介绍了Redis在分布式锁中的典型应用,包括锁的基本实现、过期时间设置、校验ID引入以及通过Lua脚本确保原子性操作。文章通过通俗易懂的类比和具体示例,帮助读者理解缓存技术的核心原理和实践应用。
2025-07-06 21:15:34
960
原创 《Redis》集群
Redis集群搭建与哈希槽分片算法解析 本文介绍了Redis集群的哈希槽分区算法及其环境搭建方法。哈希槽算法通过CRC16计算key的哈希值后取模16384,将数据均匀分配到槽位中,解决了搬运成本高和数据分配不均的问题。实际应用中,Redis会自动完成槽位分配和key搬运,建议集群分片数不超过1000。文章还详细讲解了基于Docker搭建9节点Redis集群的步骤,包括配置文件生成和容器创建,为读者提供了完整的集群部署方案。
2025-07-06 17:51:33
973
原创 《Redis》哨兵模式
Redis哨兵模式解决了主从复制中人工干预主节点故障恢复效率低下的问题。通过部署多个独立的哨兵进程监控Redis节点,当主节点故障时,哨兵会自动选举新主节点并通知客户端,实现高可用性。使用Docker可以方便地搭建分布式环境,通过docker-compose配置一主两从的Redis节点和三个哨兵节点。哨兵通过心跳检测判断节点状态,故障时自动进行主从切换。Docker容器通过端口映射实现网络通信,yml配置文件简化了多节点部署流程。这种方案既保证了高可用性,又避免了硬件资源浪费,是Redis分布式部署的理想选
2025-07-05 21:45:51
1087
1
原创 《Redis》主从复制
文章摘要: 本文探讨了分布式系统中的单点问题及其解决方案,重点介绍了Redis主从复制模式。单点问题会导致可用性和性能瓶颈,通过构建Redis集群可有效解决。主从复制模式允许从节点同步主节点数据,但只读不可写,提高了读操作的并发量和可用性。文中详细讲解了主从复制的配置方法、启动终止流程、拓扑结构及数据同步机制(全量复制和部分复制),并分析了复制过程中的关键参数如replid和offset。此外,还介绍了优化全量复制的"无硬盘模式"及部分复制的应用场景。主从复制是Redis分布式系统中的重
2025-07-04 21:47:32
920
1
原创 《Redis》事务
Redis的原子性与事务机制与MySQL有显著差异。Redis事务通过队列实现批量执行命令,不具备回滚机制、隔离性和一致性保证,仅确保命令连续执行。使用MULTI、EXEC、DISCARD等命令管理事务,WATCH命令通过乐观锁机制监控键值变化。Redis事务适用于简单场景如抢票系统,但功能弱于传统数据库事务,无法处理复杂的数据一致性问题,本质上是通过事务队列实现命令的批量执行。
2025-06-22 17:51:52
585
原创 《Redis》持久化
两种持久化策略的总结1. Redis 提供了两种持久化方案:RDB 和 AOF。2. RDB 视为内存的快照,产⽣的内容更为紧凑,占⽤空间较小,恢复时速度更快。但产⽣ RDB 的开销较大,不适合进⾏实时持久化,⼀般⽤于冷备和主从复制。3. AOF 视为对修改命令保存,在恢复时需要重放命令。并且有重写机制来定期压缩 AOF ⽂件。4. RDB 和 AOF 都使⽤ fork 创建⼦进程,利⽤ Linux 子进程拥有父进程内存快照的特点进行持久化,尽可能不影响主进程继续处理后续命令的处理。
2025-06-11 21:00:10
1340
2
原创 《Redis》Set类型
Redis的Set类型是一种无序且元素唯一的集合数据结构,支持多种操作命令。主要命令包括:SADD添加元素、SMEMBERS获取所有元素、SISMEMBER判断元素是否存在、SCARD获取元素个数、SPOP/SRANDMEMBER随机获取/删除元素、SMOVE移动元素、SREM删除元素等。Set还支持集合间操作:SINTER/SINTERSTORE求交集、SUNION/SUNIONSTORE求并集、SDIFF/SDIFFSTORE求差集。Set内部使用intset或hashtable编码存储。典型应用场景包
2025-06-06 17:34:20
1009
原创 【C++ - 仿mudou库one thread one loop式高并发服务器实现】
本文介绍了一个高并发服务器组件的设计与实现,采用多Reactor多线程模式,结合多I/O多路复用和线程池技术,充分利用CPU多核资源进行并发业务处理。项目分为服务器模块和协议模块,主要流程包括TcpServer对象的实例化、Acceptor对象的回调设置、BaseLoop的启动、Poller模块的IO事件监控、任务队列的执行等。文章还详细介绍了前置知识,如bind函数的使用、定时器任务和时间轮思想、正则表达式的应用等,特别是如何通过时间轮算法优化定时任务的执行效率,以及如何使用正则表达式解析HTTP请求。通
2025-05-17 15:31:46
1160
原创 【Redis——数据类型和内部编码和Redis使用单线程模型的分析】
总而言之,Redis提供的哈希表容器并不一定真的是真的哈希表,而是在特点的场景下,用别的容器去实现,为了保证时间复杂度符合承诺(就是为了高效)
2025-04-29 21:12:50
1215
原创 【MySQL访问】
这里我在连接时遇到了一个问题,在/usr/include/目录下,找不到mysql目录,意味着我想用的头文件无法找到,上网查了发现问题是没有安装mysql的开发包,所以去安装了mysql的开发包:就解决了这个问题。
2024-05-31 21:21:55
853
2
原创 【MySQL用户管理】
grant 权限列表 on 库.对象名 to ‘用户名’@‘登陆位置’ [identified by ‘密码’]create user ‘用户名’@‘登陆主机/ip’ identified by ‘密码’;set password for ‘用户名’@‘主机名’ = password(‘新密码’);revoke 权限列表 on 库.对象名 from ‘用户名’@‘登陆位置’;这条语句的本质,就是修改下面这个表中的加密string,让用户密码改变。此时在我的用户列表中,就出现了dzt这个用户。
2024-05-30 17:49:28
733
原创 【MySQL事务(下)(重点)】
在RR级别下的某个事务的对某条记录的第一次快照读会创建一个快照及Read View, 将当前系统活跃的其他事务记录起来此后在调用快照读的时候,还是使用的是同一个Read View,所以只要当前事务在其他事务提交更新之前使用过快照读,那么之后的快照读使用的都是同一个Read View,所以对之后的修改不可见;上面所提到的应不应该看到,指的是,应不应该出现在Read View视图里,这就像,假如我是大二学生,我应该要看到大四毕业学长的工作情况,但是当我大四的时候,我不可能也不应该看到大一的工作情况。
2024-05-28 19:52:54
727
2
原创 【MySQL事务(上)】
会话 事务 隔离 级别全局 事务 隔离 级别刚开始学,我的理解是:有很多条语句组成的,就是事务。但是,事务并不只是简单的sql语句的组合,还有一些特性。
2024-05-27 20:58:34
1254
原创 【MySQL索引】(重点)
第一个.frm文件就是表结构,第二个.myd文件,就是data数据,第三个.myi文件,就是index索引,所以,使用myisam存储引擎,就是将索引和数据分开存放。InnoDB的辅助索引如上图,除了主键索引,在用户建立的辅助索引中,也会构建一颗B+树,这棵B+树的叶子节点,不会存储数据,而是存储主键的key!一个表中,最多有一个主键索引,当然可以使符合主键 主键索引的效率高(主键不可重复) 创建主键索引的列,它的值不能为null,且不能重复。由于主键的存在,MySQL会根据主键的数据,内部自己进行排序。
2024-05-24 11:35:26
734
原创 【MySQL的内外连接】
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;(这里的and,也可以修改成where,并且建议使用where,逻辑更清晰)select 字段名 from 表名1 right join 表名2 on 连接条件。select 字段名 from 表名1 left join 表名2 on 连接条件。如果联合查询,左侧的表完全显示我们就说是左外连接。
2024-05-13 20:56:00
843
1
原创 【MySQL基本查询(上)】
mysql> insert into students(sn,name,qq) values(12222,‘温承翰’,‘224455’),(1231313,‘伯明翰’,‘22444441’),(12121,‘谢尔比’,‘23123131’);mysql> insert into students values(124,1222,‘许攸’,‘224455’),(125,1233,‘董卓’,‘22444441’),(126,1211,‘张良’,‘23123131’);
2024-05-09 20:46:06
617
1
原创 《MySQL数据类型》
说明:float表示的精度大约是7位。decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。建议:如果希望小数的精度高,推荐使用decimal。但是,当我修改到21845时,同样不可以。原因是:varchar(6),表示的是字符的使用上限是6,而不是一次固定分配6个字符大小的空间。当只使用1个字符的空间时,varchar实际上只会分配一个字符大小的空间。所以,就需要有1~3个字节位,来记录所使用的空间有多少。
2024-05-05 22:09:24
1007
原创 建个私人百度文库:Moredoc+cpolar让文档共享像发朋友圈一样简单
这篇文章介绍如何利用Moredoc开源文库系统与cpolar内网穿透工具搭建团队私有文档库。文章首先分析了小团队文档管理的痛点,指出商业平台收费高、本地共享不便等问题。随后详细讲解了Moredoc的功能特性,包括多格式文档预览、权限管理等核心功能,并通过Docker方式演示了本地部署步骤。为实现远程访问,文章指导安装配置cpolar内网穿透工具,生成公网地址,使异地成员也能便捷访问文档库。最后还介绍了如何配置固定域名实现长期稳定访问。这套方案解决了团队文档共享的"最后一公里"问题,无需购
2025-09-12 01:21:00
459
3
原创 Docker 缓存优化:通过 cpolar 内网穿透服务远程管理 Redis
Docker环境下Redis容器化部署与远程访问方案 本文介绍了在Ubuntu 22.04系统下使用Docker部署Redis容器,并通过cpolar实现安全远程访问的完整方案。主要内容包括: Docker环境安装配置 Redis镜像拉取与容器启动 本地连接测试(使用Redis Desktop Manager) 利用cpolar内网穿透实现公网访问Redis服务 该方案通过容器化部署确保环境一致性,结合cpolar的加密隧道技术,在无需公网IP的情况下实现安全远程管理,适用于开发测试和运维监控等场景。文中提
2025-09-09 17:47:20
740
1
原创 【笔试训练4】Fibonacci数列|单词搜索|杨辉三角
本文摘要: Fibonacci数列:通过迭代计算Fibonacci数列,找到与输入数n最近的斐波那契数,输出最小差值。代码使用三个变量a、b、c迭代生成数列并比较。 单词搜索:使用深度优先搜索(DFS)在二维字符数组中匹配目标单词。通过向量表示四个方向,标记已访问位置防止重复搜索,实现回溯算法。 杨辉三角:采用动态规划求解,构建dp表并使用递推公式dp[i][j]=dp[i-1][j]+dp[i-1][j-1],格式化输出三角形结构。
2025-05-28 15:18:01
485
原创 【笔试训练】简单写词|dd爱框框|除2!
本文介绍了三道编程题的解题思路和代码实现。第一题“简单写词”通过循环输入单词并判断首字母大小写,输出相应结果。第二题“dd爱框框”使用滑动窗口技术,通过维护窗口内的和来找到满足条件的最短子数组。第三题“除2!”利用大根堆处理偶数元素,通过多次除以2操作来达到目标。每道题都详细说明了思路和代码实现,帮助读者理解并掌握相关算法技巧。
2025-05-15 17:35:44
248
1
原创 【笔试训练】给一个数组构建二叉树|从前序遍历与中序遍历构建二叉树|二叉树中的最大路径和
本文介绍了三种构建二叉树的方法及其实现思路。首先,通过层序遍历构建二叉树,借助队列实现节点的逐层处理。其次,利用前序遍历和中序遍历的结果构建二叉树,通过递归划分左右子树区间。最后,讨论了二叉树中的最大路径和问题,通过后序遍历计算每个节点的最大贡献值,并更新全局最大路径和。这些方法展示了二叉树构建和遍历的常见技巧,适用于不同的应用场景。
2025-05-12 21:01:06
516
原创 【笔试训练2】牛牛的快递|最小花费爬楼梯|数组中两个字符串的最小距离
2.贪心,给两个变量prev1,prev2分别记录str1和str2出现时的下标,然后只需要遍历一次数组,每当遇到str1或者str2时都找一下prev1和prev2是否已经存在,如果存在,则更新。解题思路:float函数(向下取整),ceil函数(向上取整),这两个函数都是浮点数转化成整数时取证的不同情况。题目意思:这道题的意思就是在字符串数组strs中找出两个字符串str1和str2的最小距离,如果没有,则返回-1。1.状态表示:dp[i]:从起点开始,走到i位置时所需的最小花费为dp[i];
2025-05-07 17:42:04
491
原创 【笔试训练】数字统计|两个数组的交集|点击消除
思路:这道题我的思路是,先把两个数组的元素丢进哈希表中去重,然后遍历其中一个哈希表,判断当前元素是否在另一个哈希表中出现过即可找到不重复的公共元素。思路:遍历区间内所有数字,对每个数字进行模运算判断个位上的数是否为2,再进行除10运算(拿到下一位的数),然后继续判断个位上的数是否为2即可。2.当栈不为空,且栈顶元素 == 要入栈的元素时,将栈顶元素pop掉,然后继续判断下一个元素。时间复杂度:遍历两个数组,O(N)+O(M),遍历一次哈希表,O(S):S是哈希表的大小。1.当栈为空时,将第一个元素入栈。
2025-05-06 15:49:56
349
原创 【Redis】List类型
列表相当于一个数组或者顺序表,但是不是一个简单的数组,而是接近双端队列(deque)的结构。对于双端队列来说,头插头删和尾插尾删的效率都很高,时间复杂度是O(1).对于普通的数组来说,只有尾插尾删的效率高一点,但是头插和头删会涉及到内存的大量操作,效率不高。列表中的元素是有序的,这意味着可以通过索引下标获取某个元素或者某个范围的元素列表,例如要获取上图第 5 个元素,可以执⾏ lindex user:1:messages 4 或者倒数第 1 个元素,lindex。
2025-05-02 22:06:28
1114
原创 【Redis】Hash哈希
如果使用string(json)的类型来表示UserInfo(用户信息),万一只想获取某个用户的field,或者修改某个用户的field,就需要把用户整个json读出来,解析成对象,操作field,再把整个field重新写成json串的格式,再写回去。如果使用hash的方式来表示UserInfo,就可以使用field表示对象的每个属性(数据表的列)此时就可以非常方便地修改/获取任何一个属性的值了。• 哈希类型是稀疏的,⽽关系型数据库是完全结构化的,例如哈希类型每个键可以有不同的 field,⽽。
2025-05-02 15:31:06
1022
原创 【Redis】String详细介绍及其应用场景
这个新的医生没有给我看过病,这时候他打开电脑,问我姓名和身份证号(输入用户信息),登录他们医院的系统,就看到了我一周前上个医生做的各种信息记录,这时候他就了解我的情况了,然后就能给我对症下药了。不仅仅可以存储文本数据,还能存储整数,普通的文本字符串,JSON字符串,二进制数据(图片,视频,音频等),因为Redis单线程模型对于音视频来说,音视频的体量还是比较大的,由于希望操作比较快速,所以Redis限制了string类型最大的大小是512MB。获取key对应的value,如果key不存在,则返回nil。
2025-05-01 16:23:00
1421
原创 【滑动窗口】找到字符串中所有字母异位词| 找出字符串中第一个匹配项的下标
我的思路:先将p字符串排序,然后遍历s字符串,取出p.size()大小的子串,然后进行排序,对比两个字符串是否相等即可。解法:其实就是模拟实现C语言的strstr函数。之前的文章讲解过了,可以搜一下。
2025-05-01 13:05:54
322
原创 【滑动窗口】最大连续1的个数|将x减到0的最小操作数
滑动窗口就是在暴力求解的基础上,当cnt > sum - x时,不需要让right重新往回走到left位置,而是让left往后走,也就是让left位置的元素出窗口。由于right无需重新从left位置开始遍历,所以时间复杂度O(n).这道题转化成了找一段最大连续区间,该区间内的和为sum-x。三个关键点:1.最大的,2.连续区间,3.和为sum-x。找到当cnt == sum - x时,更新长度。先转变一下思路,将这道题换个思路。最后同样是返回n - len。时间复杂度O(n^2)时间复杂度O(n^2)
2025-04-29 15:47:20
339
原创 【滑动窗口】长度最小的子数组 | 无重复字符的最长子串
在上面暴力求解的算法基础上,可以发现,当sum >= target时,无需重新遍历,也无需重新计算sum的值,只需要用sum - num[left] ,再left++往后走,就相当于出窗口了,此时出窗口前更新len的长度。一个指针left固定最左边的位置,right指针从left的下一个位置往后遍历,给一个变量sum,统计[left,right]区间内元素的和(包含两个边界)。在第一个解法的基础上,将暴力解法升级成滑动窗口,遇到重复的字符时,不需要再重新开始遍历。就这样遍历完,就能更新出最长的无重复子串。
2025-04-28 15:57:17
510
原创 Linux服务器使用SyncTV打造简易远程同步在线共享观影平台
想象一下,当夜幕降临,你正蜷缩在沙发上准备独自享受一部经典电影。突然,一个念头闪过:要是能跟朋友们一起分享这份快乐该多好啊!别急,今天就来告诉你一个超酷的解决办法——在你的Linux服务器上部署SyncTV,并借助cpolar内网穿透工具,无论你在世界的哪个角落,都能与小伙伴们同步观影,还能实时互动吐槽。这不是科幻电影里的场景,而是实实在在可以实现的技术魔法!跟着我一起操作吧,让你的观影体验从此不再孤单。
2025-04-26 20:10:10
1020
2
原创 VMware ESXi 7.0本地部署与无需公网IP远程管理方案解析
今天,我们将介绍如何安装和配置VMware ESXi 7.0,并使用Cpolar工具实现远程访问和管理你的ESXi服务器。本地无需公网IP,也不用准备云服务那么麻烦。VMware ESXi是企业常用的虚拟化软件,性能稳定。随着远程办公的普及,如何安全高效地远程管理本地的ESXi服务器成为了一个问题。有了Cpolar工具,这个问题就能轻松解决。如果已经下载安装好了ESXi ,可以直接跳到步骤 2!【视频教程】Windows电脑本地部署ESXI 7.0虚拟机并实现远程访问和管理。
2025-04-26 20:09:36
1369
1
请问如何扩大整型的范围?
2022-11-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅