Util应用框架基础(七)- Redis 缓存

Redis 缓存

Util应用框架Redis缓存操作

本节介绍Util应用框架如何配置Redis缓存.

概述

Redis是流行的分布式缓存.

Redis缓存将数据对象存储到外部专用缓存服务器内存中.

配置Redis缓存

  • 引用Nuget包

    Nuget包名: Util.Caching.EasyCaching

  • AddRedisCache

    使用 AddRedisCache 扩展方法启用Redis缓存.

    • 最简单的配置方法只需传入Redis服务地址,并设置以下默认值.

      • MaxRdSecond 设置为 1200秒.

      • CacheNulls 设置为 true.

      • AllowAdmin 设置为 true.

      • 端口设置为 6379.

      • SerializerName 设置为 “SystemTextJson”.

      范例:

      var builder = WebApplication.CreateBuilder( args );
      builder.AsBuild().AddRedisCache( "127.0.0.1" );
      

      如果要修改端口为 6666,如下所示.

      builder.AsBuild().AddRedisCache( "127.0.0.1",6666 );
      

      还可以统一设置缓存键前缀,下面的示例将缓存键前缀设置为 “test:”.

      builder.AsBuild().AddRedisCache( "127.0.0.1",6666,"test:" );
      
    • 使用 IConfiguration 进行配置.

      可以使用 appsettings.json 文件进行配置.

      builder.AsBuild().AddRedisCache( builder.Configuration );
      

      默认配置节: EasyCaching:Redis

      appsettings.json 配置文件示例.

      {
        "EasyCaching": {
          "Redis": {
            "MaxRdSecond": 1200,
            "CacheNulls": true,
            "DbConfig": {
              "AllowAdmin": true,
              "Endpoints": [
                {
                  "Host": "localhost",
                  "Port": 6739
                }
              ],
              "Database": 0
            }
          }
        }
      }
      
    • 使用委托进行配置.

      builder.AsBuild().AddRedisCache( options => {
          options.MaxRdSecond = 1200;
          options.CacheNulls = true;        
          options.DBConfig.AllowAdmin = true;
          options.DBConfig.KeyPrefix = "test:";
          options.DBConfig.Endpoints.Add( new ServerEndPoint( "127.0.0.1", 6379 ) );
      } );
      
  • 配置参数

    EasyCaching Redis 缓存提供了多个配置参数,具体请参考 EasyCaching 文档.

    Util应用框架交流群: 24791014

在Java开发中,使用Redis作为缓存时,通常会结合一些成熟的框架或工具来简化操作、提高开发效率。最常用的框架和方案是 **Spring Data Redis**,它是Spring生态系统的一部分,提供了对Redis的便捷访问。 ### 1. Spring Data Redis(推荐) Spring Data Redis 是目前Java领域中最主流的Redis集成框架。它封装了底层的Redis客户端(如Jedis、Lettuce),并提供模板类 `RedisTemplate` 和 `StringRedisTemplate` 来操作Redis。 #### 核心组件: - `RedisTemplate`:用于操作各种数据类型(String、Hash、List、Set、ZSet等)。 - 支持序列化配置(如JDK、JSON、String等序列化方式)。 - 支持连接池管理(通过Jedis或Lettuce实现)。 - 与Spring Cache抽象无缝集成,可通过注解实现声明式缓存。 #### 示例代码(使用RedisTemplate): ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @Service public class UserService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void setUser(String key, Object user) { redisTemplate.opsForValue().set(key, user, 30, TimeUnit.MINUTES); // 缓存30分钟 } public Object getUser(String key) { return redisTemplate.opsForValue().get(key); } public void deleteUser(String key) { redisTemplate.delete(key); } } ``` #### 配置类示例(启用Redis支持): ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 设置key的序列化器 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // JSON序列化 template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); template.afterPropertiesSet(); return template; } } ``` --- ### 2. 第三方客户端(底层驱动) Spring Data Redis 可以基于以下两种客户端工作: - **Lettuce**(推荐):基于Netty的可伸缩线程安全Redis客户端,支持同步、异步、响应式编程模型。 - **Jedis**:较早的客户端,轻量但非线程安全(需配合连接池使用)。 Maven依赖示例(使用Lettuce): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` Spring Boot默认使用Lettuce作为底层客户端。 --- ### 3. 使用Spring Cache抽象 + Redis实现缓存注解 可以结合 `@EnableCaching` 和 `@Cacheable` 等注解实现方法级别的缓存。 #### 示例: ```java import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class UserService { @Cacheable(value = "users", key = "#id") public User findUserById(Long id) { System.out.println("查询数据库获取用户:" + id); // 模拟数据库查询 return new User(id, "name" + id); } } ``` 只要配置好Redis作为缓存管理器,上述方法调用将自动缓存结果。 --- ### 为什么选择这些框架? | 框架 | 优点 | |------|------| | Spring Data Redis | 与Spring生态完美集成,API丰富,易于维护 | | Lettuce | 线程安全、性能好、支持Redis集群和哨兵 | | Spring Cache + Redis | 实现零侵入式缓存,提升开发效率 | --- ### 注意事项: - 序列化问题:建议使用JSON序列化(如Jackson)代替JDK序列化,便于跨语言共享数据。 - 缓存穿透/雪崩/击穿:需要配合空值缓存、加锁、过期时间随机等策略处理。 - 连接池配置:合理设置最大连接数、超时时间等参数以保证高并发下的稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值