编辑
2023-11-03
缓存中间件
0

缓存预热

​ 缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,用户直接查询事先被预热的缓存数据,大大减少数据库的查询压力。

缓存雪崩

​ Redis主机挂了,导致Redis全盘崩溃,比如缓存中有大量数据同时过期。

如何解决呢

​ 1、监控redis服务器的性能指标。

​ 2、构建多层的缓存机构,在nginx缓存下面做redis缓存,在redis缓存下面在做ehcache缓存。

​ 3、redis缓存集群要实现高可用,可以使用主从 + 哨兵模式,或者Redis Cluster。

​ 4、数据库的性能也要优化,把数据库里面的超时查询和耗时比较高的事务想办法优化。

​ 5、开启Redis持久化机制aof/rdb,能尽快恢复缓存集群。

​ 6、要做好降级措施,如果出现缓存雪崩,要有兜底机制。可以限流、降级,短时间范围内牺牲一些客户体验,限制一部分请求访问,降低应用服务器压力,待业务低速运转后再逐步放开访问。

​ 7、LRU和LFU进行切换,LRU和LFU可以保证删除数据的时候不要去淘汰按照时间淘汰的,要去淘汰按照访问次数的。

​ 8、调整有效期的策略,例如把商品和热点新闻,我们把他们的错峰时间分开,不要让他们一次性全崩,过期时间使用固定时间+随机值的形式,稀释集中到期的key的数量。

​ 9、定期做维护,对即将过期数据做访问量分析,确认是否延时,配合访问量统计,做热点数据的延时。

编辑
2023-10-19
缓存中间件
0

可以解决什么问题?

存在50亿个电话号码(或者ip、黑名单、url),给10万个电话号码,如何快速准确判断这些号码是否存在?

基本概念

布隆过滤器是一个很长的二进制数组+一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中。

能高效的插入和查询,占用空间少,返回的结果是不确定性的。一个元素如果判断结果为存在的时候元素不一定存在,但是判断结果为不存在时则一定不存在。 布隆过滤器可以添加元素但是不能删除元素,因为删掉元素会导致误判率增加。误判只会发生在过滤器没有添加过的元素,对于添加过的元素不会发生误判。

使用场景

1、主要是解决缓存穿透问题

  • 把已存在的数据的key存在布隆过滤器中,相当于在redis前面挡了一层布隆过滤器。
  • 当有新的请求时,先到布隆过滤器中查询是否已经存在;
  • 如果布隆过滤器中不存在该数据则直接返回;
  • 如果布隆过滤器中已存在,才去查询缓存redis,如果redis里没有查到则到MySQL数据库中查询。

2、黑名单校验

原理

编辑
2023-03-27
缓存中间件
0

在Redis集群中{user}:123和{user}:456两个key会被放到同一个槽中吗?

答案是会的。

在Redis集群中,数据是通过哈希槽来分片的。每个槽都有一个编号,从0到16383。当Redis集群中有多个节点时,每个节点负责处理一部分槽。当一个客户端向Redis集群中写入一个键值对时,Redis会根据键名计算出一个哈希值,然后将这个哈希值对16384取模,得到一个槽编号。Redis会根据这个槽编号将键值对分配到相应的节点上。

在Redis集群中,如果两个键名被分配到同一个槽上,它们就会被放到同一个节点上。因此,如果两个键名的哈希值对16384取模的结果相同,它们就会被放到同一个槽中。

编辑
2024-09-08
项目设计
0

DDD领域驱动设计

编辑
2024-10-22
运维配置
0
shell
cd /etc/sysconfig/network-script/
shell
vi ifcfg-ens33
shell
#添加此行 BOOTPROTO=static # 修改如下信息 IPADDR=192.168.234.101 NETWORK=192.168.234.2 NETSTAT=255.255.255.0 GATEWAY=192.168.234.2 DNS1=8.8.8.8 DNS2=114.114.114.114

克隆机器重新生成mac信息

HWADDR=00:1C:42:F4:1C:34

shell
service network restart