有些人还在直接用Jedis操作Redis数据库,但这种方式非常不方便,而且很不灵活。用Spring Boot整合Redis之后,既能非常方便地操作Redis数据库,Spring Boot又可以*地在Lettuce或Jedis等技术之间*切换。
目前Jedis操作Redis已经趋于淘汰,而是应该使用Lettuce。Spring Data Redis模块默认使用Lettuce。
由于Spring Data是高层次的抽象,而SpringData Redis只是属于底层的具体实现,因此Spring Data Redis也提供了与前面Spring Data完全一致的操作。
归纳起来,Spring Data Redis大致包括如下几方面功能。
DAO接口只需继承CrudRepository,Spring Data Redis能为DAO组件提供实现类。
Spring Data Redis支持方法名关键字查询,只不过Redis查询的属性必须是被索引过的。
Spring Data Redis同样支持DAO组件添加自定义的查询方法—通过添加额外的接口,并为额外的接口提供实现类,Spring Data Redis就能将该实现类中的方法“移植”到DAO组件中。
Spring Data Redis同样支持Example查询。
需要说明的是,Spring Data Redis支持的方法名关键字查询功能不如JPA强大,这是由Redis底层决定的—Redis不支持任何查询,它是一个简单的key-value数据库,它获取数据的唯一方式就是根据key获取value。因此它不能支持GreaterThan、LessThan、Like等复杂关键字,它只能支持如下简单的关键字。
And:比如在接口中可以定义“findByNameAndAge”。
Or:比如“findByNameOrAge”。
Is、Equals:比如“findByNameIs”“findByName”“findByNameEquals”。这种表示相同或相等的关键字不加也行。
Top、First:比如“findFirst5Name”“findTop5ByName”,实现查询前5条记录。
那问题来了,Spring Data操作的是数据类(对JPA则是持久化类),那么它怎么处理卖二手手游账号平台数据类与Redis之间的映射关系呢?其实很简单,SpringData Redis提供了如下两个注解。
@RedisHash:该注解指定将数据类映射到Redis的Hash对象。
@TimeToLive:该注解修饰一个数值类型的属性,用于指定该对象的超时时长。
此外,Spring Data Redis还提供了如下两个索引化注解。
@Indexed:指定对普通类型的属性建立索引,索引化后的属性可用于查询。
@GeoIndexed:指定对Geo数据(地理数据)