首页 > 数据库 >Redis 缓存机制

Redis 缓存机制

时间:2023-04-05 17:35:54浏览次数:40  
标签:缓存 数据库 Redis 更新 一致性 机制 数据

1.Redis 缓存   缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用 DRAM 技术,而使用昂贵但较快速的 SRAM 技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。   Redis 因读写性能较高,它非常适合作为存贮数据的临时地方、成为数据交换的缓冲区,因此在一些大型互联网应用中,Redis 常用来进行数据缓存处理。   Redis 作为缓存,给系统带来了一些好处:  降低后端负载  提高读写效率,降低响应时间 但同时,在项目中使用缓存也会带来一些问题:  数据一致性问题:redis 和 mysql 如何保存数据一致性  代码维护成本:处理缓存穿透、缓存雪崩等问题  运维成本:redis 集群的维护 这些问题是 Redis 作为缓存时必须要考虑的。   2.数据一致性问题 2.1 Redis 缓存更新策略 从 Redis 的角度来说,它的缓存更新策略一般有 3 种,如下表:

 

  在实际的应用中,根据不同的需缓存处理的数据性质,数据的一致性需求存在以下 两种情况:  弱一致性需求:如一些商品类型、客户类型、店铺类型等表示某种类型的数据,一般变动比较少,对这些数据进行缓存处理时,可以使用内存淘汰机制;  强一致性需求:如商品库存、店铺主页、促销、优惠券等数据,经常发生变化,对这些数据进行缓存处理时,可以使用主动更新策略,并以超时剔除作为兜底方案。   2.2 主动更新策略   主动更新策略即更新数据库的同时更新 Redis 缓存,具体实现时,一般使用以下方案:  删除缓存:更新数据库时,删除缓存,让缓存失效,查询时再更新缓存;  保证数据的原子性:单体系统,将缓存与数据库操作放在一个事务,分布式系统,则利用 TCC 等分布式事务方案;  减少并发操作带来的数据错误:先操作数据库,再删除缓存  使用超时剔除机制:当数据写入缓存时,一定设定超时时间   3.缓存穿透 3.1 什么是缓存穿透   缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,缓存永远不会生效。这样,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。   3.2 解决方案 常用的缓存穿透的解决方案包括:  对空值进行缓存:即使一个查询返回的数据为空,仍然把这个空结果(null)进行缓存,同时还可以对空结果设置较短的过期时间。这种方法实现简单,维护方便,但是会额外的内存消耗。  采用布隆过滤器:(布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。  进行实时监控:当发现 Redis 的命中率开始急速降低,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务  增强 id 的复杂度,避免被猜测 id 规律  做好数据的基础格式校验  加强用户权限校验   4.缓存雪崩 4.1 什么是缓存雪崩 缓存雪崩是指在同一时段大量的缓存 key 同时失效,或者 Redis 服务宕机,导致大量请求到达数据库,带来巨大压力。   4.2 解决方案 常用的缓存雪崩的解决方案包括:  给不同的 Key 的 TTL 添加随机值  利用 Redis 集群提高服务的可用性  给缓存业务添加降级限流策略  给业务添加多级缓存

标签:缓存,数据库,Redis,更新,一致性,机制,数据
From: https://www.cnblogs.com/qiqi-yi/p/17289942.html

相关文章

  • 在Linux部署Redis主从和哨兵集群实现高可用
    前言本文主要讲述在Linux系统中配置和部署Redis主从集群和哨兵,实现高可用和自动故障迁移。准备工作参考Redis单机部署安装3个Redis服务作一主二从,本文准备了6380(主)、6381(从)和6382(从)。参考Redis单机部署安装3个Redis服务作哨兵集群,本文准备了26380......
  • 在Linux部署Redis Cluster集群
    前言本文讲述在Linux系统部署RedisCluster实现数据分片的具体步骤。请参考Redis单机部署下载编译。RedisCluster是什么?RedisCluster是官方提供的一种用数据分片来实现横向扩容的解决方案,由一个或多个Redis服务组成一个无主集群。对Key使用哈希算法将数据分散......
  • 在Linux部署Redis代理Predixy实现数据分片
    前言本文以predixy-1.0.5为例,讲述Redis代理Predixy安装过程。Predixy是一款高性能全特征Redis代理,支持Redis-sentinel和Redis-cluster。作者拿其它常用代理做了性能测评,Predixy在各个维度性能都是最优的,与其他代理的功能对比。我们可以通过取模、随机、一致性哈希......
  • 在Linux部署Redis代理Twemproxy实现数据分片
    前言本文主要讲述Redis代理Twemproxy安装过程。Twemproxy是推特开源用于Memcached和Redis的轻量级代理。这里以0.5.0版本为例。我们可以通过取模、随机、一致性哈希等算法将数据分散在多个Redis服务来实现水平扩展。但是客户端直连就需要跟每个Redis服务产生连接,......
  • Redis——(主从复制、哨兵模式、集群)的部署及搭建
    重点:主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。哨兵和集群都是在主从复制基础上实现高可用的。缺点:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。哨兵:在主从复制的基础上,哨兵......
  • 在Linux部署单机Redis完整过程
    前言本文以redis-6.2.5为例,讲述在Linux系统下单机Redis下载、编译、打包、安装为服务、启动和访问的整个过程。安装环境为LinuxCentOS64,本文用的7.5版本.下载编译目录在当前目录soft/redis下,最终服务可执行程序在/opt/soft/redis6中。准备工作#查看是否有文件下载......
  • Redis系列12:Redis 的事务机制
    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster集群模式追求性能极致:Redis6.0的多线程模型追求性能极致:客户端缓存带来的革命Redis系列8:Bitmap实现亿万级......
  • Redis 的 Java 客户端
    实际项目中,需要通过编程语言去访问并操作Redis。Redis官方提供了多种语言的客户端,具体可访问以下地址:https://redis.io/clientsJava语言访问Redis,常用的API包括:(1)Jedis:一个很小但很健全的redis的java客户端,通过Jedis可以像使用Redis命令行一样使用Redis;Jedis......
  • Docker 下 RedisCluster 分片集群搭建
    1.Cluster分片集群1.1Cluster集群的结构和作用redis哨兵模式虽然提供了redis⾼可⽤、高并发读的解决方案,但是在海量数据应用场景下,仍然存在海量数据存储问题和高并发写的问题。当只有⼀个Master对外提供服务时,如果数据量特别⼤,内存占⽤问题严重,数据的高并发写、数......
  • Redis 数据库的哨兵模式
    1.哨兵模式1.1哨兵模式的结构和作用哨兵(Sentinel)是Redis官方提供的一种高可用方案,它可以监控多个Redis服务实例的运行情况。本质上,Sentinel也是一个运行在特殊模式下的Redis服务器。主从复制模式下,一般会配置多个Sentinel节点,通过互相协作来实现系统的高可用。......