Redis-2-单线程
==作者:YB-Chi== [toc] 简介我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步 ...
阅读更多
Redis-17-分布式锁
==作者:YB-Chi== [toc] Redis属于分布式系统,当有多个客户端需要争抢锁时,我们必须要保证,这把锁不能是某个客户端本地的锁。否则的话,其它客户端是无法访问这把锁的,当然也就不能获取这把锁了。所以,在分布式系统中,当有多个客户端需要获取锁时,我 ...
阅读更多
Redis-16-无锁原子操作,如何应对并发
==作者:YB-Chi== [toc] 简介一旦有了并发写操作,数据就会被修改,如果我们没有对并发写请求做好控制,就可能导致数据被改错,影响到业务的正常使用(例如库存数据错误,导致下单异常)。 为了保证并发访问的正确性,Redis提供了两种方法,分别是加锁和原 ...
阅读更多
Redis-13-数据一致性
==作者:YB-Chi== [toc] 缓存和数据库的数据不一致是如何发生的?首先,我们得清楚“数据的一致性”具体是啥意思。其实,这里的“一致性”包含了两种情况: 缓存中有数据,那么,缓存的数据值需要和数据库中的值相同; 缓存中本身没有数据,那么,数据库中的 ...
阅读更多
Redis-15-缓存污染
==作者:YB-Chi== [toc] 缓存污染介绍那什么是缓存污染呢?在一些场景下,有些数据被访问的次数非常少,甚至只会被访问一次。当这些数据服务完访问请求后,如果还继续留存在缓存中的话,就只会白白占用缓存空间。这种情况,就是缓存污染。 当缓存污染不严重时, ...
阅读更多
Redis-14-缓存雪崩、击穿、穿透
==作者:YB-Chi== [toc] 缓存雪崩缓存雪崩是指大量的应用请求无法在Redis缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 缓存雪崩一般是由两个原因导致的,应对方案也有所不同,我们一个个来看。 第一个原因是:缓存中 ...
阅读更多
Redis-12-LRU&LFU
==作者:YB-Chi== [toc] LRUvolatile-lru和allkeys-lru策略都用到了LRU算法。LRU算法的全称是Least Recently Used,从名字上就可以看出,这是按照最近最少使用的原则来筛选数据,最不常用的数据会被筛选出来 ...
阅读更多
Redis-10-旁路缓存Redis如何工作
==作者:YB-Chi== [toc] 缓存的特征一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。 计算机系统中,默认有两种缓存: CPU里面的末级缓存,即LLC,用来缓存内 ...
阅读更多
Redis-11-淘汰策略
==作者:YB-Chi== [toc] 设置多大的缓存容量合适?实际应用中的数据访问是具有局部性的。下面有一张图,图里有红、蓝两条线,显示了不同比例数据贡献的访问量情况。蓝线代表了“八二原理”表示的数据局部性,而红线则表示在当前应用负载下,数据局部性的变化。 ...
阅读更多
Redis-1-数据结构
==作者:YB-Chi== [toc] 问题画像 数据结构 键和值的结构组织为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。所以,我们常说,一个哈希表是由多个哈希 ...
阅读更多