比如,用的 Spring Web RestController
@GetMapping("/data")
public Data get() {
byte[] dataBS = redis.get("key");
if (dataBS == null) {
return getFromDB();
} else {
// 可能用了 Kryo 或者 FST 或者 Protobuf 等序列化协议
Data data = deserialize(dataBS, Data.class);
return data;
}
}
总感觉可以直接存 JSON,然后从 Redis 中直接取出 byte[]返回给客户端,省掉一次反序列化和序列化的流程。但是这样写的感觉可读性不强,而且写法也比较麻烦。
请问大佬们,一般遇到这种情形,你们都是咋做的?
2
qwerthhusn OP Cacheable 只是简化了获取逻辑,但是还是需要进行反序列化和二次序列化的
@canbingzt |
3
joesonw 2020-09-21 17:31:33 +08:00 1
这种 get 一下的请求, encode/decode 的 cpu 消耗很小的. 而且万一请求后面还有 filter, 例如数据字段脱敏呢?
|
4
doufum 2020-09-21 17:40:08 +08:00
1. spring 的 redisTemplate,配置的时候加上 value 序列化方式,取的时候转型一下就行了啥
2. 自己写 Redis 工具类的化,重载一下 get 方法,对 value 的序列化 /反序列化加入到重载的方法里面,入参 class 泛型,返回直接接受 3. 接口加注解,统一 AOP 处理,在 AOP 的方法里面处理转型、序列化、反序列化(配合 1,2 ) |
5
qwerthhusn OP @joesonw 是的,突然这么一想也对,相对于耗时的 IO 操作,执行一些 CPU 和内存任务很快,这点点优化基本上没太多意义。系统的瓶颈也不会出现在这里。。。。。。这么理解没错吧
|
6
yejianmail 2020-09-21 18:37:16 +08:00 via Android
你这里可以直接用 String 的 redisTemplate
|