[关闭]
@Alpacadh 2022-09-18T16:53:10.000000Z 字数 4867 阅读 213

基础知识

Redis


1、Redis为何快

1)基于内存;

2)单线程减少上下文切换,同时保证原子性;

3)IO多路复用;

4)高级数据结构(如 SDS、Hash以及跳表等)。

2、为何使用单线程

2.1 单线程为什么那么快

3、缓存三大问题及解决方案

3.1 缓存穿透

3.2 缓存击穿

3.3 缓存雪崩

4、先删后写还是先写后删

4.1 先删缓存后写 DB

产生脏数据的概率较大(若出现脏数据,则意味着再不更新的情况下,查询得到的数据均为旧的数据)。

比如两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。

4.2 先写 DB 再删缓存

产生脏数据的概率较小,但是会出现一致性的问题;若更新操作的时候,同时进行查询操作并命中,则查询得到的数据是旧的数据。但是不会影响后面的查询。

比如一个是读操作,但是没有命中缓存,然后就到数据库中取数据,此时来了一个写操作,写完数据库后,让缓存失效,然后之前的那个读操作再把老的数据放进去,所以会造成脏数据。

4.3 延时双删

理论上不会产生脏数据,具体操作为:先把redis缓存的数据删掉,然后在修改数据库数据,这时候sleep一下(即延迟),然后在把redis缓存的数据删掉,就OK了。

4.4 解决方案

1)缓存设置过期时间,实现最终一致性;

2)使用 Cannel 等中间件监听 binlog 进行异步更新;

3)通过 2PC 或 Paxos 协议保证一致性。

5、Redis 如何保证原子性

6、Redis数据结构有哪些应用场景

Redis 在互联网产品中使用的场景实在是太多太多,这里分别对 Redis 几种数据类型做了整理:

1)String:缓存、限流、分布式锁、计数器、分布式 Session 等。

2)Hash:用户信息、用户主页访问量、组合查询等。

3)List:简单队列、关注列表时间轴。

4)Set:赞、踩、标签等。

5)ZSet:排行榜、好友关系链表。

7、常用命令

7.1 Redis常用操作

redis-cli -h 127.0.0.1 -p 6379

https://www.cnblogs.com/cxxjohnson/p/9072383.html

8、如何保证Redis的高并发

8.1 主从复制如何实现

点击展开内容

这里有个地方需要注意,FULLRESYNC响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库

8.1 核心机制

8.2 主从架构的核心原理

8.3 断点续传

8.4 无磁盘化复制

8.5 过期key处理

9、如何保证Redis的高可用

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注