在redis cluster中key带大括号的rpoplpush操作结论

之前的redis的是采用redis sentinel来搭建HA,后来改用了redis cluster。以前的业务使用到了rpoplpush方法,之前的代码版本测试也都是OK。前几天需要做个业务测试,就手动造了几条数据,然后使用redis自带的client进行操作的时候,竟然神奇的报错了(当时吓出了一身的冷汗,因为系统已经在生产环境运行了)。报错的内容为“CROSSSLOT Keys in request don't hash to the same slot”,意思就是key的hash结果不在同一个槽,不能操作。接着就是很常规的各种数据验证,然而结果依旧。此时,去找QA聊了聊,为什么以前没有测出这个问题,结果得到的答复是,当时测试是没发现有这个问题。

难道jedis没有这个问题吗?

后来经过测试验证,在jedis确实不存在这个问题,一切都是那么美好。(至于深层次的原因,待日后细细研究,此次做个笔记)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redis ClusterRedis 分布式方案的一种集群模式,在 Redis Cluster ,数据会被自动切割成多个部分并存储在多个节点,这样可以实现数据的高可用性和水平扩展。 在客户端使用 Redis Cluster 批量删除 key,首先需要获取集群的节点列表。通过客户端连接集群的任意一个节点,可以使用命令 `CLUSTER NODES` 获取集群节点的列表信息。 获取到节点列表后,可以使用 `SCAN` 命令扫描每个节点的 key,找到需要删除的 key 并删除。由于 Redis Cluster 每个节点只存储部分副本,需要在集群的所有节点上进行操作,才能保证数据的完整性。 例如,使用 Python 客户端 Redis-py 进行批量删除 key,可以按照以下步骤进行: ```python import redis # 连接 Redis Cluster startup_nodes = [{"host": "127.0.0.1", "port": "6379"}] rc = redis.StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True) # 扫描每个节点的 key,找到需要删除的 key 并删除 for node in rc.nodes.values(): cursor = 0 while True: scan_result = node.scan(cursor=cursor, count=1000, match="prefix:*") keys = scan_result[1] for key in keys: node.delete(key) cursor = scan_result[0] if cursor == 0: break ``` 以上代码,设置 `match` 参数来指定要批量删除的 key 的前缀。批量删除 key 可能会对 Redis Cluster 造成较大的负载压力,因此需要谨慎操作。如果需要删除所有的 key,可以考虑重建 Redis Cluster
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值