redis的简单使用(java)


redis的简单使用(java)

redis官网: http://www.redis.cn/

一 redis入门

01 导入坐标



org.springframework.boot
spring-boot-starter-data-redis

02 配置文件

spring:
application:
  name: demo-test-template
datasource:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/ajava?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
  username: root
  password: root
?
redis:
  database: 0
  host: 127.0.0.1
  port: 6379
  password:
  timeout: 6000ms # 连接超时时长(毫秒)
  jedis:
    pool:
      max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
      max-wait: -1ms     # 连接池最大阻塞等待时间(使用负值表示没有限制)
      max-idle: 10     # 连接池中的最大空闲连接
      min-idle: 5       # 连接池中的最小空闲连接

 

03 模板对象

模板对象序列化方式序列化效果
RedisTemplate JdkSerializationRedisSerializer  
StringRedisTemplate StringRedisSerializer  

API

//操作string类型
redisTemplate.opsForValue();
?
//操作hash类型
redisTemplate.opsForHash();
?
//操作list类型
redisTemplate.opsForList();
?
//操作set类型
redisTemplate.opsForSet();
?
//操作有序set类型
redisTemplate.opsForZSet();

 

04 test类

@SpringBootTest
@RunWith(SpringRunner.class)
public class AppTest {
  @Autowired
  private StringRedisTemplate stringRedisTemplate;
?
  /**
    * redis测试
    */
  @Test
  public void redisServerTest(){
      stringRedisTemplate.opsForValue().set("key12-15","123", Duration.ofSeconds(100L));
     
  }
}

思考一个问题:

  • 为什么加载了redis的starter(起步依赖)之后,RedisTemplate对象会自动被new出来,并可以@Autowired了呢?

SpringBoot工作原理:

二 redis失效key触发事件

01 redis配置类

/**
* Redis缓存配置类
*/
@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {
?
  @Bean
  RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
?
      RedisMessageListenerContainer container = new RedisMessageListenerContainer();
      container.setConnectionFactory(connectionFactory);
      return container;
  }
?
}

02 监听者类

/**
* redis 失效key的监听者类
* @Author lyn
*/
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
?
  public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
      super(listenerContainer);
  }
?
  /**
    * 针对redis数据失效事件,进行数据处理
    * @param message
    * @param pattern
    */
  @Override
  public void onMessage(Message message, byte[] pattern) {
      // message.toString()可以获取失效的key
      String expiredKey = message.toString();
      //后去解析key,调用其他服务执行任务
      System.out.println(expiredKey);
  }
}