Redis集群搭建与管理
Redis集群搭建与管理
概述
Redis集群是Redis的分布式解决方案。本教程介绍Redis集群的搭建和管理。
1. Redis Cluster配置
# redis-cluster.conf
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
2. Java连接Redis集群
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.HostAndPort;
import java.util.Set;
public class RedisClusterClient {
private final JedisCluster cluster;
public RedisClusterClient() {
Set<HostAndPort> nodes = Set.of(
new HostAndPort("localhost", 7000),
new HostAndPort("localhost", 7001),
new HostAndPort("localhost", 7002)
);
this.cluster = new JedisCluster(nodes);
}
public void set(String key, String value) {
cluster.set(key, value);
}
public String get(String key) {
return cluster.get(key);
}
public void close() {
cluster.close();
}
}
3. 实际应用示例
分布式会话
@Service
public class SessionService {
private final JedisCluster cluster;
public void saveSession(String sessionId, Map<String, Object> sessionData) {
String json = objectMapper.writeValueAsString(sessionData);
cluster.setex("session:" + sessionId, 3600, json);
}
public Map<String, Object> getSession(String sessionId) {
String json = cluster.get("session:" + sessionId);
if (json != null) {
return objectMapper.readValue(json, Map.class);
}
return null;
}
public void deleteSession(String sessionId) {
cluster.del("session:" + sessionId);
}
}
分布式限流
@Service
public class RateLimiter {
private final JedisCluster cluster;
public boolean isAllowed(String key, int maxRequests, int windowSeconds) {
long current = System.currentTimeMillis() / 1000;
String redisKey = "rate:" + key + ":" + (current / windowSeconds);
long count = cluster.incr(redisKey);
if (count == 1) {
cluster.expire(redisKey, windowSeconds);
}
return count <= maxRequests;
}
}
4. 最佳实践
- 合理设置集群规模:根据业务需求设置节点数量
- 数据分片:合理设置槽位分配
- 高可用配置:配置主从复制和哨兵
- 监控集群状态:使用redis-cli监控集群状态
- 备份数据:定期备份集群数据
总结
Redis集群是Redis的分布式解决方案。掌握Redis集群的搭建和管理,可以构建高可用、高性能的缓存系统。