【Redis】缓存

什么是缓存

缓存(cache)在计算机中是一个经典的概念,其核心思路就是把一些常用的数据放到一些访问速度更快地地方,方便我们随时读取

对于计算机硬件来说,往往访问速度越快的设备,成本往往越高,存储空间越小

缓存时很快,但是空间上是不足的,因此大部分情况下,缓存只用来存放一些热点数据(访问次数频繁的数据)

关于“二八定律”

20%的热点数据,能够应对80%的访问场景,因此只需要把这少量的热点数据放入缓存,就可以应对大多数的场景,从而在整体上提升性能


使用Redis作为缓存

通常情况下,我们会使用关系型数据库(如Mysql)来存储服务系统中的数据.

虽然这类数据库功能强大,但是由于其进行一次查询操作消耗的系统资源比较多.

是什么原因造成关系型数据库低性能的?

  1. 数据库数据存储在硬盘上,硬盘的读写速度是很慢的
  2. 如果查询时不能命中索引,就会进行表的遍历,会大大增加硬盘读写次数
  3. 关系型数据库内部会对于sql的执行,进行一系列的解析、校验、优化等工作
  4. 如果是复杂查询(如联合查询),需要进行笛卡尔积,而这无疑会进一步降低效率
  5. ...

因此,如果关系型数据库的并发量过高,对数据库的压力可是不小的,很容易使数据库出现宕机情况

而引入缓存,就可以使用其他的方式保存数据库中的热点数据,从而降低直接访问数据库的请求数量,而使用Redis作为缓存就是一个常见的解决方案

Redis 访问速度比MySQL 快很多. 或者说处理同⼀个访问请求, Redis 消耗的系统资源比
MySQL 少很多. 因此 Redis 能⽀持的并发量更⼤.
  • Redis 数据在内存中, 访问内存比硬盘快很多.
  • Redis 只是支持简单的 key-value 存储, 不涉及复杂查询的那么多限制规则

缓存对Mysq

### 关于 Redis 缓存的使用教程和最佳实践 #### Spring Boot 整合 Redis 缓存的最佳实践 在现代应用开发中,缓存是提升系统性能和响应速度的关键技术之一。Redis 作为一种高性能的内存数据库缓存服务器,在分布式系统特别是微服务架构中有广泛应用,可以显著减少数据库访问压力并提高系统的并发能力和稳定性[^1]。 为了有效利用 Redis 作为应用程序中的缓存解决方案,建议遵循以下几点: - **合理设置过期时间**:通过 `@Cacheable` 注解或其他方式设定合理的 TTL (Time To Live),防止数据长期占用内存资源。 - **选择合适的序列化机制**:默认情况下,Spring Data Redis 使用 JDK 序列化器来处理对象存储。然而,JDK 序列化的效率较低且生成的数据较大。推荐采用 JSON 或者 Protobuf 等更高效的序列化工具。 - **异常情况下的回退策略**:考虑到网络波动或者 Redis 集群不可用的情况,应该有相应的容错措施。例如,在尝试获取缓存失败时直接调用目标方法,并将结果重新放入缓存中[^3]。 ```java // Java代码示例:定义带有 @Cacheable 的业务逻辑类 import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class MyService { @Cacheable(value = "items", key = "#id") public Item getItemById(Long id) { // 如果缓存命中,则返回缓存的结果; // 否则查询数据库并将结果加入缓存后再返回给客户端 return repository.findById(id).orElseThrow(() -> new EntityNotFoundException()); } } ``` #### 将 Redis 缓存集成到 Apache Shiro 中 Apache Shiro 是一个强大的安全框架,支持认证、授权等功能。要将其与 Redis 结合起来用于会话管理和权限控制等方面,可以通过自定义 CacheManager 来完成这一过程[^2]。 具体做法是在项目初始化阶段创建一个新的 `RedisCacheManager` 实例并与之关联,从而使得所有的缓存操作都基于 Redis 完成。这不仅提高了安全性管理模块本身的运行效率,也便于跨多个节点共享同一套用户状态信息。 ```java // Java代码片段:配置Shiro以使用Redis作为其内部缓存组件 import org.apache.shiro.cache.CacheManager; import org.crazycake.shiro.RedisCacheManager; @Bean public CacheManager shiroCacheManager() { CacheManager cacheManager = new RedisCacheManager(redisManager); return cacheManager; } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值