Lettuce

聊聊spring-data-redis的连接池的校验

我是研究僧i 提交于 2019-12-03 01:59:26
序 本文主要研究一下spring-data-redis的连接池的校验 lettuce LettucePoolingConnectionProvider spring-data-redis/2.0.10.RELEASE/spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java class LettucePoolingConnectionProvider implements LettuceConnectionProvider, RedisClientProvider, DisposableBean { private static final Log log = LogFactory.getLog(LettucePoolingConnectionProvider.class); private final LettuceConnectionProvider connectionProvider; private final GenericObjectPoolConfig poolConfig; private final Map<StatefulConnection<?, ?>

spring-data-redis中JedisCluster不支持pipelined问题解决

ぃ、小莉子 提交于 2019-12-02 02:52:28
摘要: 引言 了解Jedis的童鞋可能清楚,Jedis中JedisCluster是不支持pipeline操作的,如果使用了redis集群,在spring-boot-starter-data-redis中又正好用到的pipeline,那么会接收到Pipeline is currently not supported for JedisClusterConnection.这样的报错。 引言 了解Jedis的童鞋可能清楚,Jedis中 JedisCluster 是不支持pipeline操作的,如果使用了redis集群,在 spring-boot-starter-data-redis 中又正好用到的pipeline,那么会接收到 Pipeline is currently not supported for JedisClusterConnection. 这样的报错。错误来自于 org.springframework.data.redis.connection.jedis.JedisClusterConnection : /* * (non-Javadoc) * @see org.springframework.data.redis.connection.RedisConnection#openPipeline() */ @Override public void openPipeline

Redis is single thread. Then why should I use lettuce?

荒凉一梦 提交于 2019-12-01 12:22:08
After Redis 4.0, Redis can execute multi thread some functions (1. deleting objects in backgrounds, etc.), but Redis still usually uses single thread. FAQ - Redis So I guess lettuce is useless. Lettuce is redis client that can use multiple threads in 1 connections, but Redis can use only single thread in 1 connection. Can you recommend to use lettuce for Redis client? Why? Because you spend time not only while Redis executes commands, but also transferring data (sending commands, recieving results). In single thread mode while you transfer, Redis doesn't work. While Redis works, no transfer

Redis is single thread. Then why should I use lettuce?

六月ゝ 毕业季﹏ 提交于 2019-12-01 11:32:11
问题 After Redis 4.0, Redis can execute multi thread some functions (1. deleting objects in backgrounds, etc.), but Redis still usually uses single thread. FAQ - Redis So I guess lettuce is useless. Lettuce is redis client that can use multiple threads in 1 connections, but Redis can use only single thread in 1 connection. Can you recommend to use lettuce for Redis client? Why? 回答1: Because you spend time not only while Redis executes commands, but also transferring data (sending commands,

Springboot Redis详解

大城市里の小女人 提交于 2019-11-30 04:23:52
1. 在springboot中使用redis,只需要依赖spring-boot-starter-data-redis,然后在配置文件中配置spring.redis开头的一些配置,根据Redis的架构选择单节点,主从或集群模式,详情如下(2.0.0.REALSE): # 单节点模式,无密码时置空或者不写配置,可以使用url,也可以使用host和port spring.redis.database=0 # Database index used by the connection factory. spring.redis.url= # Connection URL. Overrides host, port, and password. User is ignored. Example: redis://user:password@example.com:6379 spring.redis.host=localhost # Redis server host. spring.redis.port=6379 # Redis server port. spring.redis.password= # Login password of the redis server. #主从模式 spring.redis.sentinel.master= # Name of the Redis

关于Springboot微服务使用Apollo配置管理中心的热刷新问题

纵然是瞬间 提交于 2019-11-29 18:03:51
近日,公司项目中使用携程网的Apollo配置管理中心进行统一配置管理,为了方便环境部署和运维,能避免很多配置问题导致的环境部署错误;很多网友估计都用过Apollo; 在我们项目组使用前做了一些预研,发现还需要解决连接池的热刷新问题,否则意味着Apollo的portal界面上修改配置后还得重启服务才能生效; 可能很多人会说,Apollo配置管理中心本身就支持配置的热刷新,但是,这只适用于普通应用场景(如一些不需要复杂的初始化操作的组件和spring-boot默认支持的组件); 对于Druid连接池、Jedis连接池、Lettuce连接池等等之类的组件,实现配置的热刷新仍然需要自己做一些代码适配; 网上有热心网友也给出了一些对通用配置的热刷新代码实现,这种方式对spring-boot默认集成的第三方组件是有效的,比如spring-boot 2.x的默认数据库连接池 Hikari(其实查看源代码就能发现,spring-boot为它监听了EnvironmentChangeEvent事件并实现了热刷新逻辑); 那么,对基于Apollo配置管理中心的Druid连接池、Jedis连接池、Lettuce连接池等等之类的客户端组件热刷新问题如何解决呢? 本文暂时只给出思路,详细代码后续会放出来;实现方法步骤如下: 1. 编写配置监听器

spring-boot 使用lettuce redis客户端

巧了我就是萌 提交于 2019-11-29 17:20:48
config类: package net.loyin.cloud.upms.config; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.*; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data

聊聊redis的HealthIndicator

て烟熏妆下的殇ゞ 提交于 2019-11-28 19:47:03
序 本文主要研究一下redis的HealthIndicator RedisHealthIndicator spring-boot-actuator-2.0.4.RELEASE-sources.jar!/org/springframework/boot/actuate/redis/RedisHealthIndicator.java public class RedisHealthIndicator extends AbstractHealthIndicator { static final String VERSION = "version"; static final String REDIS_VERSION = "redis_version"; private final RedisConnectionFactory redisConnectionFactory; public RedisHealthIndicator(RedisConnectionFactory connectionFactory) { super("Redis health check failed"); Assert.notNull(connectionFactory, "ConnectionFactory must not be null"); this.redisConnectionFactory =

Redis 常用的分布式缓存集群模式

℡╲_俬逩灬. 提交于 2019-11-27 19:33:25
本文为《持续演进的 Cloud Native》的一篇学习记录。 一、Redis 自带的集群功能(Redis Cluster) 优势: 1. 去中心化 元数据分布在所有节点,不会轻易丢失。 2. 部署简单 Redis 自带的 redis-cli 即可。 3. 性能高 因为不必通过代理。 劣势: 1. SDK 复杂 不是大问题。Lettuce 和 Spring Data Redis(底层也是 Lettuce)对它有很好支持。 2. 没有良好的界面管理 目前官方有个简单的界面管理。如果需要,可以定制修改或自研。 3. 不一致问题 在主从异步、重新选主的过程中,Redis 集群不保证强一致性。当发生网络分区的时候,如果主服务器恰好在少数节点,实际上有一个可以继续写入的时间窗口。当多数节点完成重新选主,而网络分区恢复之后,会覆盖旧的主服务器在这个时间窗口内所写的数据。 4. gossip 协议的性能问题 当节点很多时,gossip 协议的报文会占据比较大的带宽。 注:目前最新版的 Redis 自带集群已经可以在 NAT 后面工作了。 二、客户端模式 客户端做负载均衡,并且直连 Redis 节点。 用 etcd 等作为注册发现服务,可实现 Redis 节点的动态改变(增删节点,节点扩容)。 优势: 1. 数据分散 将数据分到多个节点,整体容量得到了提升。 当一个节点不可用时,只有 1/n

springboot 2.0 Redis command timed out的解决

≡放荡痞女 提交于 2019-11-27 07:21:10
环境:springboot 2.0.7 spring data redis springboot从1.x升级到2.x后,spring data redis使用的redis客户端驱动从1.x的jedis换到lettuce 使用过程中,出现Redis command timed out报错,网上搜索后,很多文章都说配置项spring.redis.timeout在1.x可以设为0代表无限超时时间,而2.x必须要设置一个大于0的数,按此配置后确实正常了一段时间,但还是偶尔出现这问题 此时问题的症状是: timed out报错的时机不确定,但一个较高几率的情况是,功能很久没用时,第一次用报错几率很高,然后第二次以后就正常 报错时一触发功能就报错,根本不像是超时,要等待一段时间才报错 最终解决方法是,把redis驱动换回jedis ,具体方法请百度这里不展开 PS:在lettuce的github的issue有几个此问题的讨论,很多人跟我的情况也是一样出现timed out但都找不到规律和原因,而且讨论到结尾也没结果,只能认为是lettuce的bug. 来源: oschina 链接: https://my.oschina.net/u/1251858/blog/3033013