Spring-data-redis 的使用实践
Eijux(讨论 | 贡献)2021年11月7日 (日) 02:08的版本 (建立内容为“category:Redis == 关于 == 无论是 Jedis 还是 JedisPool,都只是完成对 Redis 操作的极为基础的 API,在不依赖任何中间件的开发…”的新页面)
关于
无论是 Jedis 还是 JedisPool,都只是完成对 Redis 操作的极为基础的 API,在不依赖任何中间件的开发环境中,可以使用它们。但是,一般的 Java 开发,都会使用了 Spring 框架,可以使用 spring-data-redis 开源库来简化 Redis 操作的代码逻辑,做到最大程度的业务聚焦。
CRUD 中应用缓存的场景
在普通 CRUD 应用场景中,很多情况下需要同步操作缓存,推荐使用 Spring 的 spring-data-redis 开源库。
- 注:CRUD 是指 Create(创建),Retrieve(查询),Update(更新)和 Delete(删除)。
- 创建缓存:
- 在创建(Create)一个 POJO 实例的时候,对 POJO 实例进行分布式缓存,一般以“缓存前缀+ID”为缓存的 Key 键,POJO 对象为缓存的 Value 值,直接缓存 POJO 的二进制字节。
- 前提是:POJO 必须可序列化,实现 java.io.Serializable 空接口。如果 POJO 不可序列化,也是可以缓存的,但是必须自己实现序列化的方式,例如使用 JSON 方式序列化。
- 查询缓存:
- 在查询(Retrieve)一个 POJO 实例的时候,首先应该根据 POJO 缓存的 Key 键,从 Redis 缓存中返回结果。
- 如果不存在,才去查询数据库,并且能够将数据库的结果缓存起来。
- 更新缓存:
- 在更新(Update)一个 POJO 实例的时候,既需要更新数据库的 POJO 数据记录,也需要更新 POJO 的缓存记录。
- 删除缓存:
- 在删除(Delete)一个 POJO 实例的时候,既需要删除数据库的 POJO 数据记录,也需要删除 POJO 的缓存记录。
为了演示 CRUD 场景下 Redis 的缓存操作
- 首先定义一个简单的 POJO 实体类:聊天系统的用户类。
- 此类拥有一些简单的属性,例如 uid 和 nickName,且这些属性都具备基本的 getter 和 setter 方法:
package com.crazymakercircle.im.common.bean; //... import java.io.Serializable; @Slf4j public class User implements Serializable { String uid; String devId; String token; String nickName; //....省略 getter setter toString等方法 }
- 然后定义一个完成 CRUD 操作的 Service 接口,定义三个方法:
- saveUser完成创建(C)、更新操作(U)。
- getUser完成查询操作(R)。
- deleteUser完成删除操作(D)。
- Service接口的代码如下:
package com.crazymakercircle.redis.springJedis; import com.crazymakercircle.im.common.bean.User; public interface UserService { /** * CRUD 的创建/更新 * @param user 用户 */ User saveUser(final User user); /** * CRUD 的查询 * @param id id * @return 用户 */ User getUser(long id); /** * CRUD 的删除 * @param id id */ void deleteUser(long id); }
定义完了 Service 接口之后,接下来就是定义 Service 服务的具体实现。不过,这里聚焦的是:如何通过 spring-data-redis 库,使 Service 实现带缓存的功能?