近期单位项目上了redis 集群(3主3从)。在使用遇见了一些坑。
- 集群中,明明有某个key(test_key),但是在调用 keys test_key 中返回的是(empty list or set),当使用 获取命令 get test_key后,在使用 keys test_key 就能正确返回
- 原因:
- keys 返回的是当前节点 db的结果。不会去匹配其他节点的 db的数据.
- 当使用 get key 后,会进行重定向,转到 key 所在的节点。再次使用keys 命令时,相当于匹配所在db的所有key.
- 原因:
- 使用 RedisTemplate 代码里面不支持管道操作
- 像使用
redisTemplate.executePipelined();
会报错 :
-
原因: 因为单个节点时,在管道中操作,都是对一个节点redis处理。集群之后,会进行 hash,根据不同的 slot衔接不同的节点.这时,管道会出问题。
-
解决方法: 不使用管道,逐一处理
- 像使用