- 博客(118)
- 收藏
- 关注
原创 【redis】过期策略 & 懒惰删除
1、定时删除:定期扫描字典,采用贪心的策略,从字典随机抽20个key,删除其中已经过期的key,如果过期的key超过1/2,那么重复上述步骤。当有大量key同时过期,为了避免无限循环扫描,这一个定时删除的任务的时间上限是25ms,但是即使有这个时间上限,仍然会出现积少成多的卡顿。当移除key的指针引用后,key会被立即删除,但是值对象仍在内存中,并且主线程无法再访问这个值对象。2、惰性删除:当客户访问key时,redis就会对key进行过期检查,如果过期,就会立即删除这个key。让后台线程来执行删除。
2025-06-04 08:12:08
274
原创 mybatis-plus逻辑删、创建时间、修改时间基础知识补充
即使数据库有自动更新,也建议保留 MyBatis-Plus 的。- 当记录更新时自动将该字段设置为当前时间。这样可以保证应用层和数据库层双重保障。- 设置字段的默认值为当前时间。设置为插入时的当前时间(因为。更新为操作时的当前时间(因为。
2025-05-20 11:22:32
206
原创 Mybatis-Plus Update 注意事项
updateById:在调用updateById方法前,应先从数据库中检索出实体,然后对实体进行变更,最后调用updateById进行保存。
2025-05-15 11:25:07
293
原创 关于项目中优化使用ConcurrentHashMap来存储锁对象
关于项目中优化使用ConcurrentHashMap来存储锁对象【应用+底层知识介绍】
2025-05-03 18:26:19
607
原创 【思维导图】并发编程
偏向锁就是当一个线程想要获取锁时,会在对象头中存储这个线程id并且将对象头里的偏向锁标识设置为1,如果下次同一个线程想要再次获取同一把锁时,首轻先判断的就是对象头中的线程id是否与自己的相同,如果相同,则这个线程直接获取锁成功。而如果不同的线程想要获取这把锁,则会将这个偏向锁升级为轻量级锁。乐观锁认为自己在使用数据时不会有其他线程来修改数据,因此在读取数据时不会添加锁,只有修改数据前数据是否有被其他线程修改,如果没有其他线程修改,那么就放心大胆的修改数据,而如果数据被其他线程修改,那么自己就修改数据失败。
2025-01-31 20:53:36
942
原创 【思维导图】java
封装就是使用private修饰属性或方法,这样类的对象就没法直接访问或修改属性,只能通过get/set方法进行访问或修改。封装的好处:降低代码的耦合度,利于维护;通过get/set方法访问属性的时候,可以增加一些额外的逻辑,这是单独访问属性无法做到的。继承就是子类继承父类,子类继承了父类所有的方法和属性。并且子类还可以增加一些自己的属性和方法。继承的好处是提高代码的复用性,比如说一个类想要拥有另一个类的属性和方法,就可以采用继承的方式实现。
2025-01-30 10:40:35
1135
原创 jdk1.7的hashmap为什么会出现死循环问题
如果数组的这个下标位置中有元素且判断出这个元素的key与待插入的元素key相等,那么用新元素的value值替换,结束。需要注意的是线程1和线程2的e都指向了key:3这个元素,e.next都指向了key:7这个元素。假设现在线程1挂起,线程2接着执行transfer方法剩余的逻辑,得到如下新扩容后的数组,因为是头插法,导致7和3的位置颠倒了。由于一个线程使用的是头插法进行迁移数据到新开辟的数组中,使得链表中的数据是颠倒的顺序。线程1自己也开了个扩容后的新数组,但是头插法插入元素仍然是用的上图元素的地址。
2024-11-15 18:00:13
457
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人