SpringBoot整合Redis

22 篇文章 0 订阅
2 篇文章 0 订阅

SpringBoot整合Redis

Redis是一款NOSQL数据库,同时可以充当缓存中间件。在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Redis,默认底层的连接池使用了 lettuce ,开发者可以自行修改为自己的熟悉的,例如 Jedis。

Spring Data Redis 针对 Redis 提供了非常方便的操作模板 RedisTemplate.

基于SpringBoot 2.x版本

  1. 快速入门
  2. 开启缓存

一、快速入门

1、创建springboot项目,勾选NOSQL选项下的redis选项,或者在项目创建完毕后再pom中加入依赖。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、在application.properties文件中加入以下redis配置。

spring.redis.port=6379
spring.redis.host=127.0.0.1

3.创建一个Controller类,其中代码如下,该控制器类会返回JSON数据。

	@Autowired
    RedisTemplate redisTemplate;
	@ResponseBody
    @RequestMapping("/rt")
    public String redis(){
       ValueOperations ops= redisTemplate.opsForValue();
       ops.set("one","成功!");
        Object one = ops.get("one");
        System.out.println(one.toString());
        return one.toString();
    }

4.开启redis服务端,找到redis-server.exe,双击开启。

5.在浏览器访问。访问成功后会返回数据到页面上。

二、SpringBoot Data Redis开启缓存

1.加入依赖进入pom文件

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

2.在properties文件中加入redis配置

spring.redis.host=127.0.0.1

spring.redis.port=6379

spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.max-wait=10000ms
spring.redis.lettuce.shutdown-timeout=100ms

3.创建实体类User.

public class User {
    private Integer id;
    private String name;
    private String gender;

  //toString()省略

    public User(Integer id, String name, String gender) {
        this.id = id;
        this.name = name;
        this.gender = gender;
    }

    public User() {
    }
}

4.创建service层,并加入注解@CacheConfig(cacheNames = {“user”})和@Cacheable。

@Service
@CacheConfig(cacheNames = {"user"})
public class UserService {

    @Cacheable
    public User findUser() {
        System.out.println("无缓存时执行下面代码,获取zhangsan,Time:");
        return new User(1, "Dave", "male");// 模拟从持久层获取数据
    }
}

5.创建RedisCacheConfig 类,配置redis。

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

    // 自定义key生成器
    @Bean
    public KeyGenerator keyGenerator(){
        return (o, method, params) ->{
            StringBuilder sb = new StringBuilder();
            sb.append(o.getClass().getName()); // 类目
            sb.append(method.getName()); // 方法名
            for(Object param: params){
                sb.append(param.toString()); // 参数名
            }
            return sb.toString();
        };
    }

    // 配置缓存管理器
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(60)) // 60s缓存失效
                // 设置key的序列化方式
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
                // 设置value的序列化方式
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
                // 不缓存null值
                .disableCachingNullValues();

        RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(config)
                .transactionAware()
                .build();

        return redisCacheManager;
    }

  /*  @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setKeySerializer(keySerializer());
        redisTemplate.setHashKeySerializer(keySerializer());
        redisTemplate.setValueSerializer(valueSerializer());
        redisTemplate.setHashValueSerializer(valueSerializer());
        logger.info("序列化完成!");
        return redisTemplate;
    }*/

    // key键序列化方式
    private RedisSerializer<String> keySerializer() {
        return new StringRedisSerializer();
    }

    // value值序列化方式
    private GenericJackson2JsonRedisSerializer valueSerializer(){
        return new GenericJackson2JsonRedisSerializer();
    }
}

6.创建Controller,测试。

@RestController
public class UserController {
    @Autowired
    UserService userService;
    @RequestMapping("/find")
    public User findUser(){
        System.out.println("....");
        return userService.findUser();
    }
}

此时缓存已经开启。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值