初始Redis(一)

一、缓存知识概念解析

  • 什么是缓存

我们日常生活中,经常会接触听到缓存这个词,例如,浏览器清空缓存,处理器缓存大小,磁盘缓存等等。但今天我们可以将缓存大致分为以下种类:

硬件缓存: 指的是机器上的 CPU、硬盘等组件的缓存区间,利用内存作为中转区域,并通过内存交互信息,减轻负载,提高传输效率。

客户端缓存: 指的是某些应用,例如浏览器、手机App、视频缓冲等,都是在加载一次数据后将数据临时存储到本地,当再次访问时候先检查本地缓存中是否存在,存在就不必去远程重新拉取,而是直接读取缓存,这样来减少远端服务器压力和加快载入速度。

服务端缓存: 指远端服务器上,考虑到客户端请求量过多,某些数据请求量过大,还有时常被访问的热点数据经常要到数据库中读取,给数据库造成压力,还有就是 IO、网络等原因有延迟效应,响应客户端较慢。所以,在一些不考虑实时性的数据中,经常将这些数据存在内存中(内存速度非常快)。

  • 为什么要使用缓存

用缓存,主要有解决 高性能高并发减少数据库压力。缓存本质就是将数据存储在内存中,当数据没有发生变化的时,尽量避免直接连接数据库进行查询,因为并发高时很可能会将数据库压塌,而是去缓存中读取数据,只有缓存中未查找到时再去数据库中查询,这样就大大降低了数据库的读写次数,增加系统的性能并能提供的并发量。

  • 缓存的优缺点优点

优点缺点
加快了响应速度内存容量相对硬盘小。
减少了对数据库的读操作,数据库的压力降低。缓存中的数据可能与数据库中数据不一致。

 

二、Redis 概念知识

  • 什么是Redis

Redis 是一个高性能的 Key-Value 的NoSQL类数据库,是为了解决 高并发、高扩展,大数据存储 等一系列的问题而产生的数据库解决方案。但是,它不能替代关系型数据库,只能作为特定环境下的扩充。

  • 为什么要使用Redis做缓存件

支持高可用: Redis 支持 masterslave 机制、sentinal 模式、cluster 模式,这保证了 Redis 运行的稳定和高可用行。

支持多种数据结构: Redis 不仅仅支持简单的 Key/Value 类型的数据,同时还提供 list、set、zset、hash 等数据结构。

支持数据持久化: 可以将内存数据输入到磁盘中,当宕机或者故障重启时,可以再次加载进 Redis,从而不会丢失或减少数据。

有很多工具与插件对其支持: Redis 在业界广泛使用,并成为缓存的首选目标,同时,很多语言和工具对其支持,用起来方便快捷。

  • Redis支持的数据类型

字符串(string)哈希表(hash)列表(list)集合(set)有序集合(zset)

为了保证读取的效率,Redis 把数据对象都存储在内存当中,同时,它支持周期性把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同排序的操作。

三、缓存后可能遇见的问题

缓存穿透

缓存穿透: 指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。

解决办法:

  • 缓存空值,在从 DB 查询对象为空时,也要将空值存入缓存,具体的值需要使用特殊的标识, 能和真正缓存的数据区分开,另外将其过期时间设为较短时间。
  • 使用布隆过滤器,布隆过滤器能判断一个 key 一定不存在(不保证一定存在,因为布隆过滤器结构原因,不能删除,但是旧值可能被新值替换,而将旧值删除后它可能依旧判断其可能存在),在缓存的基础上,构建布隆过滤器数据结构,在布隆过滤器中存储对应的 key,如果存在,则说明 key 对应的值为空。

缓存击穿

缓存击穿: 某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。

解决办法:

  • 设置二级缓存,或者设置热点缓存永不过期,需要根据实际情况进行配置。
  • 使用互斥锁,在执行过程中,如果缓存过期,那么先获取分布式锁,在执行从数据库中加载数据,如果找到数据就存入缓存,没有就继续该有的动作,在这个过程中能保证只有一个线程操作数据库,避免了对数据库的大量请求。

缓存雪崩

缓存雪崩: 当缓存服务器重启、或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力,造成数据库后端故障,从而引起应用服务器雪崩。

解决方法:

  • 缓存组件设计高可用,缓存高可用是指,存储缓存的组件的高可用,能够防止单点故障、机器故障、机房宕机等一系列问题。例如 Redis sentinel 和 Redis Cluster,都实现了高可用。
  • 请求限流与服务熔断降级机制,限制服务请求次数,当服务不可用时快速熔断降级。
  • 设置缓存过期时间一定的随机分布,避免集中在同一时间缓存失效。
  • 定时更新缓存策略,对于实时性要求不高的数据,定时进行更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值