- 博客(15)
- 收藏
- 关注
原创 [Redis详解]----数据过期策略和数据淘汰策略
数据淘汰策略:淘汰易失数据(具有过期时间的数据) volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-lfu(least frequently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑
2023-12-23 23:14:21
401
1
原创 [Redis详解]----双写一致性----延时双删就是个笑话
在上一篇文章里,我们介绍了Redis持久化的两种方式,持久化能确保Redis中的数据存到磁盘中的一致性,那把磁盘的数据修改之后又如何保证Redis中的数据同步修改呢?这就是今天的题,Redis双写一致性。延迟双删第一次删除是为什么?
2023-12-23 21:31:16
3213
1
原创 [Redis详解]----持久化
我们知道Redis是一种基于内存的非关系型数据库,由于内存属于临时存储,断电数据就没了,所以需要把Redis中的数据记录到长期存储设备中(例如硬盘),而这一过程被称为数据持久化。Redis的数据持久化一共有两种方式 :RDB和AOF,默认开启的是RDB,两者可以同时开启。
2023-12-22 18:27:44
536
原创 [Redis详解]----缓存雪崩
缓存雪崩是指缓存中的数据大量同时过期,导致缓存击穿,从而增加了数据库的负载。这通常是由于缓存的过期策略或者数据的更新频率不合理导致的。当缓存过期的频率很高时,缓存中大量的数据会同时失去效验,请求就会打到数据库上,这样会导致数据库压力瞬间增大,甚至会导致数据库崩溃。
2023-12-22 17:54:15
379
原创 [Redis详解]----缓存击穿
缓存击穿是指当一个Key的缓存即将过期或者已经过期时,大量的请求同时访问该Key,由于缓存中不存在该Key,所有请求都会去后端数据源获取数据,导致后端数据源压力瞬间增大,甚至崩溃。缓存击穿通常发生在缓存和后端数据源的过期时间相差不大的情况下,因为这样会导致大量的请求同时访问后端数据源.注:有的朋友不能理解为什么刚好一个缓存过期的时候就很多请求进来,其实是这个数据一直都有很多请求,例如网站的首页,热点数据等等.
2023-12-21 16:47:11
499
1
原创 [Redis详解]----缓存穿透
Redis缓存穿透是指当一个非命中的Key(即缓存中不存在的Key)被频繁地查询时,由于缓存中不存在该Key,每次查询都会直接访问后端数据源,从而导致后端数据源压力大增,甚至可能导致服务不可用。这种情况通常发生在缓存中存在大量无效或错误的Key时,这些Key不会和真实数据匹配,因此在查询时会直接访问后端数据源。攻击者可以利用这一点,短时间内向服务器发送大量不存在数据的查询请求,由于Redis中数据不存在,这些请求都会去数据库中查询,从而造成数据库崩溃.
2023-12-21 15:28:08
377
原创 一个表格带你搞懂java的类加载机制
1、在准备阶段分配内存之后变量赋的是默认值,只有在初始化阶段才会把代码中给的值赋给变量。将.java文件编译成.class文件,并从磁盘读取到内存中,只有使用到类时才会加载。垃圾回收,当类不再被使用时,JVM有权利在适当的时候将其从内存中清除,释放内存。2、java中类的加载采用的是懒加载方式,只有要用到一个类的时候才会加载.类加载的生命周期:加载=>验证=>准备=>解析=>初始化=>使用=>卸载。给类的静态变量分配内存并初始化。给静态变量赋值,执行静态代码块。将符号引用转为直接引用。
2023-12-20 16:27:13
478
原创 Arrays.Stream()和Stream.of()的区别分析
在学习Stream的时候发现了一个问题,对于int类型的数组,在获取流的时候,使用 Stream.of() 的时候可以使用转成List类型集合,但是使用 Arrays.stream() 却会报错,这立马引起了我的好奇心,以下是研究过程。
2023-10-14 23:37:25
731
3
原创 Java中交换两个数字各算法的介绍以及交换效率比较
在工作中可能需要用大量交换两个变量的方法的情况,为了找到效率最高的方法,于是我进行了研究,并写下这篇文章,先说结论,就大部分人最先学的利用中间变量进行交换的方法是效率最高的。
2023-10-09 10:45:51
300
3
原创 Java:基于Swing框架的小游戏《2048》开发过程
每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随机生成一个数字方块,相同数字的方块在靠拢、相撞时会相加。这里只写了一个方向的方法,其他方向的方法以此类推,这里使用了三个循环,但是因为数组的大小是确定的,所以实际循环次数并不高,不用担心时间复杂度。游戏的逻辑特别简单,只有接收随机生成方块,用户输入,方块向一个方向靠拢,方块相撞4个主要功能,我们可以先在控制台把逻辑实现。这一步完成之后我们调用一下前面写的新生成一个数字,就能得到这种效果了。
2023-09-12 17:29:10
1001
1
原创 关于“++i”自增自减在C和java中区别的研究
java的.class文件在IDEA中打开是这样的,可以看到是在变量3运行之前,先给变量2自增一次,然后是"变量3=变量2++ +变量2"(这段代码在C里输出的是2*变量2),最后输出23,可以看出在java的。可以看到在C中执行“k=++i + ++i”时,是先把公式中的所有有自增操作变量有进行一次自增,然后把值放入寄存器进行操作,在公式执行过程中是静态的,在公式执行前将所有需要的操作已经做完了。在C中,公式里的变量会在执行前将所有需要的操作执行完毕,然后执行公式,最后执行所有公式执行后需要的操作。
2023-09-06 16:01:31
153
1
原创 IDEA代码清屏
r.mouseMove(x,y)中x和y要改到你输出栏的实际位置,左上角是(0,0)坐标,我的电脑分辨率是1960*1080的,右下角坐标就是(1960,1080),其次在输出栏上面右键弹出菜单可以把输出栏移动到其他位置。在学习java的过程中想实现一个功能,需要用到清屏功能,但是IDEA跟控制台不一样,控制台可以用cls清屏,IDEA用不了,在csdn找解决方法时找到了这个博客 ↓。1,直接执行ctrl+r,我试过之后发现不能用,原因是鼠标光标只有在输出框内才能使用清屏的快捷键。
2023-09-06 14:28:30
1414
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人