no-title

Spring Bean基础定义 spring beanbeanDefinition 元信息命名spring beanspring bean的别名

阅读全文

no-title

Spring ioc容器Spring Ioc依赖查找pojo 定义123456789101112131415161718192021222324252627282930public class User { private String id ; private String name; public String getId()...

阅读全文

缓存异常

缓存雪崩缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 缓存中有大量数据同时过期当数据保存在缓存中,并且设置了过期时间时,如果在某一个时刻,大量数据同时过期,此时,应用再访问这些数据的话,就会发生缓存缺失。紧接着,应用就会把请求发送给数据库,从数据库中读取数据。如果应用的并发请求量...

阅读全文

如何避免单线程模型的阻塞?

Redis 性能的 5 大方面的潜在因素,分别是: Redis 内部的阻塞式操作; CPU 核和 NUMA 架构的影响; Redis 关键系统配置; Redis 内存碎片; Redis 缓冲区。 Redis 内部的阻塞式操作Redis 实例有哪些阻塞点和客户端交互时的阻塞点Redis 使用了 IO 多路复用机制,网络 IO 不是导致 Redis 阻塞的因...

阅读全文

波动的响应延迟

如何判断 Redis 是不是真的变慢了查看 Redis 的响应延迟当前环境下的 Redis 基线性能基线性能:也就是一个系统在低压力、无干扰下的基本性能,这个性能只由当前的软硬件配置决定。基线性能和当前的操作系统、硬件配置相关。 从 2.8.7 版本开始,redis-cli 命令提供了–intrinsic-latency 选项,可以用来监测和统计测试期间内的...

阅读全文

删除数据后,为什么内存占用率还是很高?

明明做了数据删除,数据量已经不大了,为什么使用 top 命令查看时,还会发现 Redis 占用了很多内存呢? 当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。所以,操作系统仍然会记录着给 Redis 分配了大量内存。 内存碎片内存空间不连续导致内存空间有闲置叫内存碎片。 内存碎片的形成有内因和外因两个层面的原因。简单来说...

阅读全文

Redis缓冲区

功能用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。 问题但因为缓冲区的内存空间有限,如果往里面写入数据的速度持续地大于从里面读取数据的速度,就会导致缓冲区需要越来越多的内存来暂存数据。当缓冲区占用的内存超出了设定的上限阈值时,就会出现缓冲区溢出,就会丢数据了。随着累积的数据越来越多,缓冲区占用内存空...

阅读全文

Redis高性能IO模型

Redis是单线程,Redis的网络IO的键值对读写都是一个线程完成,也是对外提供键值存储主要流程。但Redis的其他功能,持久化、异步删除、集群数据同步都是由额外的现场执行,严格意义上来说Redis 并不是单线程。 Redis 单线程多线程编程模式面临的共享资源的并发访问控制问题,为了避免这些问题Redis采用的单线程的模式,而且单线程降低Redis的内部...

阅读全文

Redis并发操作

为了保证并发访问的正确性,Redis 提供了两种方法,分别是加锁和原子操作。 原子操作Redis 的原子操作采用了两种方法: 把多个操作在 Redis 中实现成一个操作,也就是单命令操作; 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本。 Redis 本身的单命令操作Redis 是使用单线程来串行处理客户端的请求操作命令的,所以,...

阅读全文

Redis淘汰策略

设置多大的缓存容量合适?建议把缓存容量设置为总数据量的 15% 到 30%区间,兼顾访问性能和内存空间开销。 设定缓存的固定大小命令: 1CONFIG SET maxmemory 4gb Redis 缓存有哪些淘汰策略?Redis 4.0 之前一共实现了 6 种内存淘汰策略,在 4.0 之后,又增加了 2 种策略。我们可以按照是否会进行数据淘汰把它们分成两...

阅读全文