Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
晶之木
advanced-java
提交
717c20b7
A
advanced-java
项目概览
晶之木
/
advanced-java
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
advanced-java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
717c20b7
编写于
11月 17, 2018
作者:
Y
yanglbme
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs(redis): update redis description
上级
fbacc67b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
23 addition
and
6 deletion
+23
-6
README.md
README.md
+2
-2
docs/high-concurrency/how-to-ensure-high-concurrency-and-high-availability-of-redis.md
...ensure-high-concurrency-and-high-availability-of-redis.md
+8
-2
docs/high-concurrency/redis-master-slave.md
docs/high-concurrency/redis-master-slave.md
+2
-2
docs/high-concurrency/redis-persistence.md
docs/high-concurrency/redis-persistence.md
+11
-0
未找到文件。
README.md
浏览文件 @
717c20b7
...
@@ -66,8 +66,8 @@
...
@@ -66,8 +66,8 @@
-
[
Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?
](
/docs/high-concurrency/redis-single-thread-model.md
)
-
[
Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?
](
/docs/high-concurrency/redis-single-thread-model.md
)
-
[
Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
](
/docs/high-concurrency/redis-data-types.md
)
-
[
Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
](
/docs/high-concurrency/redis-data-types.md
)
-
[
Redis 的过期策略都有哪些?手写一下 LRU 代码实现?
](
/docs/high-concurrency/redis-expiration-policies-and-lru.md
)
-
[
Redis 的过期策略都有哪些?手写一下 LRU 代码实现?
](
/docs/high-concurrency/redis-expiration-policies-and-lru.md
)
-
[
如何保证 Redis 高并发、高可用
、持久化
?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?
](
/docs/high-concurrency/how-to-ensure-high-concurrency-and-high-availability-of-redis.md
)
-
[
如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?
](
/docs/high-concurrency/how-to-ensure-high-concurrency-and-high-availability-of-redis.md
)
-
Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?
-
[
Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?
](
/docs/high-concurrency/redis-persistence.md
)
-
Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?
-
Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?
-
了解什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?
-
了解什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?
-
如何保证缓存与数据库的双写一致性?
-
如何保证缓存与数据库的双写一致性?
...
...
docs/high-concurrency/how-to-ensure-high-concurrency-and-high-availability-of-redis.md
浏览文件 @
717c20b7
...
@@ -9,6 +9,12 @@
...
@@ -9,6 +9,12 @@
## 面试题剖析
## 面试题剖析
如果你用 redis 缓存技术的话,肯定要考虑如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。
如果你用 redis 缓存技术的话,肯定要考虑如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。
由于此节内容较多,因此,会分为
多
个小节进行讲解。
由于此节内容较多,因此,会分为
两
个小节进行讲解。
-
[
redis 主从架构
](
/docs/high-concurrency/redis-master-slave.md
)
-
[
redis 主从架构
](
/docs/high-concurrency/redis-master-slave.md
)
-
[
redis 基于哨兵实现高可用
](
/docs/high-concurrency/redis-sentinel.md
)
-
[
redis 基于哨兵实现高可用
](
/docs/high-concurrency/redis-sentinel.md
)
\ No newline at end of file
redis 实现
**高并发**
主要依靠
**主从架构**
,一主多从,一般来说,很多项目其实就足够了,单主用来写入数据,单机几万 QPS,多从用来查询数据,多个从实例可以提供每秒 10w 的 QPS。
如果想要在实现高并发的同时,容纳大量的数据,那么就需要 redis 集群,使用 redis 集群之后,可以提供每秒几十万的读写并发。
redis 高可用,如果是做主从架构部署,那么加上哨兵就可以了,就可以实现,任何一个实例宕机,可以进行主备切换。
\ No newline at end of file
docs/high-concurrency/redis-master-slave.md
浏览文件 @
717c20b7
...
@@ -14,9 +14,9 @@ redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并
...
@@ -14,9 +14,9 @@ redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并
-
slave node 在做复制的时候,也不会 block 对自己的查询操作,它会用旧的数据集来提供服务;但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了;
-
slave node 在做复制的时候,也不会 block 对自己的查询操作,它会用旧的数据集来提供服务;但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了;
-
slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量。
-
slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量。
注意,如果采用了主从架构,那么建议必须
**开启**
master node 的
**持久化**
,不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。
注意,如果采用了主从架构,那么建议必须
**开启**
master node 的
[
持久化
](
/docs/high-concurrency/redis-persistence.md
)
,不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。
另外,master 的各种备份方案,也需要做。万一本地的所有文件丢失了,从备份中挑选一份 rdb 去恢复 master,这样才能
**确保启动的时候,是有数据的**
,即使采用了后续讲解的
高可用机制
,slave node 可以自动接管 master node,但也可能 sentinel 还没检测到 master failure,master node 就自动重启了,还是可能导致上面所有的 slave node 数据被清空。
另外,master 的各种备份方案,也需要做。万一本地的所有文件丢失了,从备份中挑选一份 rdb 去恢复 master,这样才能
**确保启动的时候,是有数据的**
,即使采用了后续讲解的
[
高可用机制
](
/docs/high-concurrency/redis-sentinel.md
)
,slave node 可以自动接管 master node,但也可能 sentinel 还没检测到 master failure,master node 就自动重启了,还是可能导致上面所有的 slave node 数据被清空。
## redis 主从复制的核心原理
## redis 主从复制的核心原理
当启动一个 slave node 的时候,它会发送一个
`PSYNC`
命令给 master node。
当启动一个 slave node 的时候,它会发送一个
`PSYNC`
命令给 master node。
...
...
docs/high-concurrency/redis-persistence.md
0 → 100644
浏览文件 @
717c20b7
## 面试题
redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?
## 面试官心理分析
redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据就全部都弄丢了啊。你必须得用 redis 的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件里,进行持久化。
如果 redis 宕机重启,自动从磁盘上加载之前持久化的一些数据就可以了,也许会丢失少许数据,但是至少不会将所有数据都弄丢。
这个其实一样,针对的都是 redis 的生产环境可能遇到的一些问题,就是 redis 要是挂了再重启,内存里的数据不就全丢了?能不能重启的时候把数据给恢复了?
## 面试题剖析
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录