J*a如何使用Lettuce客户端在Redis主从模式下执行命令


1 redis主从复制的概念

在多机环境下,一个redis服务接收写命令,并在自身数据和状态发生变化时将其复制到一个或多个redis。这种模式称为主从复制。通过命令sl*eof,在redis中可以让一个redis服务器复制另一个redis服务器的数据和状态。我们将主服务器称为master,从服务器称为sl*e。

主从复制保证了网络异常正常时,网络断开重的情况下将数据复制。网络正常时master会通过发送命令保持对sl*e更新,更新包括客户端的写入,key的过期或被逐出等网络异常,master与sl*e连接断开一段时间,sl*e重连上master后会尝试部分重同步,重新获取连接断开期间丢失的命令。当无法进行部分重同步,则会执行全量重同步。

2 为什么需要主从复制

为了保证数据不丢失,有时会用到持久化功能。但这样会增加磁盘IO操作。使用主从复制技术可以取代持久化,减少IO操作,从而降低延迟并提高性能。

主从模式下,master负责处理写,sl*e负责读。尽管主从同步可能会导致数据不一致,但它可以提高读操作的吞吐量。主从模式避免了redis单点风险。通过副本提高系统可用性。如果主节点挂掉,通过从节点选举新的节点作为主节点以确保系统可用。

3 主从复制配置及原理

主从复制可以分为三个阶段:初始化、同步、命令传播。

当服务器执行完sl*eof命令后,从服务器与主服务器建立套接字连接,完成初始化。如果主服务器正常,建立连接后会通过ping命令进行心跳检测并返回响应。当发生故障并收不到响应时,从节点将会重新尝试与主节点进行连接。如果master设置了认证信息,则会再检查认证数据是否正确。如果认证失败,则会报错。

在初始化完成之后,当master接收到sl*e的数据同步指令时,需要根据情况来确定是执行全量同步还是部分同步。

在同步完成后, 主服务器和从服务器通过心跳检测确认彼此的在线状态,以进行命令传输。sl*e同时向master发送自己复制缓冲区的偏移量。根据这些请求,master会判断是否需要将新产生的命令同步到sl*e。sl*e收到同步的命令后执行,最终与master保持同步。

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion

4 使用Lettuce在主从模式下执行命令

Jedis、Redission和Lettuce是常见的J*a Redis客户端。这里将通过Lettuce来演示主从模式下的读写分离命令执行。

        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>

下面通过

package redis;
import io.lettuce.core.ReadFrom;
import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.codec.Utf8StringCodec;
import io.lettuce.core.mastersl*e.MasterSl*e;
import io.lettuce.core.mastersl*e.StatefulRedisMasterSl*eConnection;
import org.assertj.core.util.Lists;
 class MainLettuce {
    public static void main(String[] args) {
        List<RedisURI> nodes = Lists.newArrayList(
                RedisURI.create("redis://localhost:7000"),
                RedisURI.create("redis://localhost:7001")
        );
        RedisClient redisClient = RedisClient.create();
        StatefulRedisMasterSl*eConnection<String, String> connection = MasterSl*e.connect(
                redisClient,
                new Utf8StringCodec(), nodes);
        connection.setReadFrom(ReadFrom.SL*E);
        RedisCommands<String, String> redisCommand = connection.sync();
        redisCommand.set("master","master write test2");
        String value = redisCommand.get("master");
        System.out.println(value);
        connection.close();
        redisClient.shutdown();
    }
}

补充:Redis 客户端之Lettuce配置使用(基于Spring Boot 2.x)

开发环境:使用Intellij IDEA + M*en + Spring Boot 2.x + JDK 8

Spring Boot 从 2.0版本开始,将默认的Redis客户端Jedis替换问Lettuce,下面描述Lettuce的配置使用。

1.在项目的pom.xml文件下,引入Redis在Spring Boot 下的相关Jar包依赖

    <properties>
        <redisson.version>3.8.2</redisson.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
    </dependencies>

2.在项目的resources目录下,在application.yml文件里添加lettuce的配置参数

#Redis配置
spring:
  redis:
    database: 6  #Redis索引0~15,默认为0
    host: 127.0.0.1
    port: 6379
    password:  #密码(默认为空)
    lettuce: # 这里标明使用lettuce配置
      pool:
        max-active: 8   #连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms  #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 5     #连接池中的最大空闲连接
        min-idle: 0     #连接池中的最小空闲连接
    timeout: 10000ms    #连接超时时间(毫秒)

3.添加Redisson的配置参数读取类RedisConfig

package com.dbfor.redis.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    /**
     * RedisTemplate配置
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());//key序列化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//value序列化
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

4.构建Spring Boot的启动类RedisApplication

package com.dbfor.redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class);
    }
}

5.编写测试类RedisTest

package com.dbfor.redis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
@Component
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void set() {
        redisTemplate.opsForValue().set("test:set1", "testValue1");
        redisTemplate.opsForSet().add("test:set2", "asdf");
        redisTemplate.opsForHash().put("hash2", "name1", "lms1");
        redisTemplate.opsForHash().put("hash2", "name2", "lms2");
        redisTemplate.opsForHash().put("hash2", "name3", "lms3");
        System.out.println(redisTemplate.opsForValue().get("test:set"));
        System.out.println(redisTemplate.opsForHash().get("hash2", "name1"));
    }
}

6.在Redis上查看运行结果

以上就是J*a如何使用Lettuce客户端在Redis主从模式下执行命令的详细内容,更多请关注其它相关文章!


# 是一个  # 大型网站建设路  # 网店网站推广运营  # 圣诞树营销推广文案范文  # 新乡网站推广优化价格低  # 济南seo相关网站  # seo分析网站源代码  # 舟山医疗网站建设平台  # seo的读音  # 白宫网站建设美丽文案  # SEO0011的意思  # 连接池  # Java  # 池中  # 单点  # 后会  # 购物车  # 则会  # 模式下  # 客户端  # 如何使用  # lettuce  # redis 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  《星露谷物语》克林特好感度事件介绍  《三国:谋定天下》平民全阶段通用阵容  百度识图图像分析 百度识图识别平台  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  《360浏览器》自动保存账号密码设置方法  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  家里的小飞虫总是不断,用什么方法可以彻底根除?  《偃武》甘宁技能详解  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  123网页端官方登录页 123邮箱网页版即时通讯服务  Yandex世界探索 最新官方免登录入口全知道  PHP中获取HTTP响应状态消息:方法与限制  《小宇宙》标记不友善评论方法  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  《合金装备4》有望推出重制版!制作人发话了  嘀嗒顺风车如何开具电子发票  《气泡星球》兑换码礼包大全  J*aScript大数运算_BigInt使用指南  XPath动态元素定位:如何精准选择文本内容变化的元素  LINUX怎么查看显卡信息_LINUX查看GPU状态  J*aScript模块加载器_RequireJS原理分析  优化 React onClick 事件处理:函数引用与箭头函数的对比  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  铁路12306座位怎么选_12306官方选座操作方法  《下一站江湖2》风神腿获取攻略  优化响应式标题底部边框:CSS实现技巧与最佳实践  行者app怎样导出日志  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  Keras中Convolution2D层及其核心辅助层详解  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  《金山词霸》语音翻译方法  poki官网最新入口 poki小游戏大全入口  汽水音乐车机版 汽水音乐车机版官方入口  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  键盘保修需要什么_键盘售后维修流程  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  《百度畅听版》关闭兴趣推荐方法  解决CSS布局中意外顶部空白问题的教程  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  《波斯王子:失落的王冠》剑术大师打法攻略  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  银信通自动开通原因揭秘  基于键值条件高效映射 Pandas DataFrame 多列数据  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  电脑开不了机怎么办 电脑无法开机的解决方法  蜻蜓FM如何设置移动流量播放  Retrofit根路径POST请求:@POST("/") 的应用与解析  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程 

 2023-05-31

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.