- 博客(21)
- 收藏
- 关注
原创 什么是热Key问题,如何解决热key问题?
当我们使用Redis作为存储时,如果发生一些特殊情况,比如明星官宣的突发事件,世界杯等重大活动,双十一的活动秒杀等等,就会出现特别大的流量,并且会导致某些热词、商品等被频繁的查询和访问。如果在同一个时间点上,Redis中的同一个key被大量访问,就会导致流量过于集中,使得很多物理资源无法支撑,如网络带宽、物理存储空间、数据库连接等。这也是为什么某某明星官宣之后,微博上面就会出现宕机的情况。有时候这种宕机发生后,其他功能都是可以使用的,只是和这个热点有关的内容会无法访问,这其实就和热点数据有关系了。
2024-01-01 03:13:14
375
原创 Redis 的过期策略是怎么样的?
定期删除会在Redis设置的过期键的过期时间达到一定阈值时进行一次扫描,将过期的键删除,但不会立即释放内存,而是把这些键标记为“已过期”,并放入一个专门的链表中。然后,在Redis的内存使用率达到一定阈值时,Redis会对这些“已过期”的键进行一次内存回收操作,释放被这些键占用的内存空间。定期删除是 Redis 的主动删除策略,它可以确保过期的 key 能够及时被删除,但是会占用 CPU 资源去扫描 key,可能会影响 Redis 的性能。Redis 的过期策略采用的是定期删除和惰性删除相结合的方式。
2024-01-01 03:00:12
433
原创 Redis的内存淘汰策略是怎么样的?
● volatile-lru:从设置了过期时间的 key 中选择最近最少使用的那个 key 并删除。● volatile-random:从设置了过期时间的 key 中随机选择一个 key 并删除。● volatile-ttl:从设置了过期时间的 key 中选择剩余时间最短的 key 并删除。● allkeys-lru:从所有 key 中选择最近最少使用的那个 key 并删除。● volatile-lfu:淘汰的对象是带有过期时间的键值对中,访问频率最低的那个。
2023-12-30 13:11:59
380
1
原创 什么是Redis的数据分片?
当我们的存取的 Key 的时候,Redis 会根据 CRC16 算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。在Redis的Cluster 集群模式中,使用哈希槽(hash slot)的方式来进行数据分片,将整个数据集划分为多个槽,每个槽分配给一个节点。客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作。
2023-12-30 01:05:13
442
1
原创 Redis为什么这么快?
5 多线程的引入:在Redis 6.0中,为了进一步提升IO的性能,引入了多线程的机制。4 高效的数据结构:Redis 提供了多种高效的数据结构,如哈希表、有序集合、列表等,这些数据结构都被实现得非常高效,能够在 O(1) 的时间复杂度内完成数据读写操作,这也是 Redis 能够快速处理数据请求的重要因素之一。3 多路复用 I/O 模型:Redis 在单线程的基础上,采用了I/O 多路复用技术,实现了单个线程同时处理多个客户端连接的能力,从而提高了 Redis 的并发性能。
2023-12-30 00:54:58
402
1
原创 索引失效的问题如何排查?
首先,key一定要有值,不能是NULL 其次,type应该是ref、eq_ref、range、const等这几个 还有,extra的话,如果是NULL,或者using。1、没有正确创建索引:当查询语句中的where条件中的字段,没有创建索引,或者不符合最左前缀匹配的话,就是没有正确的创建索引。我们需要知道的是,到底要不要走索引,走哪个索引,是MySQL的优化器决定的,他会根据预估的成本来做一个决定。2、索引区分度不高:如果索引的区分度不够高,那么可能会不走索引,因为这种情况下走索引的效率并不高。
2023-12-29 04:48:10
499
1
原创 什么是DNS污染?DNS劫持?
DNS污染是指当一个DNS服务器被恶意修改或替换,导致该服务器不再返回正确的DNS记录,而是返回错误的记录,从而将用户错误地导向到恶意站点。DNS劫持是指当一个攻击者截获DNS请求,并代替正确的DNS服务器,提供不正确的DNS记录,从而将用户错误地导向到恶意站点。3 设置静态DNS:设置静态DNS在DNS更换或DNS污染时,可以防止DNS请求被重定向到错误的地址。1 使用安全的DNS服务商:选择一个可靠的DNS服务商,以确保DNS请求的安全。
2023-12-27 23:35:11
645
1
原创 数据库加密后怎么做模糊查询?
比如Hollis加密后的内容是363164846D8200899E314897E64A7420,那么当我想用Ho来做模糊查询时候,那么他的密文是71AAFD38484F3160708C6A6D2D5F736B,这两个密文可以说是没有任何关系的,所以,是无法直接做模糊查询的。这个需要加密的字符串,我们就可以把他拆成,l,li,liu,等这几个字符串,然后分别对他们进行加密,并保存到数据库中。一种比较常见的方法,就是把要查询的表中的所有符合条件的数据,都加载到应用内存中,在内存中逐个解密,然后再做模糊匹配。
2023-12-27 19:55:05
572
1
原创 MySQL 的 select * 会用到事务吗
虽然查询语句也会在事务的上下文中执行,但是由于没有进行任何修改操作,因此事务不会持有任何锁,并且在查询结束后立即提交。这种隐式事务通常被称为自动提交事务(autocommit)。那么,而SELECT * 这种普通的读取操作其实也会在事务的上下文中执行,即使没有明确的开启事务语句,InnoDB存储引擎也会为查询自动开启一个隐式事务。因此,InnoDB的所有操作都可以说是在事务的上下文中执行的,包括读取操作和修改操作。我们都知道,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行的,
2023-12-27 19:00:16
595
1
原创 什么是回表,怎么减少回表的次数?
而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引。那么,当我们根据非聚簇索引查询的时候,会先通过非聚簇索引查到主键的值,之后,还需要再通过主键的值再进行一次查询才能得到我们要查询的数据。而这个过程就叫做回表。当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。在存储的数据方面,主键(聚簇)索引的B+树的叶子节点直接就是我们要查询的整行数据了。的时候,就可以通过覆盖索引查询,无需回表。
2023-12-26 20:48:45
382
1
原创 为什么不推荐使用外键?
当数据量大的时候,我们就要考虑分库分表了,但是在分库分表环境中,相关数据可能分布在不同的数据库中,外键通常难以跨越不同数据库来建立关系。更重要的是,分库分表环境中,数据的一致性可能更难维护。首先,这两张表中共有两个索引,一个是Orders表的主键索引,一个是OrdersItems表的外键索引,这就使得每次插入、更新或删除订单或订单项时,数据库需都要维护这两个索引,这可能会导致性能开销。● 一致性:如果一个订单表引用了一个客户表的外键,外键可以确保订单的客户 ID 存在于客户表中,从而保持数据的一致性。
2023-12-26 18:22:25
836
1
原创 什么是OnlineDDL
Online DDL的优点就是可以减少阻塞,是MySQL的一种内置优化手段,但是需要注意的是,DDL在刚开始和快结束的时候,都需要获取MDL锁,而在获取锁的时候如果有事务未提交,那么DDL就会因为加锁失败而进入阻塞状态,也会造成性能影响。DDL操作用于创建、修改和删除数据库中的表、索引、视图、约束等数据库对象,而不涉及实际数据的操作。在MySQL 5.6之前,所有的ALTER操作其实是会阻塞DML操作的,如:添加/删除字段、添加/删除索引等,都是会锁表的。
2023-12-26 18:12:26
732
1
原创 MySQL的binlog有几种格式
比如说,当我们使用DELETE或者UPDATE的时候,指定了LIMIT,但是并没有使用order by,那么最终这条语句在主库和从库上的执行结果可能是不一样的(即使同一个库上面,你执行多次结果可能也不一样)。当binlog的格式为statement时,binlog 里面记录的就是 SQL 语句的原文,也就是说在数据库中执行的SQL会原封不动的记录到binlog中。所以,带来的问题就是基于这种格式的binlog,在数据恢复的时候,会需要更长的时间,也会导致磁盘IO和网络IO都比较高。
2023-12-26 18:07:13
622
1
原创 雪花实现思路
雪花算法是一种用于生成唯一标识符的分布式算法,由Twitter设计开发。它的核心思想是利用时间戳、机器ID和序列号来生成全局唯一的64位整数。
2023-11-21 16:36:58
33
原创 什么事责任链模式,有哪些应用。
在责任链模式中,通常将处理请求的对象称为处理器或者链的节点,每个节点都包含了处理该请求的逻辑以及指向下一个节点的引用。当请求到达一个节点时,如果该节点无法处理该请求,它会将请求转发给下一个节点,直到有一个节点处理该请求或者整个链都无法处理该请求。1,过滤器链:在Web开发中,可以通过责任链模式来实现过滤器链,例如Spring框架中的FilterChain就是,一条责任链,每个过滤器都有机会对请求进行处理,直到最后一个过滤器处理完毕。4.授权认证,在系统中,可以使用责任链模式来实现授权认证的链式调用。
2023-11-21 16:16:23
44
原创 请简述MVC模式的思想
控制器(Controller):表示应用程序的处理逻辑,用于控制视图和模型之间的交互。控制器通常包含一些事件处理和动作触发等操作,用于响应用户的输入或视图的变化,并对模型进行操作。控制器通过将用户的输入转化为对模型的操作,从而实现了视图和模型之间的解耦。这个模式的目的是将应用程序的表示(视图)与处理(控制器)分开,以及将应用程序的数据和业务逻辑(模型)与表示和处理分开。·模型(Model)︰表示应用程序的核心业务逻辑和数据。模型并不关心数据的显示或用户的交互方式,它只关注数据本身以及对数据的操作。
2023-11-21 16:09:42
329
原创 什么事设计模式?有什么好处?
首先,设计模式是一些前人经验的一些总结,所以,当遇到相似的问题的时候,我们可以直接借鉴好的设计模式来实现,这样可以大大降低我们的试错成本和迭代成本。设计模式通过使用松耦合的对象之间的交互,使系统更容易进行扩展和修改。通过引入抽象层和接口,可以将变化的部分隔离出来,而不影响整个系统的其他部分。而且,设计模式都是遵守了很多设计原则的,这些原则可以帮助我们大大提升代码的可重用性、可维护性和可扩展性等。可以很快速的就qet到其他人要说的意思,不仅可以提升沟通效率,还能降低后续代码维护中的出错概率.
2023-11-21 16:07:09
31
原创 什么是脑裂?如何解决?
典型回答 脑裂是在分布式系统中经常出现的问题之一,它指的是由于网络或节点故障等原因,导致一个分布式系统被分为多个独立的子系统,每个子系统独立运行,无法相互通信,同时认为自己是整个系统的主节点,这就会导致整个系统失去一致性和可用性。2 主节点宕机 当Zookeeper集群中的主节点宕机时,其他节点可能会重新选举新的主节点。在主节点宕机时,可以使用手动恢复来恢复脑裂。选举新的主节点 在 ZooKeeper 集群中,所有的节点都有可能成为主节点,当旧的主节点无法与其他节点通信时,集群将选举一个新的主节点。
2023-11-20 22:27:46
1201
原创 Zookeeper的数据结构是怎么样的?
节点 Znode有四种类型,PERSISTENT(持久节点)、PERSISTENT_SEQUENTIAL(持久的连续节点)、EPHEMERAL(临时节点)、EPHEMERAL_SEQUENTIAL(临时的连续节点) Znode的类型在创建时确定并且之后不能再修改 临时节点 临时节点的生命周期和客户端会话绑定。临时节点不能有子节点 持久节点 所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。注意创建的节点会自动加上编号。
2023-11-20 22:24:13
54
原创 Zookeeper的典型应用场景有哪些?
总之,ZooKeeper是一个非常适用于分布式应用程序的协调服务,它提供了强大的分布式协调功能,可以简化分布式应用程序的开发。6 分布式协调服务:Zookeeper提供了一些分布式协调服务,如分布式锁、唯一标识生成等,帮助系统中的各个组件之间进行协调。3 命名服务:ZooKeeper可以作为一个命名服务,应用程序可以通过名字来找到所需的服务。7 服务注册和发现:Zookeeper可以用于注册和发现系统中的服务,简化服务的部署和更新。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
2023-11-20 22:20:25
117
原创 数组和链表有何区别?
数组和链表都是数据集合。数组中每个元素都是连续的,通过下标进行访问,当我们获取到下标后,就可以随意访问数组中的值 链表中的元素则是不连续的,必须获得链表中某个元素后,才能顺序访问该元素的周围元素,我们没办法随意访问链表中的元素。链表分为单项链表,双向链表,环形链表等。从实现上来讲:数组可以由一块连续区域的内存实现,其中,内存地址可以作为数组的下表,该地址中的值就是数组中元素的值。因为数组占用的是一块空间,所以数组的大小申请之后就会固定。 链表可以由不连续的内存存储实现,每个元素都会存储下一个元
2023-09-03 19:01:33
44
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人