首页 > 数据库 >Redis — 缓存方案

Redis — 缓存方案

时间:2022-11-26 12:12:46浏览次数:68  
标签:方案 缓存 请求 过期 Redis redis 更新 数据

1 Redis — 缓存方案(热数据和冷数据)
1.1  新建和更新数据时,设置一个过期时间product_cache_timeout(比如24小时), 查询时同时也将过期时间set in redis缓存
1.2 查到数据时重新设置过期时间redisUtil.expire —>缓存读延期

2 缓存击穿

缓存击穿是指:客户端查询不存在的数据,请求打到了存储层。
2.1 批量更新update数据时,超时时间同一时间是一样(解决:设置一个随机超时时间)

解决方案:

  1. 当需要从存储层查数据时,对请求加分布式锁,使得相同的请求在同一时刻只有一个能够打到存储层,同时从存储层查询到数据后将数据缓存起来;
  2. 设置缓存永不过期,当数据更新时动态的更新缓存;
  3. 采用多级缓存,如本项目再增加一级sql缓存
  4. 设置不同的缓存过期策略,本地缓存高频的热点数据(LFU),redis缓存短有效期的热点数据(LRU),redis缓存较长时间的全量数据。


3 缓存穿透

缓存穿透是指:客户端查询不存在查询的数据,使得请求直达存储层,导致服务器压力过大,甚至宕机。
3.1 删除缓存,DB数据。秒杀时查后端的所有数据,穿透后端
解决:查数据时is null时,给缓存设置empty_cache = ”{}”, 并且设置超时时间60s

解决方案:

  1. 查询存储层不存在的数据时,在缓存中插入空的值,当客户端再查询时,直接返回缓存中的空值;
  2. 使用布隆过滤器,将数据存入布隆过滤器,访问缓存之前先通过过滤器拦截,如果数据不存在直接返回空值。



4 突发性访问数据同一个产品(直播间买东西)DCL—> double check lock
4.1 synchronized(this){双重查缓存数据,再查DB} —> 仅适合单机,分布式要每台都要设置

5 不同产品,要设置分布式锁,解决突发性
5.1 redis 分布式锁(redisson)
格式: setnx key value
将 key的值设为value,当且仅当key不存在。若给定的key已经存在,则setnx不做任何动作。
解决:加一个redisson.getLock(lock_hot_cache,id);  lock(); unlock();

6 缓存与数据库双写不一致
6.1 在update同一个产品加一个分布式锁。—>updateLock -> redisson.getLock()

7 优化分布式锁
7.1 读写锁(基于Lua脚本)
读锁:读锁是共享(不互斥,并发执行)
写锁:写锁不共享
Update同一个产品时加一个读写锁—> redission.getReadWriteLock();
7.2 串行转并发(是否需要根据业务需要) —> redissionLock.tryLock(3);
当大量请求访问,超过3s第一个请求还没处理完就退出,其它请求就要直接访问

8 缓存雪崩(上百万请求)

缓存雪崩是指:缓存中大量的数据同时过期,导致在某一时刻大量的请求直接打到存储层。由于缓存出问题导致DB也出问题,导致整个系统出问题。
8.1 多级缓存 —> 先查内存缓存(分发到多台服务器) —> Map
问题:多台服务器map缓存不一致

https://blog.csdn.net/sichenss/article/details/124520356

解决方案:

  1. 在缓存的过期时间后面加一个随机值,使不会有大量缓存在同一时刻过期;
  2. 采用降级或熔断措施,在发生雪崩时,直接返回预定义的值;
  3. 部署高可用的缓存集群,redis采用哨兵+集群的模式,部署多个实例,个别节点不可用时,依然保证服务整体可用。

 

更新缓存

当数据库发生修改时,会通过MQ的方式将修改的信息随机发送给一个provider,provider收到更新的消息后,会执行响应的缓存更新操作,更新redis缓存。当provider更新完redis缓存后,会再发送一条MQ消息,将更新信息广播给每一个consumer,consumer收到消息后更新本地缓存

 

 




资源:
https://www.bilibili.com/video/BV1yP41137a6/?p=2&spm_id_from=pageDriver&vd_source=421bd243f8bd3301b75c39e05fc076cb
https://eoccc.gitee.io/2021/12/13/%E5%A4%9A%E7%BA%A7%E5%85%B1%E4%BA%AB%E7%BC%93%E5%AD%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/









 

标签:方案,缓存,请求,过期,Redis,redis,更新,数据
From: https://www.cnblogs.com/ningshare/p/16927193.html

相关文章

  • Docker搭建Redis高可用集群(基于redis-sentinel)
    一主二从wgethttp://download.redis.io/redis-stable/redis.conf#主库dockerrun--nameredis-master-d-p6300:6300-v/D/Workspace/Docker/docker-install-redis-cl......
  • Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionExcepti
    背景:idea使用在java程序中练习使用redis.Causedby:java.net.SocketTimeoutException:connecttimedout解决过程:linux虚拟机或者说服务器没有关闭防火墙命令:sy......
  • redis-集群
    集群容量不够,redis如何进行扩容?并发写操作,redis如何分摊?另外?主从模式,薪火相传方式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。之......
  • 半导体新能源智能装备上位机工业软件设计方案
    一、什么是上位机软件如果说PLC是工业控制的小脑,那么上位机软件就是其大脑。在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,上位机往往是数字信号的处理和......
  • PROFINET转EtherCAT网关方案设计
     1摘要PLC控制器和远程IO通过通讯的方式在目前的生产现场中越来越频繁;有些现场是控制器和远程IO站是统一的通讯协议,而有些现场会出现远程IO站不用协议的情况,主要是来自不......
  • 电梯物联网网关软硬件一体化解决方案
    电梯物联网监测平台,基于边缘计算智能监测设备全天候、全自动监测电梯的运行。通过采集电梯实时运行传感数据,建立运行状态关键数据标准,基于AI机器学习算法,采用大数据分析计算......
  • 智能服务机器人产品及解决方案
    产品概述随着人工智能(AI)领域技术的不断发展和演进,面向人工智能的领域应用也越来越被更多的企业关注。信迈作为中国领先的创新型软件及信息技术服务商,一直致力于人工智能领域......
  • 智能终端测试解决方案
    概述随着互联网+产业的蓬勃发展,智能终端的崛起,无论是移动终端制造商、移动通信运营商以及移动互联网内容服务商,都面临着新技术、新业务、新服务不断涌现,商用进程不断加快的......
  • 硬件&OS测试解决方案
    硬件&OS测试解决方案方案概述服务器硬件、OS兼容性和认证测试所有数据中心和云计算服务的核心技术都是规模化,是建立在大规模服务器分布式部署的基础上的,而目前市场上服务器......
  • 联想小新Air14使用傲梅分区助手进行硬盘克隆出现的问题,克隆完显示RAW格式解决方案,win1
    联想小新Air14使用傲梅分区助手进行硬盘克隆出现的问题,克隆完显示RAW格式解决方案买电脑时没考虑到512会不够用,也没注意到小新Air14是单插槽的,所以有了今天的故事。本文......