redis官网: http://www.redis.cn/
<!--使用redisTemplate--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
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 # 连接池中的最小空闲连接
模板对象 | 序列化方式 | 序列化效果 |
---|---|---|
RedisTemplate | JdkSerializationRedisSerializer | |
StringRedisTemplate | StringRedisSerializer |
API
//操作string类型 redisTemplate.opsForValue(); //操作hash类型 redisTemplate.opsForHash(); //操作list类型 redisTemplate.opsForList(); //操作set类型 redisTemplate.opsForSet(); //操作有序set类型 redisTemplate.opsForZSet();
@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缓存配置类 */ @Configuration public class RedisConfigurer extends CachingConfigurerSupport { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; } }
/** * 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); } }