- 博客(60)
- 收藏
- 关注
原创 redis的事务,以及watch的原理
为什么说是弱化的呢?当我们要和朋友去吃烧烤的时候,由于我们先到了,我们就跟老板娘说我们先点一些菜,但是不着急烤,等朋友都来了,他们再点一个菜,然后再一起烤,这里我们先点的菜就像当于事务的前几个指令,redis服务器还不会真正执行这些指令,也就是老板还不去烤这些菜,直到我们的朋友到到齐了,他们又接着点了一些菜,点菜结束之后,我们就可以告诉老板娘,我们点菜完了,开始烤吧,这里就相当于输入执行exec,告诉服务器我们这个事务的指令都输入完了,所有的指令都打包成一个事务了,你现在开始执行吧。那锁冲突指的是什么呢?
2025-10-18 12:43:53
549
原创 谈谈redis的持久化
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!说到redis的持久化,大家可能会想到mysql四个特性中的持久性,mysql的四个特性:原子性,一致性,持久性和隔离性,其实持久性就是持久化,说的就是要把数据存到硬盘中以此来实现数据的持久化存储;
2025-10-16 22:26:24
834
原创 JavaSpring项目之连接,并使用redis
上一篇我们讲了如何安装和下载Jedis,以及如何在Java的maven项目中使用Jedis去操作我们的redis,用法其实是很简单的,语法和redis的几乎已一模一样,可以说Jedis就是redis的再次副本也不为过;但是今天要分享的就有所不也一样了,但是只要掌握了几个重要的点,也是很简单的;
2025-10-09 22:50:58
948
原创 使用Java连接redis以及开放redis端口的问题
我们redis是安装在云服务器上的,要在本地访问到,就得开启云服务器的6379端口,这样我们就可以通过云服务器的外网IP访问到redis服务器,但是开启这个端口,就相当于把redis暴露在网络中,任何一个人都可以通过云服务器的ip去访问到你的redis服务器,如何redis存的数据相当重要,那么你的数据就有可能被人剽窃,如果是被对手公司剽窃了,那你就不是仅仅丢掉年终奖这么简单了,所以这种直接开放端口肯定是行不通的。Jedis是一个客户端,也是一个依赖,我们要引入一个依赖,可以再maven中央仓库进行下载。
2025-10-05 21:26:21
688
原创 redis-zset数据类型的常见指令(sorted set)
而我今天要说的是zset集合,set是无序的,zset是有序的,那zset是根据什么来排序的,在设计的时候就给zset的每一个元素member绑定了一个score分数,每一个member都有一个score,每一个score也都有一个member,可以通过member找到对应的score,也可以通过score找到对应的member,听起来像是key-value,但不是key-value,如果是key-value,通过key可以找到value,但是通过value,却不能找到key;为什么说是下标的呢?
2025-10-04 18:26:45
888
原创 redis的set集合的编码方式以及应用场景
具体我们可以来看几张图,先解释两个概念,PV指的是page view,就是一个页面被访问的次数,一个用户可以访问很多次,有时候我们可能只需要访问量,但是有时候我们就需要统计有多少个用户访问了,这时候就可以使用UV了,UV指的是user view,就是有多少个不同的用户访问,利用的正好就是set的去重效果,如果当前第一次访问,UV存的数字就+1,PV+1,如果当前用户不是第一次访问,那就只是PV+1,这样就可以很好的统计访问量,还可以对各个时间段的访问量做统计分析结果。1.用set来存储用户的“标签”
2025-09-23 23:33:11
365
原创 redis的set集合的常规使用
redis还提供的一个指令可以把交集存到一个key里面,比如还是keyA存的 1 2 3 4,keyB存的是3 4 5 6,sinterstore destination keyA keyB,执行的结果就是destination中的元素就是 3 4,返回值是交集的个数,keyA 和keyB的顺序是可以交换的,而且并不局限于两个key求交集,可以是多个,时间复杂是O(N*M),N和M分别指的是所有key中元素最多和最小的两个长度的乘积;返回值就是成功插入的元素的个数,为什么是成功的个数呢?
2025-09-23 21:08:24
385
原创 redis-list的基本介绍
但是值得注意的这个start和end可以是负数,也可以是正数,而且redis会尽可能的返回正确的一个区间的所有元素,比如是【0 -1】就是返回所有的的元素,如果是[0,100]的话要看你的list的长度是多少,如果长度>101 ,那就是返回前101个元素,如果长度小于101,比如只有10个,那么redis不会报错,而是返回全部的这个10个元素,因为redis认为你并没有101个元素,只有10个元素,那么我就给你返回,这就是说为什么redis会尽快的返回一个正确的;返回值为list的新长度;
2025-09-18 23:49:19
583
原创 redis-hash的基本介绍
一样是有三个关键词:key,field,value,key的作用就相当于hash表的名字,是唯一的,redis的key名字都是唯一的,这里也不例外,目的就是为了区分不同的键值对;这几个指令也要慎重操作,主要就是怕hash中包含的键值对非常多,一下子就返回回来那么多,可能就会造成redis卡顿,也是很严重的一件事,平常自己练习没事,因为键值对也不会有很多,造成卡顿影响也不多,最多只是影响你一个人,但是一旦在公司的生产环境上输入这个指令,就看会造成卡顿,可能会照成很严重的影响,也是一天一个失去年终的小技巧。
2025-09-13 00:37:37
729
原创 Redis-String的基本介绍
我们都知道redis存储的是键值对,键一般都是字符串,但是值就有很多类型了,比如:string,list,hash,set,zset等等,今天我要分享的是string相关的一些语法以及基本使用,最后会介绍string的一些主要的应用场景,以后也会慢慢分享其他的数据类型的用法,本人才疏学浅,想要真正的了解redis相关的知识可以前往redis官方。
2025-09-11 01:15:17
874
原创 定时器的实现原理
我们都知道优先级队列可以根据比较器的不同来实现不同的优先级队列,可以根据时间的先后,值的大小等等顺序来实现不同顺序的优先级,基本可以分为两类,大根堆和小根堆,大根堆就是堆顶的值是最大的,小根堆就是堆顶的指是最小的,不过堆的排序是可以改变,重新排序的方法就可以根据你想要的将队列的元素进行排序,你可以根据字典序,可以根据大小,根据你自己想要的重写方法即可;所箭头所代表的就是当前检查的是那个时间片的链表上的任务,当箭头走到这个位置之后就会去检查上面的任务是否到了过期时间,如果到了就会去执行该任务;
2025-09-09 20:51:38
424
原创 Redis单线程模型为什么快?
其实redis服务器是处理得过来的,虽然每一个客户端都分配一个socket,但是不是每一个客户端都每时每刻跟服务器保持通讯的,有可能连接一分钟,实际通讯只有100ms,那么其他的时刻其他客户端就可以和服务器进行通讯,通过这样的机制就避免了一个socket分配一个线程的开销,一个线程的开销不大,但是多个socket,多个线程开销就很大了;线程竞争的开销是很大的,涉及到锁的创建,锁的竞争,锁的释放等等,单线程模式避免了这样的竞争开销了,所以会更快;1、redis操作的是内存的,而mysql操作的是硬盘。
2025-09-09 18:55:02
730
原创 Redis的Key的过期策略
我们都知道Redis是单线程的,程序内部会一直循环检查当前的任务的是什么,然后去执行,执行完一个任务,再去执行下一个任务,如果其中一个任务的时间消耗太多,就会导致后面的任务全都被影响到了,就像堵车一样,为什么会堵车,就是因为一辆车慢了,导致后面的车也慢了,一辆影响一辆,就导致了堵车,所以定期删除定的时间要明确,检查要快。惰性删除就是说Redis不去主动检查,不去删除,只有等到别人要访问这个数据的时候,会先去检查这个数据是不是过期了,如果是过期了,就删除掉这个数据,然后再响应。
2025-04-14 19:37:14
291
原创 Redis几个基本的全局指令
我们都知道Redis存的内容都是键值对,key是String,value有很多类型,像string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合).....,这些结构是比较常见的,还有其他的类型,可以前往官方网站查看。
2025-04-13 19:08:17
620
原创 福运抽抽乐-抽奖项目的测试报告
测试结果显示所有请求都成功通过,没有失败或错误。平均响应时间为492.48毫秒,用户体验较好(APDEX值较高)。吞吐量和事务数较高,表明系统性能良好。网络数据传输量较大,接收和发送的数据量都较高。总体来看,系统在本次测试中表现良好,没有明显性能瓶颈或错误。
2025-03-19 13:49:51
844
原创 云服务器“抢”本地消息队列:一场开发中的乌龙事件
这次问题虽然最终得到了解决,但也给我带来了深刻的教训。在本地开发时,我们往往只关注本地环境的配置和代码逻辑,很容易忽略云服务器上可能存在的冲突。为了避免类似问题再次发生,我总结了以下几点经验:1. 明确环境差异:在本地开发时,一定要清楚本地环境和云服务器环境之间的差异,尤其是在配置方面。如果两者使用了相同的资源(如消息队列、数据库等),很容易出现冲突。2. 检查运行实例:在本地开发时,最好确认云服务器上的项目实例是否在运行。如果不需要,及时停止它们,避免不必要的干扰。
2025-03-19 00:43:26
306
原创 墨香阁-测试报告
1、墨香阁-操作简单的基于Spring前后端分离的项目,同时使用MySQL数据库来进行数据存储,并对项目进行测试,并完成部署上线,前端由四个页面组成:登录页面,注册页面,文章列表页,文章详情页,文章编辑(添加)页,个人中心,发送私信,文章回复模块等等,通过以上实现一个操作简单,安全可靠的,便于交流,分享的论坛。
2025-03-15 21:27:59
1107
原创 项目-个人博客测试报告
1、个人博客系统是一个操作简单的基于Spring前后端分离的项目,同时使用MySQL数据库来进行数据存储,并对项目进行测试,并完成部署上线,前端由四个页面组成:登录页面,博客列表页,博客详情页以及博客编辑(添加)页,通过以上四个页面实现一个简单的个人博客系统,在这个页面你可以记录自己学习的知识,所见所闻等等分享。2、列表页面:成功登录之后,会跳转到列表页,列表每页展示4篇博客,可以对博客列表进行翻页,以查看不同的博客,还可以对博客进行查看全文,对自己的博客可以进行在此编辑或者删除,
2025-03-14 22:34:22
831
原创 MySQL_事务的四大特性
有了上面的两条规则,我们就不能在写的时候进行读,在读的时候进行写,但是如果事务A修改数据之后提交,事务B在读取数据,事务C不对B读取的数据进行修改,而是对对应的表进行增加/删除数据,这就会导致B读的数据集不一样,要先说明的是这里读的数据集原有的是一致的,就是条数多了或者少了,就是幻读问题,可以认为是不可重复读问题的特殊情况。对于幻读问题,数据库的解决方案,就是串行化支持执行事务,也就是一个事务接着一个事务执行,这时候数据库的准确率是最高的,效率是最低的,隔离性是最高的。
2025-02-20 16:02:21
869
原创 Linux的基础指令和环境部署,项目部署实战(下)
dev指的是开发环境的配置,test指的是线上环境的配置,固定格式,只有后面的字母可以修改,在不同的配置文件写不同的内容(下面只是将数据库的配置作为展示,如果自己还有其他配置,像:日志的存储路径,图片的存取路径都是要按这种方式修改的。注意: 此处安装的是OpenJDK, OpenJDK是一个开源版本的 JDK, 和 Oracle 官方的 JDK 略有差别. 此处我们就使用 OpenJDK 即可. 安装 Oracle JDK 比较麻烦.实际工作中,开发环境,测试环境和线上环境的配置是不一样的。
2025-02-18 23:38:41
1258
原创 Linxu的基础指令和环境部署,项目部署实战(上)
上一篇通过这一篇我们能够了解到如何购买云服务器,以及通过终端软件XShell去连接我们的我们服务器,接下来就让我们一起来理解一下操作Linux的一些基础指令,然后我们就会带大家部署一个项目到服务器上,部署完成之后,我们就可以让自己的朋友访问你的网站。
2025-02-18 23:38:39
813
原创 Ubuntu 的RabbitMQ安装
RabbitMQ已经包含在标准的Ubuntu仓库中, 然而,包含的版本通常比最新的RabbitMQ发行版落后很多,可能提供的RabbitMQ版本已经不支持. RabbitMQ团队制作了自己的软件包,并使用Cloudsmith进行分发具体操作可以参考: Installing on Debian and Ubuntu | RabbitMQ由于该种方法安装比较复杂, 学习阶段, 咱们。
2025-02-18 18:25:57
2421
3
原创 Redis的简单使用
Redis服务器安装在云服务器上,而我们编写的代码实在本地主机的。要想让本地机器能够访问到Redis,需要把Redis的端口通过云服务器的后台页面的“防护墙”/“安全组”放开,但是这会使得端口转发的方式,直接把服务器的redis端口映射到本地。# 连接空闲超过N(s秒、ms毫秒)后关闭,0为禁用,这里配置值和tcp-keepalive值一致。也就说如果你要在本地使用redis,就要启动云服务器,并且确保redis服务器启动;# 连接用完时,新的请求等待时间(s秒、ms毫秒),超过该时间抛出异常。
2025-02-18 17:25:23
1103
原创 浅介绍redis特性
以下纯属于个人学习见解,不是官方知识,仅供参考,有错误的地方欢迎评论区指出Redis是一个在内存在存储数据的中间件(中间件:与实际业务无关的服务,如数据库,redis,消息队列等等)。Redis的作用主要有两方面,一方面是是作为数据库,另一方面是作为数据缓存。根据Redis的特性,使得它能够在分布式系统中大展拳脚。
2025-02-15 22:29:25
986
原创 浅谈分布式系统
前面讲数据库分离的时候应对的高的请求量,但是我们不仅仅要处理高的请求量,还要关注数据量,一个请求涉及到数据量可能有很多,很多的的请求涉及到数据量就更不可计数了,一个数据库的容量可以有几十TB,但是也有不够的情况,例如现在很活的短视频,数据库存的就是视频数据,这就不是简简单单的存一张照片,一个变量那么少了,所以但一个数据库服务器不够存的就是,我们就会给数据库的每一个表都安排一个数据库服务器,可以视情况再分为主数据库和从数据库,但请求涉及到哪个表就去访问哪个数据库就可以了,这就是数据库分库;
2025-02-13 23:09:06
785
原创 lombok插件不生效
无论你是修改lombok版本,勾线注释生效,还是javac编译器.....都发现还是发现不了方法,以上的勾选都先确保对了,这个方法才是适合的。我的是jdk17,lombok用的最新的1.18.36。
2024-12-23 11:26:47
1127
6
原创 HTTPS的加密流程
HTTP协议采用的是明文传输,所以就存在数据被截取和修改的危险,比较有名的一件事就是2015的运营商劫持事件,所以针对HTTP协议传输的数据进行加密是非常有必要的,H,可以说HTTPS=HTTP+SSL;了解加密过程之前需要了解几个概念:明文,密文,密钥,对称加密,非对称加密:要传输的数据;:对明文进行加密就可以得到密文;:对明文进行加密和解密的重要道具/方法,密钥是非常安全,没有解密的密钥破解是非常大的,所以一般黑客不回去破解密钥,而是想法设法劫取到密钥。:加密,解密是同一个密钥。
2024-09-13 00:45:53
1569
原创 HTTP 协议的基本格式
HTTP协议("超文本传输协议"),是一个被广泛使用应用层协议,自1991年正式发布HTTP协议以来,HTTP协议就一直在更新,目前已经更新到3.0版本,但是目前主流的依旧是1.1版本,但依旧是一个最主流使用的应用层协议。HTTP协议一般是基于TCP协议实现的,当时知道HTTP3.0开始支持UDP协议实现传输,使用TCP相比较UDP虽然安全,但是速度却相差很多,从3.0版本开始支持UDP协议,为了的实现更快的传输,并且该版本在应用层实现了可靠传输的机制,保证了高速传输的同时,也保证可靠传输。
2024-09-12 17:00:00
2005
1
原创 Fiddle的安装与基础使用------一个非常好用且正规的抓包工具
点开可以看到响应的详情(点击Raw可以查看报文格式),有的响应转码过的,点击那一行Response body is encoded.Click to decode(黄色的),就可以转码成字符。Fiddle运行的过程中,只要你访问网络,像访问网站之类的,就可以在左边看到一个一个HTTP请求/响应,都可以点开看看详情。以上跟我一样设置,确认无误之后就点击OK,注意会跳出一个让你确认是否要按照协议,一定要点击是,不然你就得卸载,重新安装。,可以看到请求的详情(点击Raw可以查看报文格式)
2024-09-11 22:55:48
430
原创 CSS选择器
本篇文章只是为学习JS,简单的了解一下CSS选择器,做一下日常总结在head中构建一个style标签写在style标签中一个网页有什么内容是html要做的事情,这些内容标签要怎么放置,长什么样子,就是CSS要做的事情,简单来说就是给页面做规划,选择器就是为了能够方便选择这些标签,对标签进行操作。(放了方便阅读,更好看,算是行业规范)这里只用内部样式演示,方便演示。
2024-09-06 21:30:18
1021
原创 传输层协议---TCP协议
说到这里,已经接近末尾了,回头再看TCP协议段格式还有一些没有谈论到,这里我就粗略谈一下,因为对我们来说也不是很重要,想仔细了解的话就去查看RFC-TCP标准文档,是官方的,更详细。标志位:URG报文和16位紧急指针是控制TCP自身工作特殊机制的;标志位:PUH报文,意思是推的试意思,催促对方尽快给自己的一个回复。
2024-09-03 00:00:17
987
1
原创 传输层协议-UDP数据报
数据报的记录方式无非就是光信号或者电信号或者电磁波,无论是哪种传输方式,都有可能在传输的过程收到外界的影响导致数据改变,发生错误,最常见的就是发生的比特翻转,0变成1,1变成0,高电平变成低电平,低电平变成高电平,检验和在数据传输之前通过某种计算方法,用载荷数据参与运算,等待数据到达目的端口时,在重新以这种方式计算,将再次计算获得校验和与报头的校验和比较,如果不同,证明传输过程数据发生改变,反之成立;无论是发生前计算的校验和还是接收到计算的校验和,我们都不关心校验和的具体数值,只关心前后校验和是否相同;
2024-08-30 00:34:29
1251
原创 总结Java文件操作
根据查看创建的文件可以看到,只能创建普通文件,不能创建文件夹,已经存在相同的文件,会返回一个false;查看我们的硬盘,我们可以发现文件在硬盘上的存储结构是树型的存储结构,文件夹里可以由文件夹和文件,文件夹里又可以继续嵌套文件和文件夹,不难发现是一个树型结构,n叉树;构造方法中最常用的第一个,最直接明了,可以是绝对路径也可以是相对路径,如果是相对路径,你要明确自己的当前目录(工作目录);新建文件,删除文件,修改文件名字,查找文件.....,只是介绍我认为需要注意的,简单的不做多赘述;文件系统为我们提供了。
2024-08-23 11:55:32
915
原创 文件---IO
文件IO实际就是针对文件内容进行操作,包括打开,读取/写入,关闭文件;I就是Input,O就是Output;针对文件IO,就要说要“流”(stream)这个概念了;说要流,我们就会想到水流,源源不断的水流,我们要接100ml的水,可以一次性接完,也可以两次接完,一次接50ml,还有很多种接法;对于要读取100字节的数据,你可以选择一次性接100字节,也可以分两次,一次接50字节;这与接水非常相似,也可以叫文件流;和;
2024-08-23 11:54:52
1175
原创 总结HashMap, HashTable, ConcurrentHashMap 之间的区别
ConcurrentHashMap还对数据进行了优化,由原来的数组+链表变成数组+链表/红黑树。但链表的数据个数超过8个,就会把链表变成红黑树,进一步提高效率;
2024-08-17 18:21:30
441
原创 synchronized
由于两个线程的方法竞争的是同意一把锁(一样的标志对象),所以无论哪个线程先执行,只有另一个线程synchronized代码块完全执行完,另一个线程获取到锁才能继续执行;synchronized是一个保证线程安全的关键字,常用来修饰方法和代码块,确保同一个时刻只有一个线程被修饰的代码在执行,防止数据被多个线程获取修改带来的线程不安全;由于代码中的两个方法,锁的都是调用该方法的对象,所以同一个线程同一个时刻只能执行一个方法,称之为同步方法。如果由其他线程的锁竞争,就会取消偏向锁状态,进入轻量级锁;
2024-08-16 21:41:46
895
原创 锁策略,CAS和synchronized的锁优化
某个线程没有锁的是时候就是一个无锁的状态,当这个线程获取到synchnorized时会变成偏向锁,但是不会真正的加锁,只是这个锁会记录目前是哪个线程获取到这个锁,只是做一个标记(不会产生任何的开销,非常快);指的是所有等待线程获取锁的机会公平与否,如果是按照先来回到的顺序,那么这个锁就是公平锁,如果等待的线程获取锁的概率是均等的,这个锁就是不公平锁,这是由以前发明锁的大佬定义的,如果另一个时间线定义的是概率均等是公平锁,就又是另一个说法;指的是锁的粒度,这个锁要完成的任务越多,代码量越多,粒度就越大;
2024-07-13 15:43:34
961
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅