如何用redis来生成唯一Id

如何用redis来生成唯一Id,第1张

方法:

public RedisAtomicLong(javalangString redisCounter,

RedisConnectionFactory factory)1212

该实例对应的自动增长的主键的key的名字为为redisCounter,如果redis中存在key的name为redisCounter的键值对,那么,则取其值;

否则,将redisCounter对应的key值设置为0;

redis数据淘汰原理

redis过期数据删除策略

redis server事件模型

redis cluster mget 引发的讨论

redis 3x windows 集群搭建

redis 命令执行过程

redis string底层数据结构

redis list底层数据结构

redis hash底层数据结构

redis set底层数据结构

redis zset底层数据结构

redis 客户端管理

redis 主从同步-slave端

redis 主从同步-master端

redis 主从超时检测

redis aof持久化

redis rdb持久化

redis 数据恢复过程

redis TTL实现原理

redis cluster集群建立

redis cluster集群选主

 redis 主从同步的过程始于一系列类似tcp三次握手的过程,归于"sync/psync"命令。分析redis主从同步master端的处理逻辑需要从syncCommand的函数开始进行分析。

 redis 主从同步过程中 master的执行内容 包括:

 整个处理逻辑主要分为处理 部分同步命令psync 全量同步命令sync ,整个交互过程如下

需要针对触发bgsave命令的部分作下详细说明,因为这个是核心的关键点:

 判断能够通过部分数据同步实现的逻辑很简单,主要从两个维度进行判断:

 众所周知rdb文件生成是内部fork新的线程去执行rdb生成过程的,通过rdbSaveBackground的函数可以看出来内部通过fork()去实现rdb文件的生成过程。

在fork的线程当中执行rdbSave实现rdb文件的生成过程。

rdb文件的生成过程其实挺简单的 ,大概流程如下:

 通过检查serverrdb_child_pid或者serveraof_child_pid确认是否执行rdb文件生成或者aof文件写入。

 bgsave完成后我们执行updateSlavesWaitingBgsave来实现rdb数据的同步。

  在updateSlavesWaitingBgsave过程中我们把和slave连接的socket注册写事件到eventLoop当中且回调函数为sendBulkToSlave,通过该回调函数实现rdb文件的传输。

  可以看出来整个同步过程中我们会同步master到所有的slave节点,注意是所有的slave节点。

  sendBulkToSlave内部主要实现两个事情,都是和数据传输有关:

redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢。

一,redis cluster命令行

查看复制打印

//集群(cluster)

CLUSTER INFO 打印集群的信息

CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

//节点(node)

CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。

CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。

CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。

CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。

//槽(slot)

CLUSTER ADDSLOTS <slot> [slot ] 将一个或多个槽(slot)指派(assign)给当前节点。

CLUSTER DELSLOTS <slot> [slot ] 移除一个或多个槽对当前节点的指派。

CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。

CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。

CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。

CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

//键 (key)

CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

这些命令是集群所独有的。执行上述命令要先登录

查看复制打印

[root@manage redis]# redis-cli -c -p 6382 -h 19216810220 //登录

19216810220:6382> cluster info //查看集群情况

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:8

cluster_my_epoch:4

cluster_stats_messages_sent:82753

cluster_stats_messages_received:82754

二,添加节点

1,新配置二个测试节点

查看复制打印

# cd /etc/redis

//新增配置

# cp redis-6379conf redis-6378conf && sed -i "s/6379/6378/g" redis-6378conf

# cp redis-6382conf redis-6385conf && sed -i "s/6382/6385/g" redis-6385conf

//启动

# redis-server /etc/redis/redis-6385conf > /var/log/redis/redis-6385log 2>&1 &

# redis-server /etc/redis/redis-6378conf > /var/log/redis/redis-6378log 2>&1 &

2,添加主节点

# redis-tribrb add-node 19216810219:6378 19216810219:6379

注释:

19216810219:6378是新增的节点

19216810219:6379集群任一个旧节点

3,添加从节点

# redis-tribrb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 19216810220:6385 19216810219:6379

注释:

--slave,表示添加的是从节点

--master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主节点的node id,在这里是前面新添加的6378的node id

19216810220:6385,新节点

19216810219:6379集群任一个旧节点

4,重新分配slot

查看复制打印

# redis-tribrb reshard 19216810219:6378 //下面是主要过程

How many slots do you want to move (from 1 to 16384) 1000 //设置slot数1000

What is the receiving node ID 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node id

Please enter all the source node IDs

Type 'all' to use all the nodes as source nodes for the hash slots

Type 'done' once you entered all the source nodes IDs

Source node #1:all //表示全部节点重新洗牌

Do you want to proceed with the proposed reshard plan (yes/no) yes //确认重新分

新增加的主节点,是没有slots的,

以上就是关于如何用redis来生成唯一Id全部的内容,包括:如何用redis来生成唯一Id、redis 主从同步-master端、redis cluster命令cluster nodes怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9468926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存