赞
踩
Redis是一种高性能、非关系型的内存键值存储系统。它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合等。Redis使用内存作为主要存储介质,因此具有快速的读写速度。它也可以将数据持久化到磁盘,以防止数据丢失。
在项目的pom.xml中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在项目的application.properties文件中添加以下配置:
#redis连接配置
spring.redis.host=192.168.129.132
spring.redis.port=6379
spring.redis.database= 0
spring.redis.timeout=1800000
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0
提示:其中,spring.redis.host和spring.redis.port分别指定了Redis服务器的IP地址和端口号。如果Redis服务器有密码认证,则需要在spring.redis.password中配置密码。spring.redis.database指定了使用的数据库,默认为0。spring.redis.timeout指定了连接超时时间,单位为毫秒。spring.redis.lettuce.pool.max-active指定了连接池中最大连接数,负数表示没有限制。spring.redis.lettuce.pool.max-wait指定了最大阻塞等待时间,负数表示没有限制。spring.redis.lettuce.pool.max-idle=5指定了连接池中的最大空闲连接。spring.redis.lettuce.pool.min-idle指定了连接池中的最小空闲连接。
在项目中新建config包,并在其下新建RedisConfig配置类
@Configuration public class RedisConfig { /** * 自定义key规则 * @return */ /*@Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; }*/ /** * 设置RedisTemplate规则 * * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //解决查询缓存转换异常的问题 ObjectMapper om = new ObjectMapper(); // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); //序列号key value redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } /** * 设置CacheManager缓存规则 * * @param factory * @return */ @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //解决查询缓存转换异常的问题 ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // 配置序列化(解决乱码的问题),过期时间600秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(600)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; } }
提示:KeyGenerator Bean会为Redis自动配置key的规则,如果不配则需要在保存数据时进行手动添加
使用@Autowired注解将RedisTemplate注入到需要使用的类中,然后即可使用RedisTemplate进行数据操作,例如:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void put(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
提示:上述代码中,通过redisTemplate.opsForValue()获取Redis字符串操作对象,并使用set方法设置key-value数据。通过get方法获取指定key的value数据。
在启动类上添加@EnableCaching注解开启缓存注解支持:
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在需要进行缓存的方法上添加@Cacheable注解即可进行缓存操作,例如:
@Cacheable("books")
public List<Book> getAllBooks() {
// 从数据库中获取所有书籍数据
return bookService.getAllBooks();
}
提示:上述代码中,@Cacheable("books")指定了缓存名称为books,表示该方法返回的数据将被缓存在Redis中。在下次调用该方法时,如果缓存中存在数据,则直接返回缓存数据,不会再执行方法体内的逻辑。 @CachePut注解可以用于更新缓存数据,@CacheEvict注解可以用于删除缓存数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。