1.Redis概述 1.1介绍 官网:https://redis.io/ Redis是一个开源的使用ANSIC语言编写.支持网络.可基于内存 亦可持久化的日志型.Key-Value型的高性能数据库. 1.2特性 1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储. 3.Redis支持数据的备份,是单线程的. 2.Redis下载与…
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber). 为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 channel (频道)作为两者的中介 —— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当…
起因 前两天上线了一个新功能,导致线上业务的缓存总是无法更新,报错也是非常奇怪,redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply: 5,google到的原因是Spring data redis中的scan操作,它获取了redis的连接之后,在操作没有完全结束之前就把redis连接放回连接池,其它线程从连接池里复用该连接时,会导致数据读取的错误. bug修复 官方维护人员在src/main/java/org…
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber). 为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 channel (频道)作为两者的中介 —— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当…
前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级别的抽象,来发送和接收消息.你会注意到它与Spring框架对JDBC的支持有些类似. 为什么选择Spring Data Redis? Spring框架,是引领潮流的全栈Java/JEE应用框架.它提供了一个轻量级容器,一种非侵入式的编程模型 -- 这是由依赖注入.AOP.以及便携的服务抽象开启的.   SDR…
[编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis 当作数据库的用例 现在我们来看看在服务器端 Java 企业版系统中把 Redis 当作数据库的各种用法吧.无论用例的简繁,Redis 都能帮助用户优化性能.处理能力和延迟,让常规 Java 企业版技术栈望而却步. 1. 全局唯一增量计数器 我们先从一个相对简单的用例开始吧:一个增量计数器,可显示某网…
[编者按]本文作者为 Xinyu Liu,详细介绍了 Redis 的特性,并辅之以丰富的用例.在本文的第一部分,将重点概述 Redis 的方方面面.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 建立在 Java 企业版之上的多层体系结构是强大的服务器端编程解决方案.作为一名从业多年的 Java 企业版开发人员,我最满意的就是三层企业开发法:最下方是 JPA/Hibernate 持久层,中间是 Spring 或 EJB 应用层,最上方则是 web 层.对于较为复杂的用例,我用 BPM(…
本文是从为知笔记上复制过来的,懒得调整格式了,为知笔记版本是带格式的,内容也比这里全.点这里 为知笔记版本 Spring Data Redis 学习 Version 1.8.4.Release 前言 1.新功能 1.1.Spring Data Redis 1.8 新特性 1.2.Spring Data Redis 1.7 新特性 1.3.Spring Data Redis 1.6 新特性 1.4.Spring Data Redis 1.5 新特性 介绍 2.为什么选择Spring Data Re…
前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级别的抽象,来发送和接收消息.你会注意到它与Spring框架对JDBC的支持有些类似. 为什么选择Spring Data Redis? Spring框架,是引领潮流的全栈Java/JEE应用框架.它提供了一个轻量级容器,一种非侵入式的编程模型 -- 这是由依赖注入.AOP.以及便携的服务抽象开启的.   SDR…
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和Jedis客户端,可以减少版本这块的冲突,当然,如果要引入别的版本也是可以的.版本控制全部交由Parent引入的Spring Boot节点进行管理!,建议不要引入最新版本的spring-boot-starter-data-redis,避免造成其它冲突. 有个假设:如果在使用Spring/Spring…
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Spring有冲突,要看官方文档和不断的测试. 继上一篇文章http://www.cnblogs.com/EasonJim/p/7804545.html使用Spring Data Redis操作Redis用的是单机版,如果是集群版的集成其实差别不大.主要思路如下: 1.先建立连接工厂,这个连接工厂是用来…
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Spring有冲突,要看官方文档和不断的测试. Jedis是一款Java连接Redis的客户端,Spring基于Jedis进行了封装,提供了简洁的操作Redis的方法.那就是Spring Data Redis.其实后来研究发现,Spring Data Redis集成不止Jedits这一款,还有很多款,这…
Springboot实现分布式锁(Spring Integration+Redis) 一.在项目的pom.xml中添加相关依赖 1)Spring Integration依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> 2)Sp…
当你save保存的时候你会发现出现StackOverflow Exception,很明显出现了无限循环,可是仅仅是一个save操作,哪里来的无限循环呢? 最终发现就是DateTime导致的,因为将对象映射存为Hash会将对象上的每一个属性存为hashkey,而且属性要是基本类型,,看图就知道问题咋来的了,Datetime上的属性是无限嵌套的. 怎么解决? @WritingConverter public static class DateTimeToStringConvert implement…
http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/spring-data/redis/docs/1.5.1.RELEASE/api/ 首先跟大家道歉,为什么呢?在不久之前,写了一篇http://blog.mkfree.com/posts/12,简单地使用是没有问题的,但如果在并发量高的时候,问题就会慢慢出现了,是什么问题呢? 当在高并发的情况下,向re…
http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) Spring-data-redis:特性与实例 博客分类: Redis   Spring-data-redis为spring-data模块中对redis的支持部分,简称为“SDR”,提供了基于jedis客户端API的高度封装以及与spring容器的整合,事实上jedis客户端已经足够简单和轻量级,…
一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家: 1.<The Little Redis Book> 是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概念应该差不多熟悉了,剩下的可以去Redis官网熟悉相关的命令. 2.<Redis设计与实现> 如果想继续深入,推…
SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能.它提供了与商店互动的低级别和高级别抽象,使用户免受基础设施问题的困扰. Spring Boot 实战 引用依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis&…
一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息:即对于每个消息只能被最多一个消费者拥有.发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息:即正常情况下每个消费者收到的消息应该都是一样的. 下面就以Spring Data Redis实现简单的消息“发布/订阅”服务. spring…
说明 关于Redis:一个基于键值对存储的NoSQL内存数据库,可存储复杂的数据结构,如List, Set, Hashes. 关于Spring Data Redis:简称SDR, 能让Spring应用更加方便配置和访问Redis. 本工程基于spring boot ,spring data redis,  spring io platform实现. POM配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi…
spring data redis集成了几个Redis客户端框架,Jedis , JRedis (Deprecated since 1.7), SRP (Deprecated since 1.7) and Lettuce ,JRedis和SRP已经在spring data redis的1.7版本被弃用了,我们使用Jedis, JedisPool和JedisFatory类都是Jedis框架中的类,spring data redis 只是封装了工厂模式,提供了统一的RedisConnection 和…
项目中需要用到redis,主要用来作为缓存,redis的客户端有两种实现方式,一是可以直接调用jedis来实现,二是可以使用spring data redis,通过spring的封装来调用. 应该使用哪一个呢?基于当前版本spring data redis 1.0.1和jedis 2.0.0,分析如下:  Spring Data Redis 1.0.1 优点  1.对具体redis客户端做了封装,客户端可在jedis,jredis,rjc等Java客户端中做出选择和切换: 2.用template…
环境要求:Redis 2.6及以上,javase 8.0及以上: 一.Spring Data Redis 介绍 Spring-data-redis是spring的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作.异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现.spring-data-redis针对jedis提供…
spring data redis 与spring 版本之间会有不兼容,要求spring 最低版本为4.2.6,这里推荐的一个版本 spring 4.3.2  spring data redis 1.7.2. 亲测可用,折腾了好久...…
在 Spring Data Redis 1.x 的时候,我们可能会在项目中编写这样一个RedisConfig类: @Configuration @EnableCaching public class RedisConfig { @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean(name = "redisTemplate") public RedisTemplate initRedisTemp…
用 Spring data redis 的redisTemplate存储数据的时候发现,它的键值前多出现了字符串:\xac\xed\x00\x05t\x00\x03 如本来key=name,会变成"\xac\xed\x00\x05t\x00\x03name" 用 stringRedisTemplate 不会出现这个问题,stringRedisTemplate 继承了redisTemplate,并覆盖了它的序列化方式.…
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 @Autowired private RedisTemplate template; // 从模板中取出对应的操作类实例 @Resource(name = "redisTemplate") private ValueOperations valueOps; 由于存储在Redis中的键和值通…
首先,要说明Spring Data Redis集成了很多款客户端,比如Jedis这些. 而如果在注入Bean时,我们一般是可以设置一些项的,比如hostName和port等,对于这些项一般的查找方式通常是去官网配置,比如:https://docs.spring.io/spring-data/redis/docs/2.0.1.RELEASE/reference/html/ 但是发现可以参考的配置项很少.那么我们换个思路,既然是封装Jedis的API,那么应该去查找对应Jedis的选项才对. 那么接…
说明:内容可能有点旧,需要在业务上做权衡. Redis的客户端有两种实现方式,一是可以直接调用Jedis来实现,二是可以使用Spring Data Redis,通过Spring的封装来调用.应该使用哪一个呢?基于当前版本Spring Data Redis 1.0.1和Jedis 2.0.0,分析如下: Spring Data Redis 1.0.1 优点 1.对具体Redis客户端做了封装,客户端可在Jedis,Jredis,Rjc等Java客户端中做出选择和切换 . 2.用template对调…
将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field:同种类型的对象实例存储为一个hash,每个实例分配一个field,将对象序列化后,作为该field的值: 假设有Person类: public class Person { private String name; private String age; -- } 第一种方式存储的结果为: 第二种方式存储的结果为: 因此,Spring Data Redis处理h…