Spring-data-redis 的使用实践

来自Wikioe
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(删除)。
  1. 创建缓存
    在创建(Create)一个 POJO 实例的时候,对 POJO 实例进行分布式缓存,一般以“缓存前缀+ID”为缓存的 Key 键,POJO 对象为缓存的 Value 值,直接缓存 POJO 的二进制字节。
    • 前提是:POJO 必须可序列化,实现 java.io.Serializable 空接口。如果 POJO 不可序列化,也是可以缓存的,但是必须自己实现序列化的方式,例如使用 JSON 方式序列化。
  2. 查询缓存
    在查询(Retrieve)一个 POJO 实例的时候,首先应该根据 POJO 缓存的 Key 键,从 Redis 缓存中返回结果。
    • 如果不存在,才去查询数据库,并且能够将数据库的结果缓存起来。
  3. 更新缓存
    在更新(Update)一个 POJO 实例的时候,既需要更新数据库的 POJO 数据记录,也需要更新 POJO 的缓存记录。
  4. 删除缓存
    在删除(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 接口,定义三个方法:
  1. saveUser完成创建(C)、更新操作(U)。
  2. getUser完成查询操作(R)。
  3. 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 实现带缓存的功能?

配置 spring-redis.xml