前文有述,Spring提供了对于Redis的专门支持:spring-data-redis。此外,类似的还有:
我想大部分人对spring-data-hadoop、spring-data-mongodb、spring-data-redis以及spring-data-jpa表示关注。
spring把专门的数据操作独立封装在spring-data系列中,spring-data-redis自然是针对Redis的独立封装了。
当前版本1.0.1,主要是将jedis、jredis、rjc以及srp等Redis Client进行了封装,同时支持事务。已经让我垂涎欲滴了。当然,当前版本不支持Sharding。例如,前文曾经通过Jedis通过Client配置,实现一致性哈希,达到Sharding的目的。再一点,如果你早在spring1.x写过SpringJdbc的话,现在会觉得似曾相识。
在经过一番思想斗争后,我最终放弃了Jedis原生实现,拥抱spring-data-redis了。为什么?因为,我需要一个有事务机制的框架,一个不需要显式调用对象池操作的框架。这些spring-data-redis都解决了。至于Sharding,当前数据量要求还不大,期待Redis 3.0吧。
对象池配置:
工厂实现:
模板类:
是不是很像配置一个JdbcTemplate?其实就这么简单。
redis.properties配置如下:
当前只能用一个节点,期待Redis 3.0,Sharding吧!
Redis初来乍练,目前也就是用Memcached多些,只会这些基本的操作,在这里献丑了!
假定做一个UserDao:
User对象就这么两个属性:
实现这三个方法需要得到RedisTemplate的支持:
为什么用序列化泛型?我存的数据都是可序列化的内容。还有更多为什么?其实我也解答不了很多,边练边学,我弄通了一定告诉你!
做一个保存造作,使用Redis的SET命令:
这里是通过模板类,实现方法回调。在spring框架下,可以方便的控制事务,如果你研究过spring的dao源代码,对此一定熟悉。
这跟当年的SpringJdbcTemplate有那么一拼!
想要将对象从Redis中取出来,就麻烦一些,需要序列化key,最好判断下这个key是否存在,避免无用功。如果键值存在,需要对数据反序列化。
当年写SpringJdbc的时候,就是这样一个字段一个字段拼装的,甭提多累人。好吧,用Spring-Data-Redis,又让我回归了!
删除,就简单点,不过也需要这样折腾一会:
做个TestCase,暂时够我用了!
貌似少了update,也许以后操作Hash时,会用上。
看看控制台获得了什么:
好吧,可以开始用它来存点什么了!