很多业务用 Redis 做了缓存,假如客户端命中的缓存,那还需要先从 Redis 中读取的数据反序列化成对象再序列化成 JSON 给前端吗?

qwerthhusn:比如,用的 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[]返回给客户端,省掉一次反序列化和序列化的流程。但是这样写的感觉可读性不强,而且写法也比较麻烦。

请问大佬们,一般遇到这种情形,你们都是咋做的?

canbingzt:用 @Cacheable

qwerthhusn:Cacheable 只是简化了获取逻辑,但是还是需要进行反序列化和二次序列化的
@canbingzt

joesonw:这种 get 一下的请求, encode/decode 的 cpu 消耗很小的. 而且万一请求后面还有 filter, 例如数据字段脱敏呢?

doufum:1. spring 的 redisTemplate,配置的时候加上 value 序列化方式,取的时候转型一下就行了啥
2. 自己写 Redis 工具类的化,重载一下 get 方法,对 value 的序列化 /反序列化加入到重载的方法里面,入参 class 泛型,返回直接接受
3. 接口加注解,统一 AOP 处理,在 AOP 的方法里面处理转型、序列化、反序列化(配合 1,2 )

qwerthhusn:@joesonw 是的,突然这么一想也对,相对于耗时的 IO 操作,执行一些 CPU 和内存任务很快,这点点优化基本上没太多意义。系统的瓶颈也不会出现在这里。。。。。。这么理解没错吧

redis 支持多 db 的原因是什么?

situs:redis 为什么要支持多 db,支持再多的 db 也是单线程,既然如此,支持单 db 不也 ok 吗,从 key 上进行区分? 大家的公司有区分 db 嘛?

一款针对 JSON 的查询语言, JSON 界的 GraphQL?

ddup:看到这个,觉得比较有意思。 https://groq.dev/ whileFalse:那个,其实早就有类似的东西了。比如 kubectl 在格式化输出时就用了 JsonPath 这种语法。再比如 aws cli 的--query 参数使用 JMESPath 语法。

PHP json_encode 问题

fangwenxue:$data = [ '0' => '单品', '1' => '多属性' ]; encode 结果 怎么得到这种结果 "data_list": { "0": "单品", "1": "多属性" },

当字段较多且经常需要新增字段时,用 JSON 代替 POJO 是否更加合适?

lauyukit:各位大佬们,小弟在重构一个项目,因为业务需要,一些 POJO 实体类有很多字段,而且随着时间和业务变化,会增加各种不同的字段,老代码里都是用 JSONObject 一把梭,我觉得这样很不好,一来没有辨识度,没法通过静态分析发现问题,二来很不优雅;可是定义 POJO 的话,又因为字段多变,可能需要成员变量里加一个 Map 来扩展,不然每新增一…

我开发了一款 macOs 的软件: G-dis - Gui client for Redis

AlexZhangrj:我开发了一款 Redis 的客户端软件 G-dis,上连接: https://apps.apple.com/cn/app/g-dis-gui-client-for-redis/id1527961367?mt=12 这次开发有些绕,首先看了一半 Redis-cli 的代码就开始上手开发,结果,没搞明白 Tcp-socket 是面向字节流…