如何启用分布式/集群缓存时使用Redis与Spring启动
缓存。
尤其是通过spring boot starter data Redis
在Spring引导应用程序中启用缓存非常简单。你只需要遵循三个步骤。
对于Redis,我们有可以配置和创建的RedisCacheManager。
缓存配置
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "cache")
public class CacheConfigurationProperties {
// Redis host name
private String redisHost;
// Redis port
private int redisPort;
// Default TTL
private long timeoutSeconds;
// TTL per cache, add enties for each cache
private Map<String, Long> cacheTtls;
}
通过属性或yaml文件设置其值,如
cache.redisHost=localhost
cache.redisPort=6379
cache.timeoutSeconds=1000
cache.cacheTtls.cach1=100
cache.cacheTtls.cach2=200
创建配置后,可以通过构建器为RedisCacheManger创建缓存配置。
@Configuration
@EnableCaching
public class CacheConfig {
private static RedisCacheConfiguration createCacheConfiguration(long timeoutInSeconds) {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(timeoutInSeconds));
}
@Bean
public LettuceConnectionFactory redisConnectionFactory(CacheConfigurationProperties properties) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(properties.getRedisHost());
redisStandaloneConfiguration.setPort(properties.getRedisPort());
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisCacheConfiguration cacheConfiguration(CacheConfigurationProperties properties) {
return createCacheConfiguration(properties.getTimeoutSeconds());
}
@Bean
public CacheManager cacheManager(
RedisConnectionFactory redisConnectionFactory, CacheConfigurationProperties properties) {
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
for (Entry<String, Long> cacheNameAndTimeout : properties.getCacheTtls().entrySet()) {
cacheConfigurations.put(
cacheNameAndTimeout.getKey(), createCacheConfiguration(cacheNameAndTimeout.getValue()));
}
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(cacheConfiguration(properties))
.withInitialCacheConfigurations(cacheConfigurations)
.build();
}
}
如果您使用的是Redis cluster,请根据此更新缓存属性。在这种情况下,如果您想要缓存特定的bean,而不是将这些方法私有化,那么一些bean将成为主bean。
现在假设我们有一个社交网站,有数以百万的用户简介,一些著名用户的简介页面每分钟有数百或数千人访问。 要生成一个用户简介,需要多个 SQL 查询(朋友、相册名称及照片总数、简介信息、最后状态等)。 只要用户没有更新个人资料,在个人资料页显示的信息几乎是静态的。因此,个人资料页的快照可以缓存 5 分钟或 1 小时等。 但这或许还不够。我们正在谈论数以百万的简介和用户。用户不会只查看一些简介页。我们需要
Web 应用程序可能需要为成百上千甚至更多的用户同时提供服务。如果你没有采取必要的措施,在这种负载下,你的网站可能会崩溃或变得没有响应。 假设在主页显示最后 10 条新闻,并且平均每分钟有上千名用户访问此页面。你可能为每个用户通过查询数据库来显示页面视图信息: SELECT TOP 10 Title, NewsDate, Subject, Body FROM News ORDER BY NewsD
高速缓存可以存储缩览图和元数据信息(其中包括无法存储在文件中的元数据,如标签和评级),以便在您查看缩览图或搜索文件时提高性能。但存储高速缓存会占用磁盘空间。在构建高速缓存时,您可以选择将其导出以便共享或存档,您也可以选择生成 100% 预览。您可以通过清除高速缓存来管理高速缓存,并通过设置首选项来控制其大小和位置。 有关共享高速缓存的更多信息,请参阅集中管理 Adobe Bridge 高速缓存。
如果在记录的初始过期时间之前访问记录,则需要重置过期时间。我使用Spring数据redis API使用Redis作为缓存。我正在使用RediscacheManager的setDefaultEx的(5000)设置默认过期。无法找到有关重置到期时间的任何解决方案或留档。感谢任何指导。 此外,我想知道,为什么这不能成为Redis缓存的一个自然功能,毕竟,它应该从缓存中获取最常用的记录。
我的spring boot项目有以下配置。 此外,我还关注maven对POM的依赖。 我有一个单独的redis服务器运行在我的本地机器上的定义端口。另外,在我的服务类中,我有像@cacheable、@cacheput这样的注释来支持缓存。
我有两个微服务。Item micro服务将数据填充到redis缓存中。这是成功的,我也能够在同一个微服务中检索数据。另一个微服务是订单服务。为了获得服务,我需要从redis缓存中获取项目服务数据,因为我需要使用分布式缓存。然而,我无法从redis缓存中访问缓存数据以获得服务。 这是我的实现代码 物品服务 重新配置。JAVA 重新发行。JAVA 订单服务 重新配置。JAVA 我在订单服务中创建了It