知识点

相关文章

更多

最近更新

更多

redis集群插槽分配-redis集群管理

2019-03-20 22:26|来源: 网路

使用cluster nodes命令查看当前集群信息
192.168.56.101:6382> cluster nodes
8c45a68a798aed7c1ed5e636f2899709717952c8 192.168.56.101:6380 master - 0 1468819900949 1 connected 0-5460
c9267b81af4bb2c186d07c5ebc777a4b8551069a 192.168.56.101:6381 master - 0 1468819901952 2 connected 5461-10922
16c6db308b37be4d4dd337cd62ea1b676672e096 192.168.56.101:6382 myself,master - 0 0 3 connected 10923-16383


每条信息包含节点的id,IP地址及端口,连接数,插槽数等。

在客户端执行set abc 123命令时,redis是如何将数据保存到集群中的呢?执行步骤:
1、 接收命令set abc 123
2、 通过key(abc)计算出插槽值,然后根据插槽值找到对应的节点。(abc的插槽值为:7638)
3、 重定向到该节点执行命令


整个Redis提供了16384个插槽,也就是说集群中的每个节点分得的插槽数总和为16384。

./redis-trib.rb 脚本实现了是将16384个插槽平均分配给了N个节点。


计算key的插槽值:key的有效部分使用CRC16算法计算出哈希值,再将哈希值对16384取余,得到插槽值。

什么是有效部分?
1、 如果key中包含了{符号,且在{符号后存在}符号,并且{和}之间至少有一个字符,则有效部分是指{和}之间的部分;
a) key={hello}_test的有效部分是hello
2、 如果不满足上一条情况,整个key都是有效部分;
a) key=hello_test的有效部分是全部


注意:如果插槽数有部分是没有指定到节点的,那么这部分插槽所对应的key将不能使用。


书生参考网络整理


redis知识点

redis快速入门

reids常用命令

redis数据结构

java_API_客户端

Jedis

Tlcache

redis_持久化

AOF

RDB

发布订阅(pub/sub)

redis_事件

redis事务

redis通讯协议

RESP(Redis Serialization Protocol)

redis高可用

redis哨兵

监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)

redis主从复制

  • 复制模式

    1. 主从复制
    2. 从从复制
  • 复制过程

    • slave向master发送sync命令;
    • master开启子进程执行bgsave写入rdb文件;
    • master发送缓存和RDB文件给slave;
    • master发送数据发送给slave完成复制;

redis集群(Redis_Cluster)

相关问答

更多
  • 用的是什么集群方式,JedisSentinelPool 还是ShardedJedisPool。 如果用的是前者,配置是需要连接sentinel端口的(默认26379),不是连接redis端口(6379)。 或者把spring相关配置文件贴出来一下。 127.0.0.1:26379 127.0.0.1:26380 127.0.0.1:26381
  • 用的是什么集群方式,JedisSentinelPool 还是ShardedJedisPool。 如果用的是前者,配置是需要连接sentinel端口的(默认26379),不是连接redis端口(6379)。 或者把spring相关配置文件贴出来一下。

    Redis怎么做集群[2019-03-20]

    为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢? 首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,scale up不是一个好办法,我们需要scale out横向可伸缩扩展,这需要由多台主机协同提供服务,即分布式多个Redis实例协同运行。 其次,目前硬件资源成本降低,多核CPU,几十G内存 ...
  • 先停止sentinel,然后在修改配置,完成后再启动sentinel 如果没有停止,修改好了,停止的时候sentinel会自动把内存的值同步到配置文档中
  • Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists。 这系列的命令非常有用,这里讲使用SETNX来实现分布式锁。 用SETNX实现分布式锁 利用SETNX非常简单地实现分布式锁。例如:某客户端要
  • 先停止sentinel,然后在修改配置,完成后再启动sentinel 如果没有停止,修改好了,停止的时候sentinel会自动把内存的值同步到配置文档中
  • 正如你在这里看到的,redis现在支持自动分区。 As you can see here, redis supports now automatic partitioning.
  • 不,基本上。 “经典”(非集群)也不存在。 要做到这一点而不需要额外的存储机制,您需要重复使用SCAN来遍历整个密钥空间。 幸运的是,它至少接受了一个过滤器(因此您不需要获取每个键),但效率很低 - 您通常只会定期执行此操作作为审阅功能,而不是操作功能。 我们实际上在“opserver”的redis插件中包含了这样的功能。 当您切换到群集时,您需要重复此操作,但是需要在每组复制垂直中的一个上重复此操作。 您通常会通过CLUSTER命令获取该列表,因此节点的动态特性没有实际意义。 在经典和集群中,建议仅在副本 ...
  • 正如您所说,您在Redis群集中使用了3个主节点,因此可以清楚地看到,如果其中一个节点将关闭,那么您将收到CLUSTERDOWN错误。 为了避免这些类型的错误并获得高可用性,最好将从属服务器附加到主节点(如此处的官方Redis群集教程中所示)。 有一个理由让奴隶与你的主人联系以获得更高的可用性。 为此,您可以阅读上面Redis群集教程链接中提到的这些行。 Redis集群中有16384个散列槽,为了计算给定密钥的散列槽,我们只需采用密钥模数16384的CRC16。 Redis群集中的每个节点都负责散列槽的子集 ...
  • JedisCluster没有实现Transaction和Pipeline,因为它很难实现。 Redis可以在群集模式下发送MOVED或ASK,这意味着我们应该在节点之间移动插槽。 我正在考虑JedisCluster的管道模式,但没有进行进一步的研究。 https://groups.google.com/d/msg/jedis_redis/u6j8slokO3E/Dh5Q94TRjJUJ 目前,Jedis团队正致力于为JedisCluster稳定/提供更多API。 JedisCluster didn't im ...