優化RuoYi項目中Redis的配置可以從以下幾個方面進行:
RuoYi默認使用Jedis作為Redis客戶端,可以通過調整連接池配置來優化性能。
maxTotal
: 最大連接數,即線程池允許的最大連接數。maxIdle
: 最大空閑連接數,即線程池允許的最大空閑連接數。minIdle
: 最小空閑連接數,即線程池保證的最小空閑連接數。maxWaitMillis
: 獲取連接的最大等待時間,單位毫秒。timeBetweenEvictionRunsMillis
: 連接池檢查空閑連接的時間間隔,單位毫秒。@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100); // 最大連接數
config.setMaxIdle(50); // 最大空閑連接數
config.setMinIdle(10); // 最小空閑連接數
config.setMaxWaitMillis(3000); // 獲取連接的最大等待時間
config.setTimeBetweenEvictionRunsMillis(60000); // 檢查空閑連接的時間間隔
return config;
}
根據業務需求選擇合適的數據結構,避免不必要的內存浪費。
String
: 適用于簡單的鍵值對存儲。List
: 適用于有序集合,如消息隊列。Set
: 適用于無序集合,如標簽、好友關系等。Hash
: 適用于存儲對象,如用戶信息。ZSet
: 適用于有序集合,如排行榜、時間線等。選擇合適的序列化方式可以減少內存占用和提高數據傳輸效率。
StringRedisSerializer
: 適用于簡單的鍵值對。JdkSerializationRedisSerializer
: 適用于復雜對象的序列化。Jackson2JsonRedisSerializer
: 適用于JSON對象的序列化。ProtobufRedisSerializer
: 適用于Protocol Buffers對象的序列化。@Bean
public StringRedisSerializer stringRedisSerializer() {
return new StringRedisSerializer();
}
@Bean
public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
return new Jackson2JsonRedisSerializer<>(objectMapper);
}
合理設置連接超時時間可以避免不必要的連接等待。
@Bean
public RedisStandaloneConfiguration redisStandaloneConfiguration() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName("localhost");
config.setPort(6379);
config.setTimeout(3000); // 連接超時時間,單位毫秒
return config;
}
合理設置緩存過期時間和最大緩存大小,避免緩存雪崩和內存溢出。
@Bean
public RedisCacheConfiguration redisCacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)) // 緩存過期時間,單位毫秒
.maxEntriesToEvict(1000); // 最大緩存條目數
}
如果業務規模較大,可以考慮使用Redis集群來提高可用性和擴展性。
ClusterNodeConfiguration
: 配置每個節點的信息。RedisClusterConfiguration
: 配置集群節點列表。@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
RedisClusterConfiguration config = new RedisClusterConfiguration();
config.addNode(new RedisNode("127.0.0.1", 7000));
config.addNode(new RedisNode("127.0.0.1", 7001));
config.addNode(new RedisNode("127.0.0.1", 7002));
return config;
}
根據業務需求選擇合適的持久化方式,平衡數據安全和性能。
RDB
: 定期將內存中的數據快照保存到磁盤。AOF
: 記錄每個寫操作命令,重啟時重新執行命令恢復數據。@Bean
public RedisStandaloneConfiguration redisStandaloneConfiguration() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName("localhost");
config.setPort(6379);
config.setDatabase(0);
config.setPassword(null);
config.setTimeout(3000);
config.setEnablePersistence(true); // 開啟持久化
config.setAppendOnly(true); // 開啟AOF持久化
return config;
}
通過以上幾個方面的優化,可以顯著提高RuoYi項目中Redis的性能和穩定性。