memcacheredis构建缓存服务器

一、缓存服务器:

1、简介:

① 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

● RDBMS:关系数据库管理系统(Relational Database Management System),如Oracle Database、MySQL等。

② Memcached/redis 是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。

2、缓存服务器作用:

加快访问速度 缓解数据库压力

● NOSQL:Not Only SQL ,非关系型数据库的一种概念,以键值对的方式存储数据,产品有memcache、redis、mongoDB

二、memcache

1、特点:

① 内存存储:memcache 的存储方式是将数据存储在内存中。它不会将数据持久化到磁盘,因此在服务重启或重启之后,数据将丢失。因此,memcache 主要用于临时性数据缓存,而非持久化数据存储。

② 键值对存储:memcache 将数据存储为键值对。每个键都是唯一的,并且与一个值相关联。键是用于检索和存储数据的标识符,值则是实际的数据内容。

2、服务框架:

① 检查用户请求的数据是缓存中是否有存在,如果存在,只需要直接把请求的数据返回,无需查询数据库。

② 如果请求的数据在缓存中找不到,再去查询数据库。返回请求数据的同时,把数据存储到缓存中一份。

③ 当数据发生变化的时候,同步的更新缓存信息,确保用户不会在缓存取到旧的数据。

3、配置:

(1) 安装并修改配置文件:

yum install -y memcached

vim /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="1500"

OPTIONS=""

PORT:这个参数指定了 Memcached 服务监听的端口号;

USER:这个参数指定了运行 Memcached 服务的用户;

MAXCONN:这个参数定义了 Memcached 服务能够支持的最大并发连接数;

CACHESIZE:这个值决定了 Memcached 可以使用的内存量(单位:MB)

(2) 启动并测试

① systemctl start memcached.service

② yum install -y telnet

③ set name 0 900 5

设置名称为 name 的 key,0 是key的 id ;900 是缓存过期时间(s),若设为0则表示永不过期 ;5 表示字符串的最大长度。

aaaaa 是 name 的值 ;STORED 表示存储成功

get name 可以查询 key 为 name 的值。

三、redis

1、简介:

redis 是一个开源的、使用C语言编写的、基于键值对的内存数据库。

(1) 特点:

① 丰富的数据结构:Redis 支持多种数据结构,如字符串、哈希表、列表、集合等;

② 支持持久化:Redis 提供了多种持久化方式,可以将内存中的数据定期写入磁盘,确保数据在重启或断电情况下不丢失;

③ 支持事务:Redis 支持事务,可以批量执行多个命令,并确保这些命令要么全部执行成功,要么全部失败。

④ 支持主从。

(2) redis相比memcached有哪些优势:

① memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型;

② redis可以持久化其数据。

2、redis 配置:

(1) 安装:

redis 官网:Download | Redis

tar zxvf redis-7.0.14.tar.gz

● Redis是基于c语言编写的需要安装依赖,需要安装gcc:yum install -y gcc-c++

● 编译:

cd redis-7.0.14/

make

(2) 配置开机启动:

mkdir /etc/redis

cp redis-7.0.14/redis.conf /etc/redis/6379.conf

cp redis-7.0.14/utils/redis_init_script /etc/init.d/redis

● 修改redis启动脚本:

vim /etc/init.d/redis

修改EXEC与CLIEXEC的路径:

授权:chmod +x /etc/init.d/redis

重载配置:systemctl daemon-reload

启动 redis:

3、redis 持久化:

(1) 概念:

redis 持久化是指将 redis 中的数据保存到磁盘上以防止数据丢失的过程,开启持久化功能后,重启redis,数据会自动通过持久化文件恢复。

持久化方式有:RDB、AOF

(2) RDB (Redis DataBase):

① 概念:

在指定的时间间隔内生成数据的快照,并将快照保存到一个以.rdb为后缀的文件中,存储到磁盘上。

② 特点:

● 周期性

● 不影响数据写入:RDB会启动子进程,备份所有数据。 当前进程,继续提供数据的读写。 当备份完成,才替换老的备份文件

● 高效:一次性还原所有数据

● 完整性较差:故障点到上一次备份之间的数据无法恢复

③ 配置:

RDB 默认开启

vim redis-7.0.14/redis.conf

● dbfilename dump.rdb:持久化数据存储在本地的文件

● dir ./ :持久化数据文件储存在本地的路径

● 触发持久化操作的条件:

save 900 1 :900秒(15分钟)内至少发生1次写操作,就触发一次 RDB 持久化

save 300 10 :300秒(5分钟)内至少发生10次写操作,就触发一次 RDB 持久化

save 60 10000 :60秒内至少发生10000次写操作,就触发一次 RDB 持久化

● stop-writes-on-bgsave-error yes:在执行后台保存(bgsave)操作(即RDB持久化)出现错误,redis 会停止写入数据

● rdbcompression yes:在执行 RDB 持久化时对快照文件进行压缩处理,以减小磁盘上的存储空间。

④ 客户端使用命令进行持久化save存储:

前台进行存储:./redis-cli -h ip -p port save

后台进行存储:./redis-cli -h ip -p port bgsave

(3) AOF (Append Only File):

① 概念:

以追加日志的方式记录 redis 服务器接收到的每个写操作,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复。

② 特点:

实时性:写操作会立即追加到AOF文件中

完整性较好

体积大:记录数据的指令,删除数据的指令都会被记录下来

③ 配置:

AOF 默认关闭

vim redis-7.0.14/redis.conf

● appendonly yes:启动 AOF 功能;

● appendfsync everysec:指定 AOF 文件同步策略

everysec:表示每秒同步一次 ;always:每次写入时都同步 ;no:从不同步

● no-appendfsync-on-rewrite no:在执行 AOF 重写期间,会继续执行 AOF 日志文件的同步操作,即在重写期间仍然同步写入新的操作到 AOF 文件中。

AOF 重写是为了解决 AOF 文件可能变得过大的问题,通过重写 AOF 文件,可以消除文件中的冗余命令,从而缩小文件的体积。

● 重写触发条件:

auto-aof-rewrite-percentage:这个参数定义了执行 AOF 重写的触发条件,以百分比表示。设置为100表示只有当前 AOF 文件的大小达到了上一次重写后文件大小的 100% 时,才会触发 AOF 重写。

auto-aof-rewrite-min-size:这个参数定义了 AOF 重写的最小文件大小。设置为 64MB 表示 即使达到了上一次重写后文件大小的指定百分比,但当前 AOF 文件大小未超过 64MB ,Redis 不会执行 AOF 重写。

4、redis 主从:

(1) 简介:

redis 配置主从结构,一是为了冗余备份,二是为了提升读性能。主从架构中,可以关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能。 同时从服务器通常被设置为只读模式,这样可以避免从服务器的数据被误修改。

(2) redis 主从同步原理:

① 全量同步(Initial Sync):

● 当从节点连接到主节点时,它会发送同步命令(SYNC)来请求与主节点进行同步。

● 主节点接收到同步命令后,开始创建一个快照(snapshot),在创建快照期间,主节点继续处理写命令,但会将这些写命令缓存起来。

● 主节点生成快照的同时,将快照文件发送给从节点。

● 从节点接收到快照文件后,会加载这个快照文件并应用其中的数据,将自身数据初始化为主节点当前的状态。一旦快照加载完成,主从节点之间的初始全量同步就完成了。

② 增量同步(Incremental Sync):

● 在初始同步后,主节点会继续处理客户端的写命令,主节点将这些写命令发送给所有连接的从节点。

● 从节点接收到主节点发送的写命令,然后在本地执行这些命令,使得从节点的数据与主节点保持同步。

● 从节点会记录每个命令的复制偏移量(replication offset),用于在中断后进行重新同步时确定接收的命令位置。

(3) 配置:

① 环境:

master:192.168.198.132

slave:192.168.198.133

② 主服务器配置:

vim /etc/redis/6379.conf

bind 0.0.0.0 :redis 服务器监听本机所有地址

protected-mode no :关闭保护模式

systemctl restart redis.service

③ 从服务器配置:

vim /etc/redis/6379.conf

replicaof <masterip> <masterport>

bind 0.0.0.0

protected-mode no

systemctl restart redis.service

④ 测试:

132:

133:

(4) redis常见性能问题和解决方案:

① Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件;

② 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次;

③ 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内;

④ 主从复制用单向链表结构更为稳定,即:Master(写) ← Slave1(读) ← Slave2(读) ← Slave3(读) ... 这样的结构方便解决单点故障问题,如果Master挂了,可以立刻启用Slave1做Master,其他不变。

5、redis-sentinel(哨兵模式):

(1) 概念:

redis sentinel是 redis 分布式系统中用于实现高可用性的组件。它能够监控和管理Redis实例,确保Redis系统在出现故障或不可用情况时能够自动进行故障转移,保持系统的连续性和可用性。

(2) 作用:

① Master状态检测;

② 如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave。

(3) 工作原理:

① 每秒发送PING命令:每个redis sentinel进程都会以每秒一次的频率向它所知道的主节点、从节点以及其他sentinel实例发送PING命令,验证节点的可达性和健康状态;

② 主观下线:当一个实例(如主节点或从节点)距离最后一次有效回复PING命令的时间超过了在配置中设置的 down-after-milliseconds 的值时,这个实例会被Sentinel标记为“主观下线”,即Sentinel认为这个实例可能出现了故障;

③ 确认主观下线状态:当一个Master节点被标记为主观下线时,所有监视这个Master的Sentinel都会以每秒一次的频率确认这个Master节点是否确实处于主观下线状态;

④ 客观下线:当有足够数量的Sentinel确认Master节点已经进入了主观下线状态时,Master会被标记为“客观下线”。这表示多数Sentinel节点都认为Master节点已经出现了故障,需要进行故障转移操作。

(4) 配置:

① 在主、从上修改 sentinel 配置文件:

vim redis-7.0.14/sentinel.conf

● sentinel monitor mymaster 192.168.198.132 6379 2

指定sentinel实例监控的节点名、ip和端口,2 表示至少需要2个Sentinel节点达成一致认为主节点失效,才会触发故障转移。

● sentinel down-after-milliseconds mymaster 3000

如果sentinel在3000ms后没有收到与主节点的PING响应,就会将该节点标记为主观下线。

● sentinel failover-timeout mymaster 10000

sentinel在10秒的时间内尝试完成整个故障转移操作

● protected-mode no

② 主、从服务器启动 sentinel 服务:

③ 停止主服务器,观察从服务器:

132:systemctl stop redis

133:

主从状态发生变化:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/163915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go学习之 go mod】gomod小白入门,在github上发布自己的项目(项目初始化、项目发布、项目版本升级等)

参考 Go语言基础之包 | 李文周的博客Go mod的使用、发布、升级 | weiGo Module如何发布v2及以上版本1.2.7. go mod命令 — 新溪-gordon V1.7.9 文档golang go 包管理工具 go mod的详细介绍-腾讯云开发者社区-腾讯云Go Mod 常见错误的原因 | walker的博客 项目案例 oceanweav…

LoRA低秩微调技术详解

在当今快节奏的技术环境中&#xff0c;大型AI模型正在推动不同领域的突破。 然而&#xff0c;根据特定任务或数据集定制这些模型可能是一项计算和资源密集型工作。 LoRA是一种突破性且高效的微调技术&#xff0c;它利用这些高级模型的强大功能来执行自定义任务和数据集&#xf…

注解【元数据,自定义注解等概念详解】(超简单的好吧)

注解的理解与使用 注解的释义元数据的含义基础阶段常见的注解注解的作用&#xff08;包括但不限于&#xff09;教你读懂注解内部代码内容五种元注解尝试解读简单注解我当时的疑惑点 自定义注解自定义注解举例 注解的原理总结 注解的释义 我们都知道注释是拿来给程序员看的&…

fopen/fwrite/fread 对UNICODE字符写入的总结

windows对fopen函数进行了升级&#xff0c;可以支持指定文件的编码格式&#xff08;ccs参数指定&#xff09;。 例如&#xff1a; FILE *fp fopen("newfile.txt", "rt, ccsUTF-8"); 当以 ccs 模式打开文件时&#xff0c;进行读写操作的数据应为 UTF-16…

湖北成人自考毕业学位申请照片要求及自拍制作方法

湖北成人自考学位申请需要上传照片是为了身份验证和学籍管理的目的。通过上传照片&#xff0c;学校可以确认申请者的身份&#xff0c;并将照片与其他申请信息进行关联。这有助于提高学校对学生的管理效率&#xff0c;确保学籍信息的准确性。同时&#xff0c;照片也用于学位证书…

公众号留言功能怎么恢复?评论功能如何开启?

为什么公众号没有留言功能&#xff1f;从2018年2月开始&#xff0c;新注册的微信公众号取消了留言功能&#xff0c;原因是为了规避一些营销号通过虚假留言骗取读者信任。不过大部分公众号运营者对TX此举感到失望&#xff0c;一方面大片的留言就像店前排队的顾客&#xff0c;能体…

项目全生命周期阶段检查单

项目全生命周期阶段检查单 1、立项阶段 2、计划阶段 3、需求阶段 4、设计阶段 5、编码集成阶段 6、测试阶段 7、交付阶段 8、结项阶段

高可用--限流熔断降级

熔断 熔断是应对微服务雪崩效应的一种链路保护机制。 场景 服务端出现问题 服务指标&#xff1a;响应时间、错误率、连续错误数等&#xff0c;超过阈值出发熔断。硬件指标&#xff1a;CPU、网络IO、内存 目的 服务端恢复需要时间、服务端需要休息避免全调用链路崩溃&…

Unity使用Visual Studio Code 调试

Unity 使用Visual Studio Code 调试C# PackageManager安装Visual Studio EditorVisual Studio Code安装Unity 插件修改Unity配置调试 PackageManager安装Visual Studio Editor 打开 Window->PackageManger卸载 Visual Studio Code Editor &#xff0c;这个已经被官方废弃安…

portraiture2024ps磨皮插件参数设置教程

ps磨皮插件一般是第三方软件&#xff0c;通过安装的方式放在ps的相关文件夹中。但也有一些插件是放置在系统软件目录的&#xff0c;不与ps文件放在一起。本文会给大家具体介绍以上两种不同的情况&#xff0c;方便大家了解ps磨皮插件放在哪个文件夹&#xff0c;ps的磨皮插件在哪…

每天一点python——day71

#每天一点Python——71 #格式化字符串在Python中&#xff0c;你可以使用格式化字符串来动态地插入变量的值、表达式的结果等到字符串中。 如图&#xff1a;xxx部分需要不断变化&#xff0c;再和原文拼接 如上图所示这是一个类似于字符串拼接的操作。 因为字符串拼接操作会产生很…

Linux:清空或删除大文件内容的5种方法

在Linux终端下处理文件时&#xff0c;有时我们想直接清空文件的内容但又不必使用任何Linux命令行编辑器 去打开这些文件。那怎样才能达到这个目的呢&#xff1f;在这篇文章中&#xff0c;我们将介绍几种借助一些实用的命令来清空文件内容的方法。 注意&#xff1a;在我们进一步…

美国政府首席信息安全官详细介绍零信任战略竞赛

如果企业想吸取教训&#xff0c;为庞大的组织快速制定零信任战略&#xff0c;他们应该看看美国联邦政府在 2024 年之前让所有机构合规的努力。 这就是被任命为联邦办公室 CISO&#xff08;首席信息安全官&#xff09; 的克里斯德鲁沙 (Chris DeRusha) 的看法。 周三&#xf…

debian10 开启rdp安装firefox,firefox 中文乱码

debian10 开启rdp安装firefox apt -y install tigervnc-standalone-server apt -y install xrdp tigervnc-standalone-server systemctl enable xrdpapt install firefox-esrmstsc连接 firefox-settings-general-fonts-advanced-Simplified Chinese

Redis(地理空间Geospatial和HyperLogLog)

Geospatial&#xff1a; Redis中的Geospatial提供了一种存储和处理地理空间数据的能力&#xff0c;这对于许多应用非常有用。以下是Redis中的Geospatial的一些作用&#xff1a; 1. 地理位置查询&#xff1a;可以存储地理位置的坐标信息&#xff0c;并且可以通过查询指定半径范…

Windows 下提取EXE文件中的图标

可以使用两种工具&#xff1a; 1 使用 IconViewer 下载地址: https://www.botproductions.com/iconview/download.html 2 使用 QuickAny2Ico 下载地址&#xff1a; Quick Any2Ico - Create icons from any source 2.1 操作步骤 样例(采用 python-3.7.9.exe 作为例子提取为…

【开源】基于Vue和SpringBoot的微信小程序的音乐平台

项目编号&#xff1a; S 055 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S055&#xff0c;文末获取源码。} 项目编号&#xff1a;S055&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

Linux--初识和基本的指令(1)

目录 前言 0.什么是操作系统 0.1 搭建 Linux 环境 0.2搭建 Linux 环境小结 1.使用 XShell 远程登录 Linux 1.1关于 Linux 桌面 1.2下载安装 XShell 1.3查看 Linux 主机 ip 1.4XShell 下的复制粘贴 2.Linux下基本指令 2.1 pwd命令 2.2 ls命令 2.3 mkdir指令 2.4 cd…

C语言三位数求解(ZZULIOJ1076:三位数求解)

题目描述 已知xyzyzzn&#xff0c;其中n是一个正整数&#xff0c;x、y、z都是数字&#xff08;0-9&#xff09;&#xff0c;编写一个程序求出x、y、z分别代表什么数字。如果无解&#xff0c;则输出“No Answer”注意&#xff1a;xyz和yzz表示一个三位数&#xff0c;而不是表示x…
最新文章