- 博客(18)
- 收藏
- 关注
原创 canal的安装与使用
(1)访问官网地址:https://github.com/alibaba/canal,点击右侧的【Releares】,鼠标下滑,我们以1.1.6版本的canal为例,下载对应版本的tar包。(1)canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议。进入/bin文件夹,执行命令 ./startup.sh 命令启动canal服务。进入/logs/canal文件夹,执行命令vim canal.log查看日志。
2024-08-23 18:24:38
262
原创 redis之大key问题
对于string类型,使用del命令删除,如果过于庞大使用unlink命令删除。对于zset类型,使用zscan+zremrangebyrank命令进行删除。大key问题说的不是某个key有多大,而是某个key对应的value很大。执行命令 redis-cli -a 密码 -p 端口 --bigkeys。hash,list,set,zset元素个数不超5000个。对于set类型,使用sscan+srem进行删除。对于hash类型,使用hscan+hdel删除。对于list类型,使用ltrim命令进行删除。
2024-07-24 23:34:28
198
原创 redis之单线程与多线程之争
redis的单线程指的是:redis的网络I/O和键值对读写是由一个线程来完成的,redis在处理客户端的请求时包括socket读,解析,执行,socket写等都是由一个顺序串行的主线程处理,这就是所谓的单线程。(2)某些业务场景使用单线程会造成redis服务端阻塞,像删除大key,aof文件的重写等场景,如果不用异步方式去执行命令的话,很容易造成redis的阻塞,造成redis服务不可用。(1)适配硬件的发展,多核cpu已经是普遍存在的现象,redis单线程不能最大化的利用硬件资源。
2024-07-24 16:54:13
260
原创 redis如何禁用某些命令
在生产中,redis的某些命令是很危险的,像flushdb/flushall 或者keys *此时我们用redis-cli连接redis客户端执行以下上述我们禁用的相关命令。执行上述命令全部提示未知的命令,此时我们就成功禁用了redis的相关命令。这里我禁用了flushdb命令,flushall命令以及keys命令。上述命令可能会带来很大的生产事故,那么如何禁用这些命令呢?格式为 rename-command 要禁用的命令 “”保存配置重启redis服务。修改redis配置文件。
2024-07-23 19:13:47
209
原创 springboot使用redisTemplate模板连接redis集群
答案就是springboot默认不会去更新redis集群的状态,虽然6999节点宕机,7004从节点成功上位,由于springboot未更新redis集群状态,所以程序依然认为6999节点存在,当key的hash槽正好落在6999节点上的时候,程序仍然会往6999节点写入,由于6999节点已经宕机,因此程序会抛出异常,连接超时。配置为所有的redis节点信息,格式为:ip:端口,ip:端口,ip:端口,ip:端口,ip:端口,ip:端口。从redis客户端来看,redis集群一切正常。
2024-07-23 15:31:45
626
原创 redis之集群容灾与扩容
执行命令:./redis-cli -a 密码 --cluster add-node 127.0.0.1:7006 127.0.0.1:7005 --cluster-slave --cluster-master-id 7981494cb67410f40327a5b24b92acabbd03636e。注意这里的ip地址各位小伙伴在实操的时候换成真实的ip,7005作为新加入的节点,6999作为引荐他加入组织的老大哥,引荐的redis必须是当前redis集群的master节点。从哪些master节点中获取槽位?
2024-07-12 14:12:25
619
原创 redis集群报错: Node xx is not empty. Either the node already knows other nodesor contains some key in ..
redis集群搭建报错:[ERR] Node xxxx is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.3.检查每个redis节点,是否存在nodes.conf文件,存在则删除。1.检查每个redis节点,是否存在dump.rdb文件,存在则删除。2.检查每个redis节点,是否存在aof文件,存在则删除。
2024-07-11 18:20:27
164
原创 redis之集群搭建
我这边因为是在同一台服务器上搭建的redis集群,所以我在执行组装集群命令的时候,redis给我了一个警告,意思大致就是我的master节点和slave节点都在一台服务器上,实际生产是不可能这样部署的,所以这里就不过多赘述了。没条件的小伙伴,例如作者我,可以在一台服务器上启动6个redis实例(我启动的redis实例端口为6999 7000 7001 7002 7003 7004)我们发现,再次写入k1时,将redis的客户端重定向到了7001,在7001redis实例中完成了写入。
2024-07-11 16:56:38
404
原创 redis集群中的哈希槽位(slot)为什么是16384个
因此,如果有16384个插槽,每个插槽的状态需要占用16384个比特,即16384 / 8 = 2048字节,即2KB的空间。集群节点越多,心跳包的消息体携带的数据越多,如果节点超过1000个,也会造成网络的拥堵,对于节点数在1000个以内的redis集群,16384个槽位足够用了。Redis主节点的哈希槽信息是通过bitmap存储的,在传输过程中,会对bitmap进行压缩,bitmap的填充率越低,压缩率越高。也就是说slots越小,填充率就会越小,压缩率就会越高,传输效率就会越高。
2024-07-09 11:37:51
379
原创 redis之集群分片
它通过将数据分布在多个节点(片)上,每个节点(片)负责数据集的一部分,从而可以扩展存储容量和并发处理能力,解决了单个Redis实例的内存和并发限制问题。(3)读写分离:在Redis集群中,每个主节点都可以处理读和写请求,从而提供更高的响应能力。(1)数据分布式存储:Redis集群可以将数据分布在多个节点上,每个节点负责存储数据集的一部分,从而提供更高的存储容量和并发处理能力。(5)自动分片:Redis集群通过哈希槽来决定数据存储的位置,自动将数据分片存储到不同的节点上,简化了数据分片的操作。
2024-07-08 23:00:14
372
原创 redis之哨兵监控
在生产环境中,可能会存在网络阻塞,网络抖动等现象,实际redis主节点并没有宕机,由于网络原因导致哨兵收不到redis服务端的响应,因此就需要多个哨兵同时认为redis主节点宕机,才会去重新选择新的redis主节点,这里也解释了文章中第3部分讲到的,哨兵的个数需要是基数,我们以3个哨兵为例,当2个(我们在sentinel 配置文件中 配置的sentinel monitor参数,其中票数配置的2)哨兵认为redis主节点宕机了,那么就是客观(ODOWN)下线。
2024-06-25 15:49:48
509
原创 redis之主从复制
实现的原理在于主节点会记录从节点的同步数据的偏移量(offset),从节点同步到4这个偏移量的时候挂了,这时候主节点持续写入,总的偏移量到了7,那么当从节点恢复的时候,会把4-7之间的数据同步到从节点当中。我们使用shutdown命令将其中一个从节点关闭,然后主节点执行set指令,然后将从节点再启动,我们发现刚才主节点写入的数据出现在了从节点中。(3)当其中一个从节点挂了,在从节点恢复期间,主节点仍然在写入,那么当从节点恢复的时候,会把宕机这段时间主节点中的数据同步到宕机的从节点吗?
2024-06-21 16:30:25
480
原创 Redis持久化之AOF
AOF重写机制的原理是根据当前内存中的数据库状态,生成一个新的AOF文件,新的AOF文件包含了恢复当前数据库状态所需的最少命令操作,因此新生成的AOF文件会比旧的AOF文件更小。当aof文件超过了1kb之后,进行了aof文件的重写,重写过的aof文件变成了appendonly.aof.2.base.rdb同时又新生成了一个appendonly.aof.2.incr.aof文件记录增量的写操作。通过AOF重写可以将AOF文件重新生成,去除冗余的指令,同时优化文件结构,减少碎片化,提升文件的读写性能。
2024-06-19 20:26:06
824
原创 Redis持久化之RDB
本质都是redis服务端在linux系统中,fork一个子进程,子进程将内存中的数据写入到磁盘上的dump.rdb文件,此时redis的主进程仍然能处理redis客户端发送的指令。在我配置的存放rdb文件的路径下生成了一个dump.rdb文件,因为配置文件里记录的是5秒钟内有2次变化,就会生成rdb文件,我们的操作满足这个要求,因此生成了rdb文件。感兴趣的小伙伴可以试试。RDB依赖于主进程的fork,在大数据集的情况下,fork的时候内存中的数据被克隆了一份,大致2倍的膨胀,需要考虑。
2024-06-17 23:25:41
608
原创 Redis7安装教程
执行命令 cp /test/redis-7.0.15/redis.conf /test/redis_conf复制一份配置文件并保存到指定位置。有的小伙伴可能会问,为什么要备份配置文件,这里主要考虑的是,如果redis配置文件参数配置不当,有备份可以还原。执行命令 ./redis-server /test/redis_conf/redis7.conf。进入到redis安装包的路径,我这里以/test为例(安装包放到/test下)执行命令cd /test/redis-7.0.15/src。
2024-06-11 19:22:40
433
2
原创 Access denied; you need (at least one of) the SUPER privilege(s) for this operation
将可执行sql文件通过navicat导入阿里云mysql,导入过程中报错【Access denied;SQL 语句中含有需要 Supper 权限才可以执行的语句,而 RDS MySQL不提供 Super 权限。详见:https://developer.aliyun.com/article/66463。如果没使用阿里云的RDS实例,导入数据的时候报这个错的话,执行命令为当前数据库账号复权即可。mysql数据迁移至阿里云RDS实例(阿里云mysql组件)命令为:GRANT ALL PRIVILEGES ON。
2024-04-11 19:04:07
1179
原创 对于程序员来说,是懂业务更重要,还是懂技术更重要
公司想要盈利,需要对客户提供产品,提供服务,所谓的产品就是符合客户日常工作习惯,解决客户日常工作难题的一类产物,就以软件为例,客户不会因为你用了什么高端技术而多给你一部分钱去购买,反而会在意你的产品有没有他想要的功能。不和业务相关联的增删改查都是垃圾,如果不懂业务,是写不出符合客户预期功能的代码的,懂业务意味着理解公司的业务模式、行业特点、用户需求和市场趋势,这样才能更好地满足用户需求,提高产品的竞争力。3.如果你喜爱编程,擅长钻研,喜欢学习,励志成为技术大牛,那么就坚定不移的走技术路线。
2024-03-16 11:29:46
613
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人