RedisCluster的rename机制失败报错,解决又是数据倾斜问题


       需求说明:spring session中的用户session更新是更新key的名字,所以对于key的操作时需要用newkey 替换oldkey value值只允许存在一个,这里用到rename就很合适,单机是没问题的,但是redis的集群模式下,由于采用了虚拟槽进行数据存储,所以修改时会报错

       RedisCluster的rename机制失败报错:(error) CROSSSLOT Keys in request don't hash to the same slot

       

      百度查询之后,需要用到hashtag标记下可以解决以上问题,redis提供了一种特定的标签{},这个{}内的字符串才参与计算hash slot.列如:{user}:aaa与{user}:bbb 这两个集合可以确保在同一个slot上。

      

      特地试了试,这个{user}的hashtag放在前中后都可以,然后,用spring session不断去请求存session,发现的确不报错了,另外一个坑点出现:数据倾斜

      

      上图可以看到关于{hh}的hash tag都在同一个redis实例上存储到对应的hash槽了,这个严重的数据倾斜问题会对单个实例的造成压力,一旦主从压垮,就会拖垮整个集群导致惊群效应

      

   特此记录,路过的一定要注意下,我是没法更spring session的实现源码,如果你能避免掉就自己先删在存吧

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM