Spring-Data-Redis连接模式

Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。

一、Redis 单机模式

最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用,

配置LettuceConnectionFactory或JedisConnectionFactor,如下例所示:

复制代码
@Configuration
class RedisStandaloneConfiguration {

  /**
   * Lettuce
   */
  @Bean
  public RedisConnectionFactory lettuceConnectionFactory() {
    return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
  }

  /**
   * Jedis
   */
  @Bean
  public RedisConnectionFactory jedisConnectionFactory() {
    return new JedisConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
  }
}

二、写入主机,从副本读取

Redis主/副本设置-无自动故障转移(有关自动故障转移,请参阅:Sentinel)-不仅允许将数据安全存储在更多节点上。它还允许通过使用Lettuce从副本中读取数据,同时将写入推送到主服务器。您可以使用LettuceClientConfiguration设置要使用的读/写策略,如下例所示:

复制代码
@Configuration
class WriteToMasterReadFromReplicaConfiguration {

  @Bean
  public LettuceConnectionFactory redisConnectionFactory() {

    LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
      .readFrom(REPLICA_PREFERRED)
      .build();

    RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("server", 6379);

    return new LettuceConnectionFactory(serverConfig, clientConfig);
  }
}

三、Redis Sentinel

为了处理高可用Redis,Spring Data Redis支持Redis Sentinel,使用RedisSentinelConfiguration,如下例所示:

复制代码
/**
 * Lettuce
 */
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
  RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
  .master("mymaster")
  .sentinel("127.0.0.1", 26379)
  .sentinel("127.0.0.1", 26380);
  return new LettuceConnectionFactory(sentinelConfig);
}

/**
 * Jedis
 */
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
  RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
  .master("mymaster")
  .sentinel("127.0.0.1", 26379)
  .sentinel("127.0.0.1", 26380);
  return new JedisConnectionFactory(sentinelConfig);
}

RedisSentelConfiguration也可以通过RedisSentilConfiguration.of(PropertySource)定义,它允许您选取以下属性:

配置属性

  • spring.redis.sentinnel.master:主节点的名称。
  • spring.redis.sentinnel.nodes:主机:端口对的逗号分隔列表。
  • spring.redis.sentinnel.username:使用redis sentinel进行身份验证时要应用的用户名(需要redis 6)
  • spring.redis.sentinnel.password:使用redis sentinel进行身份验证时应用的密码
  • spring.redis.sentinnel.dataNode.username:使用redis数据节点进行身份验证时要应用的用户名
  • spring.redis.sentinnel.dataNode.password:使用redis数据节点进行身份验证时要应用的密码
  • spring.redis.sentinnel.dataNode.database:redis数据节点身份验证时应用的数据库索引

有时,需要与其中一个哨兵直接互动。使用RedisConnectionFactory.getSentinelConnection()或RedisConnection。getSentinelCommands()可以访问配置的第一个活动Sentinel。

四、Redis Cluster

集群支持基于与非集群通信相同的构建块。RedisClusterConnection是RedisConnection的扩展,它处理与Redis Cluster的通信,并将错误转换为Spring DAO异常层次结构。RedisClusterConnection实例是使用RedisConnectionFactory创建的,必须使用关联的RedisClisterConfiguration进行设置,如下例所示:

复制代码
@Component
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class ClusterConfigurationProperties {

    /*
     * spring.redis.cluster.nodes[0] = 127.0.0.1:7379
     * spring.redis.cluster.nodes[1] = 127.0.0.1:7380
     * ...
     */
    List<String> nodes;

    /**
     * Get initial collection of known cluster nodes in format {@code host:port}.
     *
     * @return
     */
    public List<String> getNodes() {
        return nodes;
    }

    public void setNodes(List<String> nodes) {
        this.nodes = nodes;
    }
}

@Configuration
public class AppConfig {

    /**
     * Type safe representation of application.properties
     */
    @Autowired ClusterConfigurationProperties clusterProperties;

    public @Bean RedisConnectionFactory connectionFactory() {

        return new LettuceConnectionFactory(
            new RedisClusterConfiguration(clusterProperties.getNodes()));
    }
}

RedisClusterConfiguration也可以通过RedisClisterConfiguration.of(PropertySource)定义,它允许您选取以下属性:

配置属性

  • spring.redis.cluster.nodes:主机:端口对的逗号分隔列表。
  • spring.redis.cluster.max-redirects:允许的集群重定向数。
相关推荐
Ting-yu5 分钟前
SpringCloud快速入门(10)---- Sentinel(应用场景&控制台安装)
spring·spring cloud·sentinel
JAVA学习通2 小时前
北京明光云振铎数据科技Java面经
java·开发语言·科技
贫民窟的勇敢爷们8 小时前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
Mahir089 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
AC赳赳老秦9 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主9 小时前
Java基础:list、set、map一遍过
java·开发语言
灵犀学长9 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
多加点辣也没关系10 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
好家伙VCC11 小时前
【无标题】
java
数据库小学妹11 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba