Spring Data Redis

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

spring data与jpa

孤者浪人 提交于 2019-12-01 19:58:50
sring data:spring底层默认进行数据访问采用的一个技术,是spring官方提供的用来简化数据访问的一个项目,在这个项目里有非常多的模块,能简化各种数据层的操作,比如spring date jpa简化关系型数据库的操作,spring data mongodb的操作,spring data redis等, spring date的理想就是统一数据层访问的api,spring data提供一些respository接口,有了spring data,我们的 应用程序只要面对spring data编程 spring data jpa:java持久化api,是叫J2EE的一个规范,操作关系型数据库,spring data预留接口,操作去实现spring data的接口就可以了 来源: oschina 链接: https://my.oschina.net/u/3788556/blog/1852853

SpringBoot集成Redis引起的序列化问题

老子叫甜甜 提交于 2019-11-30 19:47:52
想必大家对SpringBoot可能已经很熟悉了,包括集成Redis这种常用的技术,之前一直用一贯的写法去集成Redis,写配置类没发现过任何问题,但是上周在给Redis配置类加了一个Bean之后就出现了很难发现的问题。 配置类代码 `@Configuration public class RedisConfig extends CachingConfigurerSupport { [@Bean](https://my.oschina.net/bean) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class

68、Spring Data Redis

佐手、 提交于 2019-11-30 12:27:59
SpringDataRedis是Spring大家族中的一部分,提供了在Spring应用中通过简单的配置访问redis服务,对redis底层开发包进行了高度封装,RedisTemplate提供了redis各种操作,异常处理及序列化,支持分布订阅,并对spring3.1cache进行了实现。 SpringDataRedis提供的功能: 1、连接池自动管理,提供了一个高度封装的RedisTemplate类 2、针对Jedis客户端中大量的API进行了归类封装,将同一类型操作封装为operation接口 ValueOperations:简单K-V操作 SetOperations:set类型数据操作 ZSetOperations:zset类型数据操作 HashOperations:针对map类型的数据操作 ListOperations:针对list类型的数据操作 入门案例: 1、导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

redis(三)与spring整合

半腔热情 提交于 2019-11-30 07:39:51
一、 JAVA操作redis通常使用的是Jedis,通过java代码来操作redis的数据存储读取等操作,用过的人应该知道,Jedis客户端已经足够简单和轻量级了,但是呢,在此同时,Spring也为Redis提供了支持,就是在Spring-data模块中的Spring-Data-Redis(SDR),它一部分是基于Jedis客户端的API封装,另一部分是对Spring容器的整合。 springdata的一些资料: 资料: http://projects.spring.io/spring-data-redis/ 文档: https://docs.spring.io/spring-data/redis/docs/1.8.6.RELEASE/reference/html/ 前提你的ssm已经搭建好(其实就是redis与spring的整合) 二、整合 1、pom中引入相应的jar包 <!--reids--> <spring.redis.version>1.6.0.RELEASE</spring.redis.version> <jedis.version>2.7.2</jedis.version> <commons.version>2.4.2</commons.version> <!--redis--> <!-- config redis data and client jar-->

Spring-data-redis + redis 分布式锁(一)

偶尔善良 提交于 2019-11-30 06:22:25
分布式锁的解决方式 基于数据库表做乐观锁,用于分布式锁。(适用于小并发) 使用memcached的add()方法,用于分布式锁。 使用memcached的cas()方法,用于分布式锁。(不常用) 使用redis的setnx()、expire()方法,用于分布式锁。 使用redis的setnx()、get()、getset()方法,用于分布式锁。 使用redis的watch、multi、exec命令,用于分布式锁。(不常用) 使用zookeeper,用于分布式锁。(不常用) 这里主要介绍第四种和第五种: 使用redis的setnx()、expire()方法,用于分布式锁 原理 对于使用redis的setnx()、expire()来实现分布式锁,这个方案相对于memcached()的add()方案,redis占优势的是,其支持的数据类型更多,而memcached只支持String一种数据类型。除此之外,无论是从性能上来说,还是操作方便性来说,其实都没有太多的差异,完全看你的选择,比如公司中用哪个比较多,你就可以用哪个。 首先说明一下setnx()命令,setnx的含义就是SET if Not Exists,其主要有两个参数 setnx(key, value)。该方法是原子的,如果key不存在,则设置当前key成功,返回1;如果当前key已经存在,则设置当前key失败,返回0

Redis scan命令的一次坑

為{幸葍}努か 提交于 2019-11-29 15:34:01
Redis作为当前服务架构不可或缺的Cache,其支持丰富多样的数据结构,Redis在使用中其实也有很多坑,本次博主遇到的坑或许说是Java程序员会遇到的多一点,下面就听博主详细道来。 线上服务堵塞 String key = keyOf(appid); int retryCount = 3; int socketRetryCount = 3; Exception ex = null; while(retryCount > 0 && socketRetryCount > 0) { try { return redisDao.getMap(key); }catch (Exception e) { } } 12月2日被告知服务出现异常,查看日志发现其运行到上述代码getMap方法处后日志就没有内容了。 问题分析 "pool-13-thread-6" prio=10 tid=0x00007f754800e800 nid=0x71b5 waiting on condition [0x00007f758f0ee000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0000000779b75f40> (a java.util

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

cachecloud 使用几个月的情况与坑

让人想犯罪 __ 提交于 2019-11-26 21:21:36
前言 单集群redis cluster 转 cachecloud 几个月来,遇到一些情况与问题的总结. 版本问题 mysql 升级到5.7 默认 cachecloud 底层 db mysql 版本为:MySQL 5.5,升级 mysql 到5.7后出现不兼容sql.例如: select any_value(app_id) app_id,instance_id,any_value(instance_host) instance_host,any_value(instance_port) instance_port,count(1) as exceptionCount from app_client_exception_minute_stat 解决方案1 修改 mysql 参数,使其兼容老版本. 解决方案2 修改对应 mysql, 我们选择的就是这个方案.只要修改 AppStatsDao.xml AppClientCostTimeTotalStatDao.xml AppClientExceptionStatDao.xml 三个 xml 中不兼容函数即可. redis 版本问题 默认cachecloud-init.sh 初始化机器中 redis 版本为 redis-3.0.7.tar.gz.当我升级 redis 到一个较高版本redis-3.2.11.tar.gz时候.出现 bug.