我的弹簧启动项目有以下配置。
@SpringBootApplication
@EnableTransactionManagement
@EnableCaching
@EnableScheduling
@EnableAsync
public class Application {
String redisHost = "localhost";
int redisPort = 6379;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(redisHost);
factory.setPort(redisPort);
factory.setUsePool(true);
return factory;
}
@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
@Bean
public CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate());
return cacheManager;
}
}
此外,我对pom的maven依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
我在定义端口上的本地计算机上运行了一个单独的redis服务器。另外在我的服务类中,我有@Cacheable,@ CachePut等注释来支持缓存。
我可以毫无错误地启动Spring启动应用程序,CRUD操作也可以。但似乎它没有使用定义的redis缓存。我使用了#redi桌面管理器&#39;浏览工具,无法在redis上找到任何数据。此外,我尝试通过redis cli命令监视redis服务器&#39; monitor&#39;,我无法在监视器上看到任何更改。
所以我认为redis缓存仍然不能用于我的spring启动应用程序。有人可以帮我弄清楚这个问题吗?
我正在使用spring boot版本1.4.2.RELEASE
谢谢!
答案 0 :(得分:9)
鉴于您正在使用 Spring Boot ,因为 Spring Boot 提供&#34; 自动配置&,因此您的大部分Redis配置都是不必要的#34;支持Redis,包括data source和caching provider。
您还没有具体说明您正在使用的 Spring Boot 版本(例如1.5.0.RC1
)来运行您的应用程序,或者您的应用程序中是否有application.properties
#39;类路径,如果你明确指定spring.cache.type
(设置为&#34; redis&#34;以外的其他东西)可能会有所不同。
但是,一般情况下,我的Redis或 Spring Cache @Configuration
类并没有太多错误。但是,如果没有明确设置cacheManager.setUsePrefix(true)
,似乎确实存在问题。当我设置此RedisCacheManager
属性(&#39; usePrefix`)时,一切都按预期工作。
我不是(Spring Data)Redis专家,所以我不确定为什么需要这样做。但是,我的测试配置基于 Spring Boot&#39> <{em> "auto-configuration" support for Redis caching以及您的@Configuration
&#34;应用程序&#34;上课,如上所示。
并且,因为您可以消除大部分显式配置并使用 Spring Boot "auto-configuration" support for Redis作为数据源,所以我添加了"AutoRedisConfiguration"
{ {1}}我的测试类的类。即你可以使用它来配置Redis而不是我的其他@Configuration
类(@Configuration
),它使用你的配置+ 修复。
以下是完整的测试示例......
"CustomRedisConfiguration"
希望这有帮助!
干杯, 约翰
答案 1 :(得分:0)
我正在使用Spring Boot 2.0,它使用Redis非常简单,用于简单的缓存目的。
在您的应用程序中。属性具有这些属性
spring.cache.type = redis redis.host.url = redis.host.port =
使用@Cacheable注释方法。
就是这样!
如果您使用的是AWS Elasticache,并且已经检查了传输中的加密,则需要添加RedisConfiguration文件以将ssl设置为true。
Spring Boot 2.0现在使用LettuceConnectionFactory。
要执行上述操作,只需添加一个类,并使用@Configuration批注对其进行标记,然后添加以下bean
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(redisHost);
configuration.setPort(redisPort);
return new LettuceConnectionFactory(configuration, LettuceClientConfiguration.builder().useSsl().disablePeerVerification().build());
}
答案 2 :(得分:0)
您可以使用redis-cli中的命令检查redis中密钥的存在:密钥*
如果有您的钥匙,就可以了:)
答案 3 :(得分:0)
您的类的方法应为@Cacheable。与@CachePut一起使用时,应将@CacheEvict与键及其delete方法的值一起使用以刷新资源。在application.properties文件中还需要主机,端口,类型和密码。
`spring.redis.password= password`
`spring.cache.type=redis`
`spring.redis.host=localhost`
`spring.redis.port=6379`
还根据要求添加其他一些属性。
`spring.cache.redis.time-to-live=600000`
`spring.cache.redis.cache-null-values=false`
`spring.cache.redis.use-key-prefix=true