文档信息(Document Info)
标题(Title)
Spring-data-redis使用手册 |
文档编号(No) 2012-02-14 |
作者(Author) 黄承开 |
最后发布时间(Last Update) 2012-08-10 |
概述(Summarize) 掌握spring-data-redis的使用方法,一些最佳实践 |
修订日期(Date) | 修订人(Reviser) | 修订内容(Revises) |
2012-05-21 | 梁国锋 | 2.2 redis下载地址(Linux版、Windows版) 3.4.6常用api的方法 5.1mercury项目实战 |
2012-06-25 | 黄承开 | 新增maven依赖配置方法,整理了章节 |
2012-06-26 | 黄承开 | 新增章节 |
2012-08-10 | 张瑜 | 新增Tinybee实战配置,增加KEY序列化配置 |
文档信息(Document Info) 2
修订信息(Revise Info) 3
附件信息(Attachment Info) 4
1. 概述 6
1.1. 目的 6
1.2. 范围 6
2. 准备 6
2.1. 环境配置 6
2.2. 下载地址 7
3. Spring-data-redis 7
3.1. 背景 7
3.1.1. 高级API 7
3.1.2. 低级API 7
3.2. Maven配置 7
3.3. JedisConnectionFactory 8
3.4. RedisTemplate和StringRedisTemplate 8
3.5. API概览 8
3.5.1. Java集合和Redis集合 8
3.5.2. Operations 9
3.5.3. ValueOperations和BoundValueOperations 9
3.5.4. ListOperations和BoundListOperations 9
3.5.5. SetOperations和BoundSetOperations 10
3.5.6. ZSetOperations和BoundZSetOperations 11
3.5.7. HashOperations和BoundHashOperations 11
3.5.8. 其他 12
3.6. Callback 12
3.7. Topic和Messaging/PubSub 12
3.8. Cache 12
4. NoSQL数据库设计 12
4.1. 一般经验 12
4.1.1. 不持久化业务实体 12
4.1.2. Key的设计 12
4.2. 官方例子中的设计 13
4.3. NoSQL 数据建模技术 13
5. 最佳实践 13
5.1. 项目案例1(Mercury项目) 13
5.1.1. 配置 13
5.1.2. 总结 14
5.2. 项目案例2(Tinybee项目) 14
5.2.1. 配置(更新) 14
1.概述
1.1.目的
让团队成员比较快的上手redis的相关功能,思考如何结合自己的项目使用。
1.2.范围
所有工程师。
2.准备
强烈建议你在看下去之前花上半个小时看一下Redis入门
http://www.slideshare.net/tednaleid/redis-and-groovy-and-grails-gr8conf-2011
当然你可以可以下载到本地观看,http://www.kuaipan.cn/file/id_20272615458154.html
这个教程非常有价值,可以让你对redis的工作方式和工作原理有一个直观的认识。
官方的入门文档:
http://static.springsource.org/spring-data/data-redis/docs/current/reference/redis.html
不推荐,讲的太简单了,不过看一下也能有些收获。
如果你对redis希望有更多的了解:
http://blog.nosqlfan.com/html/3537.html
个人推荐以下几篇:
十五分钟介绍 Redis数据结构
http://blog.nosqlfan.com/html/3202.html?ref=rediszt
Redis 数据库结构设计
http://blog.nosqlfan.com/html/3476.html?ref=rediszt
利用Redis构建高效的实时搜索
http://blog.nosqlfan.com/html/3448.html?ref=rediszt
快盘上的《redis_学习笔记》也不错,比较全面,不过偏向于Redis本身的内容较多
2.1.环境配置
首先你要有一台可以连接到的正在运行的redis服务器。
然后根据《项目框架说明及命名规范》中的相关章节配置你的项目。
最后,如果你有时间的话,可以先checkout服务器上的example工程,在service模块中提供了一些基本的使用案例。
2.2.下载地址
linux版本的redis下载的地址:
http://redis.io/download
windows版本的redis下载的地址:
https://github.com/dmajkic/redis/downloads
3.Spring-data-redis
3.1.背景
就跟orm有hibernate和mybatis一样,redis也有众多的Java客户端,例如jedis,jredis,jdbc-redis和rcj等,当然他们肯定没法兼容,如果你在项目中使用了某种客户端,那当你因为某种原因(项目不再维护,bug无法修复,性能无法改善)切换使用的客户端时,项目会有较大的重构成本。这个时候spring-data-redis的出现,提供了一个对几种主要的redis的Java客户端的抽象,使开发中可以几乎完全屏蔽具体使用客户端的影响,使业务代码保持较强的稳定性。
3.1.1.高级API
顾名思义,spring-data-redis提供了一组与各个客户端兼容的api子集以及与jdk完全兼容的标准序列化和容器类型的api。听上去很多,但是保留了精华,在开发中已经足够使用。
3.1.2.低级API
这个就是暴露了一些直接对redis服务器提供操作的api和为redis的数据类型特意封装的数据类型,根据各个客户端实现情况不同其实反而有较大的隐患(相当于在hibernate中直接写sql,数据库的方言处理)。当然如果真的在开发中需要某种还未抽象完全的功能,那么这个就是唯一的选择,一般情况下推荐使用高级API。
3.2.Maven配置
3.3.JedisConnectionFactory
就像所有的数据库连接,JedisConnectionFactory就是连接工厂,通过配置单台服务器或者连接池(pool)的方式获取redis服务器的连接。
3.4.RedisTemplate和StringRedisTemplate
就像Spring提供的JDBC,hibernate和ibatis的template一样,spring-data-redis也提供了一个基础的泛型RedisTemplate供开发者可以快速的利用代码完成基础的crud工作。而StringRedisTemplate则提供了最常用的String类型的实现。在实践中可以考虑完全省去dao层的设计,直接在service层注入相应的template实例。
3.5.API概览
其实所有的操作都是直接映射redis本身提供的命令行,因为官方文档缺失了厉害,你可以直接通过查看redis官网的命令手册来了解api的具体功能http://redis.io/commands 。
3.5.1.Java集合和Redis集合
首先的首先澄清一个对初学者非常容易混淆的概念!
不要试图使用泛型Java集合,例如RedisTemplate 如果你在RedisTemplate的泛型中用到了Java集合类型,那明显你做错了!如果你还是不明白错在哪里,请立刻停下手上的工作,找其他同事深入了解原因。 3.5.2.Operations opsForXXX和boundXXXOps的区别? XXX为value的类型,前者获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;后者获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。 关于计数的API(increment)有一个bug,需要各位使用中注意,通过increment计数以后,通过get方式获取计数值的时候可能会抛出EOF异常(和本地的jdk以及redis的编译版本有关),可以考虑使用boundValueOps(key).get(0,-1)获取计数值。 3.5.3.ValueOperations和BoundValueOperations ValueOperations valueOperations = redisTemplate.opsForValue; BoundValueOperations boundValueOperations = redisTemplate.boundValueOps(key); 类:ValueOperations 等价理解成:Map