![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 90
wzp、、、
这个作者很懒,什么都没留下…
展开
-
数据增多了,该加内存还是加实例?【切片集群】
假想一下,如果要用 Redis 保存 5 亿个键值对,平均每个键值对是 512 B,那么大概这些键值对所占的空间是 25 G,一种方案是选择更大内存的服务器,比如 32 G,这样就能保存所有的数据,同时留有 7G 的内存,可以保证系统的正常运行。但这样 Redis 服务器运行久了会出现响应速度慢的问题。使用 INFO 命令查看 latest_fork_usec(表示最近一次 fork 的耗时),发现持久化的时间特别长,快到秒级别了。这跟 Redis 的持久化机制有关,在使用 RDB 持久化时,Redis原创 2022-04-01 00:45:03 · 984 阅读 · 0 评论 -
哨兵挂了,主从库能切换吗
哨兵机制实现了监控、选主、通知功能。如果多个实例组成了哨兵集群,即使有哨兵实例出现了故障,其他哨兵还能继续协作完成主从库切换的工作,包括判断主库是不是处于下线状态,选择新主库,以及通知从库和客户端。在配置哨兵信息时,只需要配置主库的IP和端口,并没有配置其他哨兵的连接信息。sentinel monitor <master-name> <ip> <redis-port> <quorum> 那这些哨兵如何知道彼此的地址呢?基于 pub/sub 机制的哨兵原创 2022-03-19 12:44:07 · 929 阅读 · 0 评论 -
主库挂了,如何不间断服务?(哨兵机制)
在主从集群模式下,如果从库发生了故障,客户端可以继续向主库或其他从库发送请求,进行相关操作;但如果主库挂了,就会直接影响到从库的同步,因为从库没有相应的主库可以进行数据复制。如果客户端发送的都是读操作,还可以由其他从库继续提供服务,在纯读环境下还能被接受。但如果是写操作,需要由主库来完成写操作,此时主库挂了不能继续服务写操作请求了。如下图:无论是无法写操作,还是无法进行数据同步,都是不能接受的。所以如果主库挂了,就需要有一个新的主库,把一个从库切换为主库。这里边涉及了一些问题:主库真的挂了吗?该选原创 2022-03-13 23:35:22 · 2886 阅读 · 1 评论 -
redis 主从库如何实现数据一致?
使用 AOF 和 RDB,如果 redis 发生了宕机,可以分别通过回放日志和重新读入 RDB 快照来恢复数据,保证尽量少丢失数据,提升可靠性。但如果只有一个 redis 实例,这个 redis 不幸宕机了,在它恢复期间,就无法服务新来的数据存取请求。因此,redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。读:主、从库都可以接收;写:首先到主库执行,然后主库将写操作同步到从库。采用读写分离的原因:如果不管主库还是从库,都能接收客户端的写操作,那么可能客户端对同原创 2022-03-10 23:36:09 · 1046 阅读 · 0 评论 -
宕机后,redis如何实现快速恢复?(RDB 内存快照)
AOF 记录的是操作命令,而不是实际的数据,所以使用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,redis 就会恢复得很缓慢,影响到正常使用。所以,redis 的另一种持久化方法:RDB 内存快照。内存快照是指内存中的数据在某一个时刻的状态记录,它是以文件的形式写到磁盘上,这样即使宕机了,快照文件也不会丢失,可靠性也就得到了保证。但引入 RDB 也会有问题:对哪些数据做快照?这会关系到快照的执行效率问题;做快照时,数据还能被增删改吗?这会关系到 redis 是原创 2022-03-09 16:51:58 · 1875 阅读 · 0 评论 -
redis宕机了,如何避免数据丢失?(AOF日志)
日常工作中,我们一般会把 redis 当作缓存使用。但是一旦服务器宕机,内存中的数据将会全部丢失。目前,redis 的持久化主要有两大机制,即 AOF 日志和 RDB 快照。AOF 日志是如何实现的?我们比较熟悉的是数据库的写前日志(Write Ahead Log,WAL),就是在实际写数据前,先把修改的数据记到日志文件中,以便故障时进行恢复。但是 AOF 日志刚好相反,它是写后日志,就是 redis 先执行命令,再把数据写入内存,然后才记录到日志。为什么 AOF 要先执行命令再记录日志呢?传统的原创 2022-03-08 23:25:19 · 933 阅读 · 0 评论 -
为什么单线程Redis能那么快?
相信在面试中会有不少人被问到:Redis是单线程吗?为什么单线程能这么快?Redis是单线程吗?首先 Redis 是单线程,主要是指 Redis 的网络IO和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值对存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,都是由额外的线程来执行的。所以 Redis 并不全部是单线程。要理解 Redis 为什么用单线程,我们可以先来了解下多线程的开销。“使用多线程,可以增加系统吞吐率”。确实,在合理的资源分配情况下原创 2022-03-08 18:10:01 · 875 阅读 · 0 评论