Lettuce

Spring Boot 2.3.0 新特性Redis 拓扑动态感应

大憨熊 提交于 2020-08-11 07:31:52
本文为原创文章。欢迎任何形式的转载,但请务必注明出处 冷冷 https://lltx.github.io。 Spring Boot 2.3 新特性优雅停机详解 Spring Boot 2.3 新特性分层 JAR 本篇是 spring boot v2.3 系列第三篇,来分享一下 v2.3 关于 spring data redis 的故障转移优化。 背景 关于 Redis 在生产中我们一般情况下都会选择 redis cluster 高可用架构部署,既能保证数据分片并且实现节点的故障自动转移。 基本部署拓扑如下: 创建测试集群 这里通过我封装的 pig4cloud/redis-cluster:4.0 镜像,即可构建一个 6 个节点的 redis cluster 测试环境。 docker run --name redis-cluster -d -e CLUSTER_ANNOUNCE_IP=宿主机IP \ -p 7000-7005:7000-7005 -p 17000-17005:17000-17005 pig4cloud/redis-cluster:4.0 查看集群节点信息 ⋊> ./redis-cli -h 172.17.0.111 -p 7000 -c 16:09:48 172.17.0.111:7000> cluster nodes

确定不来看看——自动化框架如何搭建?自动化测试脚本怎么写?老司机帮你搞定!

筅森魡賤 提交于 2020-08-10 18:19:18
一、何为框架?何为自动化测试框架? 无论是日常技术交流,还是在自动化测试实践中,经常会听到一个词叫:框架。之前对“框架”这个词知其然不知其所以然。现在看过一些资料以及加上我自己的一些实践有了我自己的一些看法。 那么:什么是框架? 在自动化实践过程中,框架就是一个半成品,框架是指对应用系统的部分设计或实现系统的部分结构。 举个栗子:selenium是不是一个框架?Yes,它是一个框架,那么这个框架能不能对一个指定的系统比如淘宝做自动化测试?答案是不能的,我们还必须使用这个框架封装好的方法去实现淘宝的业务逻辑。所以说框架就是封装好的一个半成品。 那么:什么是自动化测试框架? 自动化测试框架就是:为了对一个指定的系统做自动化测试而封装的一个半成品,自动化测试攻城狮可以调用这个半成品封装好的方法去实现一个指定系统的自动化测试! 还是不明白?没关系,下面一张图道破玄机!下面这个照片框架请问是不是一个 半成品 ?不是一个完整的照片?但是它又是整个照片的一部分! 欢迎加入:642830685,群,领取最新的面试题资料和Python自动化测试接口、框架搭建方面资料 二、根据驱动模式不同自动化测试框架分为四种模式。 ( 1) 数据驱动框架 (2) 关键字驱动框架 (3) 数据驱动+关键字驱动混合型驱动框架 (4) 行为驱动(lettuce)测试框架 三、自动化测试框架如何实现(数据驱动框架) 1

一文读懂 Redis 分布式部署方案

穿精又带淫゛_ 提交于 2020-08-09 11:31:18
为什么要分布式 Redis是一款开源的基于内存的K-V型数据库,因为内存访问速度快,一般被用来做系统的缓存。 Redis作为单机部署能够支持业务简单,数据量不大的系统需求,但在实际应用中,一旦系统规模上来,单机的Redis就会遇到下面的挑战: 伸缩性。系统随着长期运行与业务增长,对Redis存储的数据量需求也越来越大,单机必然受限于服务器的内存与磁盘大小。 高性能。系统规模变大后,对Redis的吞吐量需求也会提高,而单机的吞吐量必然有限,这种情况会影响整体系统的性能。 高可用。Redis持久化机制一定程度上能缓解单点问题,但是需要花费时间去恢复,在恢复的过程中服务可能不可用,或者数据会有丢失。 分布式解决方案 分布式的解决方案对于业内是通用的: 水平拆分。单点的一个重要挑战就是数据量大的时候单点存储不够。直接的想法就是部署多个实例,将需要存储的数据分散存储到各个实例中。当实例存储空间不够时,继续扩大实例个数就可以解决数据伸缩性问题。同时这种数据水平拆分的方法也可以解决单机性能问题,因为不同的数据读写可以分配到不同的实例。 主从复制。如果只有水平拆分,如果其中一个实例出现了问题,那该实例上存储的数据都不可访问,还是存在可用问题。为此可以进行所有数据的主备复制,同一份数据可以有多个副本,当某个实例出现问题时,可以启用该实例的副本,达到高可用的目的。同时副本也可以帮助提高系统的吞吐能力

SpringBoot redis GEO 实战应用

喜你入骨 提交于 2020-08-07 16:46:25
上篇文章( Redis地理算法GEO解析和应用 )我们对redis GEO算法进行解析以及相关shell命令的使用,这篇文章将带你进行实战应用。 依赖 注:jedis可以不引入,这里只是为了方便查看源码进行解析 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.0.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <!-- 方便查看源码 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency> 数据源配置 spring: redis: host: localhost

Redis 中的 Java 客户端(Jedis / Lettuce)

喜夏-厌秋 提交于 2020-07-29 09:49:30
本文学习使用 Java 客户端( Jedis / Lettuce ) 操作 Redis 。 1 开启远程连接 Redis 默认是不支持远程连接的,需要手动开启,修改 redis.conf ,主要有 3 个地方改动: vi /usr/local/redis-5.0.8/redis.conf # bind 127.0.0.1 protected-mode no requirepass 123456 之后重新启动 Redis 。 2 Jedis 2.1 基本使用 Jedis 的 GitHub 地址: https://github.com/xetorthio/jedis 。 首先创建一个普通的 Maven 项目 redis-jedis ,项目创建成功后,添加 Jedis 依赖: <dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13<

对比Memcached和Redis,谁才是适合你的缓存?

孤街醉人 提交于 2020-07-28 11:23:56
Memcached vs Redis 近期公司采购软件,评估时,某软件谈到使用了 Memcached 和 Redis 缓存。在本文中,将研究这两个流行的缓存的异同,方便理解和记忆。 1. Memcached 与 Redis 通常,我们会考虑在处理大量数据时使用** 缓存 提高性能。** Memcached 是一个分布式内存缓存系统,设计简单易用,非常适合用作缓存或会话存储。 Redis 是一个内存中的数据结构存储,它提供了一系列丰富的特性。它作为缓存、数据库、消息代理和队列非常有用。 2. 安装 2.1. 安装 Memcached 下载最新版的 Memcached 包并执行make进行安装 : $ wget http://memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install 2.2. 安装 Redis 相似的, 安装最新版本的 Redis server : $ wget http://download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $

Redis 分布式锁(一)

这一生的挚爱 提交于 2020-07-28 06:38:48
前言 本文力争以最简单的语言,以博主自己对分布式锁的理解,按照自己的语言来描述分布式锁的概念、作用、原理、实现。如有错误,还请各位大佬海涵,恳请指正。分布式锁分两篇来讲解,本篇讲解客户端,下一篇讲解redis服务端。 概念 如果把分布式锁的概念搬到这里,博主也会觉得枯燥。博主这里以举例的形式来描绘它。 试想一种场景,在一个偏远小镇上的火车站,只有一个售票窗口。 火车站来了10名旅客,前往售票窗口购买火车票,旅客只能排队购票,排到第一的旅客,可以与售票员沟通,买票。 好啦,以上就是一个分布式锁的场景,我们来分析一下每一个细节。 每位旅客可以理解为一个系统或者线程。他们在竞争售票员的工作时间。 是不是觉得分布式锁也不是什么高大上的概念。有同学会问,锁到底在哪里呢?还是买票场景,我们看看锁长什么样子。 我们深入想一下,这10位旅客本来是并行的(没有买票前,他们有的在吃饭,有的在玩手机,等等等),而到了买票的时候,就必须排队(串行),而不是一起买票。 没错,就是在特定的场景下,将并行的场景,变成串行,就是分布式锁的奥义所在。 作用 分布式锁的作用不但非常大,而且非常多。 在软件设计中,比如电商秒杀活动。商家预备了1000件货物,也就只有这1000件货,有1500人参与秒杀,可以理解为1500个线程来排队购买商品。那就必须将这1500个线程排个队(比如按照时间),设置一把锁,一个购买过程结束

Redis哨兵

为君一笑 提交于 2020-07-28 04:02:50
博主之前写了一篇Redis哨兵搭建,并没有对哨兵进行讲解,本篇填坑。 同时,也为博主写Redis分布式锁(二)做一些前置知识。 挖坑位置: Redis集群搭建(哨兵) Redis主从 在讲redis哨兵前,需要先简单讲解一下redis主从。 俗话说,鸡蛋放在一个篮子里容易碎,那就把鸡蛋复制一份,放到其他篮子里。所有的高可用基本都是这个思路。 上一篇文章讲主从配置的时候,讲到一个配置属性slaveof # 这个配置是redis-1中没有的,需要在redis-2中新增 # 这里的IP是redis-1的IP地址,端口是redis-1 6379.conf配置文件中port的值,默认值是6379 slaveof 1.1.1.1 6379 这个属性就是配置redis主从的。 这里分析以下上面这张图,可以发现以下几个特点 客户端可以从三个redis中读取数据 只有主库可以写入数据(抱歉,这个没有在图中体现) 两个从库从主库中读取数据 这种redis架构解决了以下问题 主库宕机,仍然可以在从库中读取数据,一定程度上提高了可用性 如果三个redis运行正常,数据应该一致 读取的压力分担到了3个节点上 存在以下几个问题 主库宕机,不能写入 主库不能自动切换,需要手动切换 ※主库写入数据成功,还没来得及同步到从库,主库宕机 基于以上的一些问题,我们引出了redis哨兵 Redis哨兵

org.springframework.data.redis.RedisSystemException报错

耗尽温柔 提交于 2020-07-26 23:40:40
重启服务器在连接redis数据库时报错:org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. 究其原因是因为强制把redis快照关闭了导致不能持久化的问题,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。 有两种修改方法

SpringBoot 配置Redis

北城余情 提交于 2020-04-30 14:02:28
官方文档地址: https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#why-spring-redis 环境 Springboot 2.1.0.RELEASE 1、添加jar包: <!--对redis的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>   spring-boot-starter-data-redis中包含的依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.0.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis<