springboot使用redis实现从配置到实战

作者:Python研究者 时间:2023-05-05 09:49:08 

目录
  • 概述

  • 准备工作

  • 使用

概述

springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring支持的注解进行访问缓存.

准备工作

pom.xml


<dependency>
           <groupId>redis.clients</groupId>
           <artifactId>jedis</artifactId>
           <version>2.7.3</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.data</groupId>
           <artifactId>spring-data-redis</artifactId>
           <version>1.7.2.RELEASE</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-redis</artifactId>
           <version>RELEASE</version>
       </dependency>

application.properties


# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

Redis配置类


package cn.chenlove.config;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@EnableCaching
public class RedisConfig  extends CachingConfigurerSupport{
   @Value("${spring.redis.host}")
   private String host;

@Value("${spring.redis.port}")
   private int port;

@Value("${spring.redis.timeout}")
   private int timeout;

@Value("${spring.redis.pool.max-idle}")
   private int maxIdle;

@Value("${spring.redis.pool.max-wait}")
   private long maxWaitMillis;

@Bean
   public JedisPool redisPoolFactory() {
       Logger.getLogger(getClass()).info("JedisPool注入成功!!");
       Logger.getLogger(getClass()).info("redis地址:" + host + ":" + port);
       JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
       jedisPoolConfig.setMaxIdle(maxIdle);
       jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);

return jedisPool;
   }
}

可以看出,我们这里主要配置了两个东西,cacheManager方法配置了一个缓存名称,它的名字叫做thisredis,当我们要在方法注解里面使用到它的时候,就要根据名称进行区分不同缓存.同时设置了缓
存的过期时间.redisTemplate则是比较常见的,我们设置了RedisTemplate,因此在代码里面,我们也可以通过@Autowired注入RedisTemplate来操作redis.

使用

接下来就是如何使用注解啦,这一步反而是最简单的.其实只用到了两个注解,@Cacheable和@CacheEvict.第一个注解代表从缓存中查询指定的key,如果有,从缓存中取,不再执行方法.如果没有则执
行方法,并且将方法的返回值和指定的key关联起来,放入到缓存中.而@CacheEvict则是从缓存中清除指定的key对应的数据.使用的代码如下:


//有参数
   @Cacheable(value="thisredis", key="'users_'+#id")
   public User findUser(Integer id) {
       User user = new User();
       user.setUsername("hlhdidi");
       user.setPassword("123");
       user.setUid(id.longValue());
       System.out.println("log4j2坏啦?");
       logger.info("输入user,用户名:{},密码:{}",user.getUsername(),user.getPassword());
       return user;
    }

@CacheEvict(value="thisredis",   key="'users_'+#id",condition="#id!=1")
     public void delUser(Integer id) {
       // 删除user
          System.out.println("user删除");
      }

//无参数
      @RequestMapping("/get")
   @Cacheable(value="thisredis")
   @ResponseBody
   public List<User> xx(){
       return userMapper.selectAll();
   }
   @RequestMapping("/get3")
   @CacheEvict(value="thisredis")
   @ResponseBody
   public String xx3(){
       return "ok";
   }

可以看出,我们用@Cacheable的value属性指定具体缓存,并通过key将其放入缓存中.这里key非常灵活,支持spring的el表达式,可以通过方法参数产生可变的key(见findUser方法),也可以通过其指定在
什么情况下,使用/不使用缓存(见delUser方法).

Gitee码云:https://gitee.com/lyc96/projects

来源:https://www.cnblogs.com/chenlove/p/15196475.html

标签:springboot,redis
0
投稿

猜你喜欢

  • 浅谈Java方法调用的优先级问题

    2023-07-01 13:40:08
  • MybatisPlus如何自定义TypeHandler映射JSON类型为List

    2023-08-08 14:05:38
  • 深入分析Android系统中SparseArray的源码

    2022-09-16 13:54:42
  • Dubbo实现分布式日志链路追踪

    2023-08-23 21:00:54
  • 详解Java线程池队列中的延迟队列DelayQueue

    2023-08-30 01:22:04
  • SpringBoot整合Activiti工作流框架的使用

    2022-03-02 12:32:44
  • java ssm框架实现分页功能的示例代码(oracle)

    2021-10-31 01:14:40
  • 浅试仿 mapstruct实现微服务编排框架详解

    2022-07-12 13:20:44
  • 关于mybatis使用${}时sql注入的问题

    2023-04-18 03:29:40
  • Java集合TreeSet用法详解

    2023-11-10 22:53:34
  • 详解Mybatis极其(最)简(好)单(用)的一个分页插件

    2021-09-25 03:00:35
  • 常见JavaWeb安全问题和解决方案

    2023-11-09 01:02:17
  • MyBatis通过JDBC数据驱动生成的执行语句问题

    2023-08-24 08:42:18
  • Spring Boot缓存实战 EhCache示例

    2023-08-30 12:23:35
  • Springboot与Maven多环境配置的解决方案

    2023-11-29 08:53:58
  • 一文带你了解Java万物之基之Object类

    2023-10-09 01:58:28
  • 解决Android软键盘弹出覆盖h5页面输入框问题

    2023-06-19 11:33:24
  • IDEA不编译除了.java之外的文件的解决办法(推荐)

    2023-09-16 15:50:44
  • Spring依赖注入与第三方Bean管理基础详解

    2022-09-08 20:45:55
  • SpringBoot中实现分布式的Session共享的详细教程

    2023-08-23 18:23:43
  • asp之家 软件编程 m.aspxhome.com