关于redis-cluster:中间件使用redis-cluster

33次阅读

共计 866 个字符,预计需要花费 3 分钟才能阅读完成。

  • 没有用 spring-data-redis,封装了 service 层,针对罕用操作实现了 get,set,delete,hasKey,hget,hset,hdelete,lpush,rpop,ttl,publish 等办法
  • 实现了分布式锁,分布式计数器,get 后立刻生效,集群环境下执行 lua 脚本的命令

    • 分布式锁:如果 key 在 redis 中存在,则获取失败返回 false,否则设置该 key 及生效工夫,返回胜利。Redis 操作为单线程,判断 key 是否存在及设置 key 应为一个原子操作,通过 lua 脚本实现。在分布式定时工作中抢锁执行定时工作有用到,定时工作在多个服务中启用,但同时只有抢到锁的那个服务能调用胜利,保障服务的冗余及同一时刻只有一个节点执行定时工作。
    • 分布式计数器:和分布式锁相似,如果 key 在 redis 中存在,则 +1,否则设为 1。该过程为原子操作。用于接口限流。
    • get 后立刻生效:和分布式锁相似,如果 key 在 redis 中存在,则删除,返回 true,否则返回 false。用于用户登录时校验图片验证码,校验后验证码立刻生效,进步脚本防御的难度。
    • lua 脚本执行办法。因为在集群环境下,key 存储在不同节点,为确保 lua 脚本是一个原子操作,须要不同的 key 在同一节点执行。即 lua 脚本中的每个 key 前增加同一 {xx},cluster 分片时会依照 xx 进行 hash 分槽。
  • 反对同时连贯多个 cluster,依据 dbkey 指定集群。为了将缓存隔离,搭建了多个 redis 集群,配置文件中通过 dbkey 辨别不同的集群。调用 redisService 办法时如果不指定 dbkey 则操作默认 cluster,如果传入 dbkey 参数则操作指定 cluster
  • 可按 cluster 增加对立前缀。因为测试环境分为 sit,qa,uat,心愿应用同一套 cluster,cluster 没有单机 db 的概念,因而在配置 cluster 时,对立增加前缀 sit,qa,uat 进行辨别,调用 redisService 办法时主动增加。
  • 反对配置明码。可连贯配置和不配置明码的 cluster,由配置文件决定
正文完
 0