redis的简单使用(java)
redis的简单使用(java)
redis官网: http://www.redis.cn/
一 redis入门
01 导入坐标
<!--使用redisTemplate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
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工作原理:
https://www.cnblogs.com/lyn8100/p/15837349.html
二 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);
}
}