- 博客(31)
- 收藏
- 关注
原创 Redis实战(9) -- 底层设计与实现
Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。因为从系统中获取一次时间戳是一次系统调用,系统调用相对来说比较消耗时间与性能,作为单主线程的Redis来说,对其性能消耗比较大,所以说Redis会进行缓存,有一个定时任务进行执行每一毫秒更新一次时间缓存,key获取时间戳都是从缓存中拿。Redis将所有的数据放到了内存中,内存响应时长大约100纳秒,对于小数据包来说,Redis服务器可以处理8w-10w的qps,这就是单线程的极限,对于大部分人来说,单线程Redis足够用了。
2025-08-17 15:38:34
660
原创 Redis实战(8) -- 分布式锁Redission底层机制
看门狗机制是应对由于操作未执行完毕,但是锁快到期情况,因为人为不好判断当前操作需要多久执行,所以使用看门狗机制,实现守护线程自动判断。如果没有设置对应的锁检查时间,则默认是10s自动检查是否需要续期,而默认续期时间是30s。单节点故障:由于在主节点加锁,但是同步到从节点时候,主节点宕机,导致数据没有同步到从节点,从节点此时没有锁,所以会导致相关问题。由于redission的锁操作是需要原子性支持,例如加锁,解锁等,所以其底层实现是使用LUA脚本进行执行。1)检查锁是否存在,不存在则创建且设置对应过期时间。
2025-08-07 21:49:07
447
原创 Redis实战(7)-- 高级特性 Redis Stream数据结构与基础命令
【重点】每个消费组都有一个Stream 内唯一的名称,消费组不会自动创建,它需要单独的指令xgroup create进行创建,需要指定从 Stream 的某个消息 ID 开始消费,这个 ID 用来初始化last_delivered_id变量。让c1消费组中的consumer1消费者进行消费一条消息,">"表示从当前消费组的 last_delivered_id 后面开始读,每当消费者读取一条消息,last_delivered_id 变量就会前进。而使用*,进行设置对于的消息ID,则是表示系统默认生成。
2025-08-03 20:12:57
701
原创 Redis实战(6)-- 慢查询运用与理解
慢查询默认保存在服务器状态slowlog链表中,最大长度就是slowlog-max-len是列表的最大长度(默认128条),当慢查询日志列表被填满后,新的慢查询命令则会继续入队,队列中的第一条数据机会出列。增大慢查询列表可以减缓慢查询被剔除的可能,线上生产建议设置为1000以上。而慢查询通常只统计执行命令时间,所以慢查询不代表代码有待优化(可能是网络等原因),具体情况还需进行进一步进行分析。(2)慢查询是先进先出队列,而且Redis中存储有限,为了防止记录被丢弃,应该将对应记录持久化到其他存储中。
2025-08-02 14:48:13
257
原创 Redis实战(5)-- 高级数据结构 HyperLogLog
而此时插入另一个元素dgy,其值位 010000...0001,也被分到01桶,最高位出现1位置为12位,则比较最高位出现1位置,发现dgy字符串更高,则替换01桶中存储的数据,01桶中记录值改10为12.(可以看到,HyperLogLog内存占用量小得惊人,但是用如此小空间来估算如此巨大的数据,必然不是100%的正确,其中一定存在误差率。假设0是背面,1是正面:七次才到正面大概需要次数为2^7次(但是有误差,有可能1次就成功,也可能多于128次)。获取16384个桶中元素,后进行:桶1+桶2+。
2025-08-01 18:00:00
675
原创 Redis实战(4)-- BitMap结构与使用
第二题:因为每条URL平均64字节,所以可以转为固定64位长度数值,作为bitmap索引,在哪一位就标识哪个URL,这样只需要计算出对应的URL的64位长度数值即可依据HASH函数算出对应的bitmap中索引位,如果为1标识存在,为0标识不存在。第六题:可以进行黑名单校验,URL黑名单进行拦截这样的,可以使用BitMap实现,经过hash计算后对应标识位值为1则为黑名单拦截,需要进行磁盘精准校验,同时也要考虑哈希冲突的情况处理,0则为正常通过无需校验,可以有效避免无效IO。tmp[0]可以表示0-31。
2025-07-31 22:27:51
457
原创 Redis实战(3)-- 高级数据结构zset
有序集合相对于哈希、列表、集合来说会有一点点陌生,但既然叫有序集合,那么它和集合必然有着联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能,合理的利用有序集合,能帮助我们在实际开发中解决很多问题。有序集合中的元素不能重复,但是score可以重复,就和一个班里的同学学号不能重复,但是考试成绩可以相同。
2025-07-28 22:59:26
587
原创 Redis实战(2)----redis安装
在Redis的版本计划中,版本号第二位为奇数,为非稳定版本,如2.7、2.9、3.1;一般来说当前奇数版本是下一个稳定版本的开发版本,如2.9是3.0的开发版本。Redis编译完成后,会生成几个可执行文件,这些文件各有各的作用,我们现在先简单了解下,后面的课程会陆续说到和使用这些可执行文件。当前的Redis版本的是64位的6.2.7,默认端口是6379。因为Redis的安装一般来说对于系统依赖很少,只依赖了Linux系统基本的类库,所以安装很少出问题。配置文件是我们启动的最多的模式,配置文件安装目录中有。
2025-06-28 09:28:53
527
原创 Redis实战(1)----基本命令与使用
我们要首先理解一点,我们把Redis称为KV数据库,键值对数据库,那就可以把Redis内部的存储视为存在着一个巨大的Map,对Map的操作无非就是get和put,然后通过key操作这个key所对应的value,而这个value的类型可以多种多样,也就是Redis为我们提供的那些数据结构,比如字符串(String)、哈希(Hash)等等。】ttl和pttl都可以查询键剩余过期时间,但是pttl的精度更高,可以达到毫秒级,且会返回三种值:有值则是键剩余过期时间,-1为未设置过期时间,-2表示键不存在。
2025-06-27 16:11:58
252
原创 Netty知识点(1):实现UDP单播
(3)由于UDP是不保证传输完整以及安全,或者正确,重点在意效率,不需要关注接收端是否有收到报文,所以接收端能否能收到数据,是依据接收是否有回复应答报文进行判断,所以设置等待时间进行接收(阻塞),等待时间过后关闭信道,不论是否有应答。注意应答端消息处理类,由于是UDP通信,那么要进行应答回去,则需要源端口号进行通信,所以在回复消息时候需要调用packet.sender()进行获取源发送端口号,以便回复消息。由于UDP无接受端这一说,没有建立连接,所以是发送端和接收端关系,是平等的。
2025-05-15 08:29:38
214
原创 RPC远程调用服务框架实现与使用
RPC远程调用服务框架是一种用于实现分布式系统中不同节点之间进行通信和远程过程调用的技术框架。其允许程序在不同的地址空间(不同服务器)中调用远程函数或方法,就像在本地调用一样,而无需了解底层的网络细节和通信机制。前置条件(可能存在的坑):在虚拟机服务器中配置相关zookeeper,且保证可以启动,其中zookeeper可能存在连接不上,注意可能是防火墙问题也可能是telnet未开问题。其zookeeper与相关RMI结合其实就是二者代码结合。
2025-05-14 09:07:35
371
原创 【spring项目坑】启动主类失败,找不到主类
解决办法:确认该类是否成功编译并存在于 target/classes(Maven)或 build/classes(Gradle)目录中。3)检查 Main class 是否为 com.action.business.ActionBusinessApplication。如果不在就进行maven的clean操作,然后complie进行重构,再次检查target目录看是否有对应启动类。4)确认 Module 选择的是包含该类的模块。1)点击 IDEA 右上角的运行配置下拉菜单。(3)在IDEA中运行是配置错误。
2025-04-24 09:38:53
365
原创 【函数式编程】Lambda表达式基本概念与使用方法介绍
但是注意,在使用lambda表达式时候仅仅是将相关接口函数进行从重写,但是并没有对其进行调用赋值,所以真正调用方法需要在进行lambda函数重写后进行。执行流程:实现接口,重写接口方法,将对应字节码写出,再创建字节码或者子类实例,再赋值给函数如Consumer函数,创建实例,就实现具体函数体。,编译器自行推断【因为当前函数是依据一个接口进行工作,所以接口中是有相关的返回类型等,所以可以进行自行推断,这个接口叫为函数式接口】抽象方法只能有一个,但是实际可以在接口中,接口中函数进行重写,本质也是一个函数。
2025-04-19 16:25:42
308
原创 【项目常用实战】(一)项目中字符串操作,以及字符串工具类StringUtils使用
这是一个java中实际项目下字符串相关操作以及字符串工具类的知识点总结,包含样例与代码
2025-04-13 13:26:44
394
原创 【springcloud踩坑】出现未找到主类,无法启动问题
如果还是无法解决可能存在java环境变量等配置错误 ,如配置的java版本不符合等。(1)首先查看当前application启动类是否在当前所需覆盖文件下。如果在idea中进行,则使用clear和comple进行重新打包。
2025-04-07 09:43:23
299
原创 【三高微服务踩坑篇】Load balancer does not contain an instance for the service shop-products
这个是我注册对应的服务名称,实际nacos中对应名称是这个。
2025-04-03 16:07:12
344
原创 【微服务三高项目:报错记录】测试接口时候,出现报错Error creating bean with name 。。。
(3)可能存在目标类没有编译到target中,可以先进行maven依赖清除(clean),后再重新构建(compile)(1)springboot版本与springcloud版本不相匹配,导致无法加载。(2)查看是否是相关mybatis中配置,或者所写的mapper层的xml中对应数据不太正确。尤其是重点检查mapper引用路径与实际设置路径是否相同。重点检查这个报错最后一个问题!
2025-04-02 11:51:15
348
原创 【Lua基础知识】Lua基础应用知识
注意:如果一个对象为nil,那么使用type(变量)得到的是一个字符串’nil’而不是nil这个类型,所以 type(变量)==nil 答案是 false。Print(k..”-”..v) //其中两个点’..‘相当于’+’,用于连接字符串或者变量。Table1 = {key1=”value1”,key2=”value2”} //table定义。For k,v in paris(table1) do //table类型变量的遍历。A=nil //即可销毁一个变量。
2025-03-31 23:22:23
205
原创 【Nginx高可用】使用keepalived实现基础主从服务器
如何实现高可用,我们就要先了解高可用是什么?实现高可用,目的就是为了让我们能够在主服务器等服务器宕机时候,我们仍旧可以进行访问,最常见例子就是百度,能够做到99.99%的高可用性,即在100个工作单位时间内有效时间是99.99个。
2025-03-29 21:49:54
344
原创 【Nginx配置】如何做到虚拟机Nginx与本地服务做NAT端口转发,以及虚拟机内部相关端口映射
(1)首先我们进行nginx中http块的server编写,配置所监听的服务名称www.cpf.com,与监听的本地虚拟机端口80,映射到虚拟机中的具体服务端口localhost:8080。(2)我们要在VMware中虚拟网络进行配置,做端口转发,将我们本地所访问的端口2080与虚拟机中80端口做对应,以达到我们本地浏览器请求2080端口时候,其请求转发到虚拟机中80端口,以达到对虚拟机内部某个端口的访问。想做到能让Nginx进行监听端口访问活动并跳转,首先需要进行Nginx的配置文件的修改。
2025-03-27 21:08:31
527
原创 【Nginx安装踩坑】Nginx已经安装完毕,也做了NAT端口转发,但是本地无法访问
我遇到这个问题是因为防火墙没有关闭,可以使用systemctl status firewalld进行查看当前虚拟机防火墙是否在运行。使用systemctl stop firewalld,当再次查看变为dead状态即可。
2025-03-26 21:34:28
243
原创 【安装篇】Nginx在centos-7上安装以及使用
进行NAT设置后添加具体端口转发,后即可使用本地访问虚拟机nginx。后进行相对应的nginx网络配置,以实现NAT端口转发。进入虚拟机网络配置页面,我是VMware。安装完成后,进行相应的nginx配置。完成上述步骤后便可进行安装nginx。首先检查当前虚拟机是否安装yum。
2025-03-26 21:30:06
243
原创 【docker安装踩坑】出现mysql镜像安装,但是无法启动容器问题
使用docker ps查看当前容器启动,会发现其已经退出,处于exited状态,启动后依旧自动退出。在docker run时额外加上参数 --privileged问题解决,官网的解释是给容器额外的权限,看来还是权限不足的问题引起的。后发现docker ps时候,mysql镜像运行了。后重新进行启动mysql的容器。
2025-03-26 20:47:14
217
原创 【虚拟机踩坑】突然发现虚拟机重启后链接不上网络,ping 不通过8.8.8.8,但是网络配置完好,解决如下
我的问题是虚拟机网络服务未开启导致虚拟机联不通网络,解决办法将VM NAT SERVICE开启即可,如果需要自动分配ip还需要将VMnetDHCP开启。
2025-03-24 14:41:17
527
原创 【java项目坑】seata 遇到service.vgroupMapping.default_tx_group configuration item is required问题
在整体项目进行测试部署时候,发现问题出现。定义后如下,即可解决问题。
2025-03-18 19:23:29
1665
原创 JAVA基础问题、面试题(7) Spring常见问题(1)
面向切面编程(AOP)是一种编程范式,旨在通过将横切关注点(例如日志记录、事务管理、安全性等)与业务逻辑分离来提高代码的模块化。AOP是OOP(面向对象编程)的一个补充,
2024-11-02 00:21:07
672
原创 JAVA基础问题,面试题(6)
1.一般队列只能保证作为一个有限长度的缓冲区,如果超出缓冲长度,就无法保留当前任务,阻塞队列通过阻塞可以保留住当时想要继续入队的任务。阻塞队列可以保证任务队列中没有任务时候阻塞获取任务的线程,使得线程进入wait状态,释放cpu资源。有阻塞队列技术可以使得当前无任务执行的线程自动进入阻塞状态,而不需要程序员手动调用wait或者sleep等控制线程休眠阻塞队列自带阻塞和唤醒功能,不需要额外处理,无任务执行时候,线程池利用阻塞队列的take方法挂起,从而维持核心线程存活,不至于一直占用cpu资源。2.
2024-10-29 23:39:12
1228
原创 23个设计模式:单例模式
单例模式的核心是类内部实现对自身实例的唯一性和对这个实例的全局访问。通常,单例类会将其构造函数设为私有,防止外部实例化,且提供一个静态方法或属性作为全局访问点。当需要使用时候才进行实例化。(相对于饿汉式可以节约节约内存,提升加载速度,同时也要进行线程安全约束)在类变量创建时候便实例化。
2024-10-24 23:32:10
163
原创 JAVA基础,面试题(3)
JDK自带三个类加载器:bootstrap ClassLoader,ExtClassLoader,AppClassLoader。(1)BootstrapClassLoader(顶层加载器)是ExtClassLoader的父类加载器,默认负责加载%JAVA——HOME%lib下的jar包和class文件。(2)ExtClassLoader(扩展类加载器)是AppClassLoader的父类加载器,负责加载%JAVA_HOME%lib/ext文件夹下的jar包和class类。(3)AppClassLoader
2024-10-19 00:43:02
1658
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅