分布式下缓存Redis

目录

memcache 和 redis 优劣 简称 M和R

为什么需要缓存

R集群的两种模式

主从副本模式

切片模式

 缺点

缓存穿透

缓存雪崩

缓存击穿


memcache 和 redis 优劣 简称 M和R

这个有人背吗?自己查着背吧

M支持单一string类型,R支持string、list、hash、set、zset……

为什么需要缓存

提高mysq或是其他数据库的瓶颈。就单体来说,R可以10w的qps,但是mysql可能只有1w。把数据缓存到R则可以有更高的qps。qps:每秒查询数

R集群的两种模式

主从副本模式

分布式下缓存Redis

读数据在slave读,写数据在master然后同步到slave

缺点:很清楚的看的出来单个机器的内存仍是限制。因为我们只是把访问压力分开了,没有扩展R的内存。这时候就像一个数据库放在一块内存里

切片模式

把一个数据放在多个内存里。

分布式下缓存Redis

 常用的切片规则是使用一致性哈希算法。

使用R的ip和编号算出hash值,然后余一个数比如‘%2^32’,比如落在以下几个点。

分布式下缓存Redis

 我们把数据存入R时,算出hash(key)%2^32看落在哪个区间。比如落在这里。

分布式下缓存Redis

 那么这个数据就会被缓存到slave2。

如果此时又有一个slave3落在了这里.那么之前再slave2的那条数据,就会迁移到slave3中。

分布式下缓存Redis

 缺点

可能出现数据倾斜的问题。如果是以下情况。大部分数据都落到slave1上。

分布式下缓存Redis

 解决:虚拟出slave1和slave2节点。使分配尽量均匀。

缓存穿透

概念:访问缓存不存在的数据,直接落在数据库上。

常用解决办法:字段检验。布隆过滤器。主要原理是利用hash算法缓存数据。但是存在误差。因为存在hash碰撞的问题。核心:存在的数据不一定存在。不存在的数据一定不存在。

降低错误率:可以扩大布隆过滤器的长度。或者增加hsah算法。如果布隆过滤器长度为10。我们用两个hash算法,则命中一个概率为十分之一,两个都命中相同的概率使十分之一乘十分之一就是一百分之一,碰撞概率极大降低。

缓存雪崩

概念:缓存大面积失效或者过期

解决方法:从R来说,设置永不过期;设置随机失效时间;热点数据在副本里设置不同的过期时间。

缓存击穿

概念:缓存过期的一瞬间,同时有大量的请求打进来

解决方案:

1、加互斥锁。在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。

2、热点数据不过期

上一篇:hashcat


下一篇:HashMap简介及部分源码分析