redis和memcache区别

news/2024/10/31 1:23:22/

1redis做存储,可以持久化,memcache做缓存,数据易丢失。

2 redis支持多数据类型,memcache存放字符串。

3 redis服务端仅支持单进程、单线程访问,也就是先来后到的串行模式,避免线程上下文切换,自然也就保证数据操作的原子性。Memcache服务端是支持多线程访问的。

4 redis虽然是单进程单线程模式,但是redis使用了IO多路复用技术做到一个线程可以处理很多个请求来保证高性能。

Redis的主从复制

1 在Slave启动并连接到Master之后,它将主动发送一个SYNC命令给Master。

2 Master在收到SYNC命令之后,将执行BGSAVE命令执行后台存盘进程(rdb快照), 同时收集所有接收到的修改数据集的命令即写命令到缓冲区,在后台存盘进程执行完毕后,Master将传送整个数据库文件到Slave。

3 Slave在接收到数据库文件数据之后,将自身内存清空,加载rdb文件到内存中完成一次完全同步。

4 接着,Master继续将所有已经收集到缓冲区的修改命令,和新的修改命令依次传送给Slaves

5 Slave将在本地执行这些数据修改命令,从而达到最终的数据同步

6 之后Master和Slave之间会不断通过异步方式进行命令的同步,从而保证数据的实时同步

7 如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master

Redis的主从复制阻塞模式

1 同一个Master服务可以同步n多个Slave服务

2 Slave节点同样可以接受其它Slave节点的连接和同步服务请求,分担Master节点的同步压力

3 Master是以非阻塞方式为Slave提供同步服务,所以主从复制期间Master一样可以提供读写请求。

4 Slave同样是以非阻塞的方式完成数据同步

Redis哨兵主要功能

(1)集群监控:负责监控Redis master和slave进程是否正常工作

(2)消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员

(3)故障转移:如果master node挂掉了,会自动转移到slave node上

(4)配置中心:如果故障转移发生了,通知client客户端新的master地址

Redis高并发和快速的原因

1.redis是基于内存的,内存的读写速度非常快;

2.redis是单线程的,省去了很多上下文切换线程的时间;

3.redis使用多路复用技术,可以处理并发的连接。

缓存雪崩

如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。

解决办法:

没有完美的解决方案,可以通过随机算法让失效时间随机分布,避免同一时刻失效。

缓存穿透

访问一个不存在的key,缓存不起作用,请求会穿透到DB,可能DB也没查到,流量大时DB会挂掉。

解决办法:

1.采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;

2访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。


http://www.ppmy.cn/news/60345.html

相关文章

程序员崩溃的N个瞬间

说到程序员,在外界眼里,他们是掌控代码的大神,他们是改变世界的王者。其实程序员的工作不容易,不信,就来看看程序员崩溃的各种瞬间—— 01、公司实习生找bug 02、在调试时,将断点设置在错误的位置 03、当我…

【网络代理详解:原理、类型及应用】

在互联网世界中,网络代理是一种常用的技术手段,可以帮助我们在访问网络资源时保护隐私、绕过地域限制等。本文将详细介绍网络代理的原理、类型及应用,让我们一起来了解这个神秘而实用的网络技术。 一、网络代理定义与基本原理 定义 网络代…

ginbuilder 工具快速创建

ginbuilder github 地址 快速创建一个ginweb项目: 目前apps下只有http服务,如果后续有需要的话,会添加上rpc服务,websocket服务后边如果有需要会添加上swagger 创建完成的目录结构 ├── apps │ ├── apis // 所有的apis…

Arduino_STM32 之Arduino IDE开发配置

前言 由于选了物联网作为选修课,老师喜欢使用Arduino进行编程,但是也要教我们使用STM32。于是他就让我们使用Arduino IDE开发STM32(用Keil 不好吗???)。 第一章 软件下载 安装Arduino IDE&…

可视化绘图技巧100篇高级篇(一)-环状条形图(radial bar chart)

目录 前言 绘图工具及代码实现 TABLEAU 创建辅助数列 创建计算字段 R语言

vue框架快速入门

vue 1、第一个Vue程序1.1、什么是Vue程序1.2、为什么要使用MVVM1.3、Vue1.4、第一个vue程序 2、基础语法2.1、v-bind2.2、v-if, v-else2.3、v-for2.4、v-on 3、Vue表单双绑、组件3.1、什么是双向数据绑定3.2、在表单中使用双向数据绑定3.3、什么是组件 4、Axios异步…

【计算机网络】面试高频问题汇总及详细解答

【C语言部分】面试高频问题汇总及详细解答 【操作系统(Linux)】面试高频问题汇总及详细解答 【数据库】面试高频问题汇总及详细解答 本文目录 1. 简述网络七层参考模型及每一层的作用2. 简述静态路由和动态路由3. 说说有哪些路由协议,都是如何更新的4. 简述域名解析…

Springboot +Flowable,任务认领和回退(一)

一.简介 有的时候,一个任务节点会存在多个候选人,例如:张三提交一个任务,这个任务即可以由李四处理,又可以由王五处理,那么针对这种多个任务候选人的情况,该如何处理? 二.绘制流程…