平凉网站建设,软件生成器,网站有什么作用,做网站排名优化的公司目录
MemcachedRedis构建缓存服务器
一、介绍
二、memcached
1、特点
2、服务框架
3.配置安装memcached
三、redis服务
1、介绍
2、特点
3、缓存
4、安装redis
5、数据持久化
6、redis主从配置 MemcachedRedis构建缓存服务器
一、介绍
许多Web应用都将…目录
MemcachedRedis构建缓存服务器
一、介绍
二、memcached
1、特点
2、服务框架
3.配置安装memcached
三、redis服务
1、介绍
2、特点
3、缓存
4、安装redis
5、数据持久化
6、redis主从配置 MemcachedRedis构建缓存服务器
一、介绍
许多Web应用都将数据保存到 RDBMS中应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。**Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果减少数据库访问次数以提高动态Web等应用的速度、 提高可扩展性。
RDBMS即关系数据库管理系统(Relational Database Management System)
NOSQL名词解释非关系型数据库:
1、nosql产品: redis,mongodb,memcached.
2、存储方式以键值对的方式存储数据---Key-Value的形式
3、类型缓存数据库、非关系型数据库。
4.、缓存服务器的作用加快访问速度缓解数据库读的压力。
5、nosql的优点与缺点 优点:- 高可扩展性- 分布式计算- 低成本- 架构的灵活性半结构化数据- 没有复杂的关系缺点:- 没有标准化 - 有限的查询功能到目前为止- 最终一致是不直观的程序 6、关系型数据库与非关系型数据库的区别: 1.关系型数据库:优点1、易于维护都是使用表结构格式一致2、使用方便SQL语言通用可用于复杂查询3、复杂操作支持SQL可用于一个表以及多个表之间非常复杂的查询。缺点1、读写性能比较差尤其是海量数据的高效率读写2、固定的表结构灵活度稍欠3、高并发读写需求传统关系型数据库来说硬盘I/O是一个很大的瓶颈。2.非关系型数据库严格上不是一种数据库应该是一种数据结构化存储方法的集合可以是文档或者键值对等。优点1、格式灵活存储数据的格式可以是key,value形式、文档形式、图片形式等等文档形式、图片形式等等使用灵活应用场景广泛而关系型数据库则只支持基础类型。2、速度快nosql可以使用硬盘或者随机存储器作为载体而关系型数据库只能使用硬盘3、高扩展性4、成本低nosql数据库部署简单基本都是开源软件。缺点1、不提供sql支持学习和使用成本较高2、无事务处理3、数据结构相对复杂复杂查询方面稍欠。 二、memcached
1、特点 1.内置内存存储方式-----------为了提高性能memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中重启操作系统会导致全部数据消失2.简单key/value存储---------------服务器不关心数据本身的意义及结构只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成3.不互相通信的分布式 ------------- memcached尽管是“分布式”缓存服务器但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么怎样进行分布式呢 这完全取决于客户端的实现。 2、服务框架 原理 1、检查客户端的请求数据是否在memcached中如有直接把请求数据返回不再对数据库进行任何操作路径操作为①②③⑦。 2、如果请求的数据不在memcached中就去查数据库把从数据库中获取的数据返回给客户端同时把数据缓存一份到memcached中memcached客户端不负责需要程序明确实现路径操作为①②④⑤⑦⑥。 3.保持缓存的“新鲜性”每当数据发生变化的时候比如数据有被修改或被删除的情况下要同步的更新缓存信息确保用户不会在缓存取到旧的数据。 3.配置安装memcached memcached能存放多少数据取决于服务器本身的内存有多大。 1.安装----准备一台服务器[rootmemcached ~]# yum install memcached -y[rootmemcached ~]# systemctl start memcached #启动2.修改配置文件[rootmemcached ~]# cat /etc/sysconfig/memcached PORT11211 # 监听端口USERmemcached # 用户MAXCONN1024 # 最大并发数CACHESIZE64 # 分配内存大小OPTIONS # 监听网络地址然后把ip地址发给开发人员开发的会使用api接口连接memcached.测试[rootmemcached ~]# yum install -y telnet #安装telent[rootmemcached ~]# telnet 192.168.246.188 11211Trying 192.168.246.188...Connected to 192.168.246.188.Escape character is ^].set name 0 60 7 #设置名称为name的keynewrain #给name的值STORED#出现stored表示已经存储成功。get name #查询key值VALUE name 0 7newrainEND参数解释:namekey的名字 自己定义0key的id号需要和其他的key不一样60缓存过期时间,单位为秒0为永远7字符串最大长度
三、redis服务
1、介绍
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库
redis的官网redis.io
注:域名后缀io属于国家域名是british Indian Ocean territory即英属印度洋领地
2、特点 1.丰富的数据结构 -----string,list,set,zset,hash等数据结构的存储2.支持持久化3.支持事务 ---------------事务是指“一个完整的动作要么全部执行要么什么也没有做”。4.支持主从 3、缓存 1.类型1).数据缓存 2).页面缓存(Smarty) 在开发网站的时候如果有一些数据在短时间之内不会发生变化而它们还要被频繁访问为了提高用户的请求速度和降低网站的负载就把这些数据放到一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据) 该行为就称作对该数据的缓存。 该介质可以是文件、数据库、内存内存经常用于数据缓存2.形式页面缓存经常用在内存管理系统里边 数据缓存经常用在页面的具体数据里边 redis和memcache比较 1).Redis不仅仅支持简单的k/v类型的数据,同时还提供了list,set,zset,hash等数据结构的存储 2).Redis支持master-slave(主-从)模式应用 3).Redis支持数据的持久化 4、安装redis
1.安装单机版redis [rootredis-master ~]# mkdir -p /data/application ---创建工作目录[rootredis-master ~]# wget http://download.redis.io/releases/redis-5.0.10.tar.gz ---下载redis[rootredis-master ~]# tar xzf redis-5.0.10.tar.gz -C /data/application/ ---解压[rootredis-master ~]# cd /data/application/[rootredis-master application]# mv redis-5.0.10/ redis[rootredis-master application]# cd redis/[rootredis-master redis]# yum install -y gcc make #安装编译工具[rootredis-master redis]# make注如果报错请将刚才解压的安装包删除掉再次重新解压并进行make安装即可。[rootredis-master redis]# cp redis.conf redis.conf.bak[rootredis-master redis]# vim redis.conf ---修改如下bind 192.168.246.202 #只监听内网IPdaemonize yes #开启后台模式将on改为yestimeout 300 #连接超时时间port 6379 #端口号dir /data/application/redis/data #本地数据库存放持久化数据的目录该目录-----需要存在pidfile /var/run/redis_6379.pid #定义pid文件logfile /var/log/redis.log #定义log文件创建存放数据的目录[rootredis-master redis]# mkdir /data/application/redis/data配置redis为systemctl启动[rootredis-master redis]# cd /lib/systemd/system[rootredis-master system]# vim redis.service[Unit]DescriptionRedisAfternetwork.target[Service]ExecStart/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize noExecStop/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown[Install]WantedBymulti-user.target 参数详解:• [Unit] 表示这是基础信息 • Description 是描述• After 是在那个服务后面启动一般是网络服务启动后启动• [Service] 表示这里是服务信息 • ExecStart 是启动服务的命令• ExecStop 是停止服务的指令• [Install] 表示这是是安装相关信息 • WantedBy 是以哪种方式启动multi-user.target表明当系统以多用户方式默认的运行级别启动时这个服务需要被自动运行。 启动服务:[rootredis-master system]# systemctl daemon-reload[rootredis-master system]# systemctl start redis.service
2.检查redis是否启动 [rootmaster ~]# ss -npltState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:((sshd,pid970,fd3))LISTEN 0 100 127.0.0.1:25 *:* users:((master,pid1188,fd13))LISTEN 0 128 *:6379 *:* users:((redis-server,pid6945,fd6))LISTEN 0 128 [::]:22 [::]:* users:((sshd,pid970,fd4))LISTEN 0 100 [::1]:25 [::]:* users:((master,pid1188,fd14))[rootmaster ~]#
3.登陆redis [rootredis-master system]# cd /data/application/redis/src/[rootredis-master src]# ./redis-cli -h 192.168.246.202 -p 6379192.168.246.202:6379 ping ---测试redis是否可以用PONG192.168.246.202:6379 set name newrain #设置key--name并设置值OK192.168.246.202:6379 get name #获取到keynewrain192.168.246.202:6379
4.redis的相关工具 ./redis-benchmark #用于进行redis性能测试的工具 ./redis-check-dump #用于修复出问题的dump.rdb文件 ./redis-cli #redis的客户端./redis-server #redis的服务端./redis-check-aof #用于修复出问题的AOF文件./redis-sentinel #用于集群管理 5、数据持久化
作用开启持久化功能后重启redis数据会自动通过持久化文件恢复
1.redis持久化 – 两种方式 一、redis提供了两种持久化的方式分别是RDBRedis DataBase和AOFAppend Only File。RDBRedis DataBase是在不同的时间点将redis存储的数据生成快照并存储到磁盘等介质上特点:1.周期性2.不影响数据写入 #RDB会启动子进程备份所有数据。当前进程继续提供数据的读写。当备份完成才替换老的备份文件。3.高效 #一次性还原所有数据4.完整性较差 #故障点到上一次备份之间的数据无法恢复。AOFAppend Only File则是换了一个角度来实现持久化那就是将redis执行过的所有写指令记录下来在下次redis重新启动时只要把这些写指令从前到后再重复执行一遍就可以实现数据恢复了。特点:1.实时性2.完整性较好3.体积大 #记录数据的指令删除数据的指令都会被记录下来。二、RDB和AOF两种方式也可以同时使用在这种情况下如果redis重启的话则会优先采用AOF方式来进行数据恢复这是因为AOF方式的数据恢复完整度更高。如果你没有数据持久化的需求也完全可以关闭RDB和AOF方式这样的话redis将变成一个纯内存数据库就像memcache一样。三、如何选择方式缓存不用开启任何持久方式双开:因RDB数据不实时但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。redis持久化 – 如何选择RDB和AOF对于我们应该选择RDB还是AOF官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。写入速度快 ------------AOF写入速度慢 ------------RDB 2.持久化配置 1、RDB默认开启[rootredis-master src]# cd ..[rootredis-master redis]# vim redis.conf#dbfilename持久化数据存储在本地的文件dbfilename dump.rdb#dir持久化数据存储在本地的路径dir /data/application/redis/data##snapshot触发的时机save seconds changes ##如下为900秒后至少有一个变更操作才会snapshot ##对于此值的设置需要谨慎评估系统的变更操作密集程度 ##可以通过“save “”来关闭snapshot功能 #save时间以下分别表示更改了1个key时间隔900s进行持久化存储更改了10个key300s进行存储更改10000个key60s进行存储。save 900 1save 300 10save 60 10000##当snapshot时出现错误无法继续时是否阻塞客户端“变更操作”“错误”可能因为磁盘已满/磁盘故障/OS级别异常等 stop-writes-on-bgsave-error yes ##是否启用rdb文件压缩默认为“yes”压缩往往意味着“额外的cpu消耗”同时也意味这较小的文件尺寸以及较短的网络传输时间 rdbcompression yes 2、客户端使用命令进行持久化save存储方式一[rootredis-master src]# ./redis-cli -h 192.168.246.202 -p 6379 save #前台进行存储OK方式二./redis-cli -h ip -p port bgsave #后台进行存储注意:每次快照持久化都是将内存数据完整写入到磁盘一次并不是增量的只同步新数据。如果数据量大的话而且写操作比较多必然会引起大量的磁盘io操作可能会严重影响性能。save方式持久化前面的所有数据(rdb模式没开时后续的数据不会进行备份)3、AOF默认关闭--开启[rootredis-master src]# cd ..[rootredis-master redis]# vim redis.conf修改如下: 696 # Please check http://redis.io/topics/persistence for more information.697 698 appendonly yes #修改这行699 700 # The name of the append only file (default: appendonly.aof) 1、此选项为aof功能的开关默认为“no”可以通过“yes”来开启aof功能,只有在“yes”下aof重写/文件同步等特性才会生效2、指定aof文件名称appendfilename appendonly.aof 3、指定aof操作中文件同步策略有三个合法值always everysec no,默认为everysecappendfsync everysec 4、在aof-rewrite期间appendfsync是否暂缓文件同步no表示“不暂缓”“yes”表示“暂缓”默认为“no”no-appendfsync-on-rewrite no 5、触发aof rewrite的最小文件尺寸 auto-aof-rewrite-min-size 64mb6、当Aof log增长超过指定比例时重写log file 设置为0表示不自动重写Aof 日志重写是为了使aof体积保持最小而确保保存最完整的数据。auto-aof-rewrite-percentage 100**修改完配置文件后重启生效** 6、redis主从配置
1.主从-用法 像MySQL一样redis是支持主从同步的而且也支持一主多从以及多级从结构。主从结构一是为了纯粹的冗余备份二是为了提升读性能比如很消耗性能的SORT就可以由从服务器来承担。redis的主从同步是异步进行的这意味着主从同步不会影响主逻辑也不会降低redis的处理性能。主从架构中可以考虑关闭主服务器的数据持久化功能只让从服务器进行持久化这样可以提高主服务器的处理性能。在主从架构中从服务器通常被设置为只读模式这样可以避免从服务器的数据被误修改。但是从服务器仍然可以接受CONFIG等指令所以还是不应该将从服务器直接暴露到不安全的网络环境中。 2.主从-原理 主从 – 同步原理从服务器会向主服务器发出SYNC(sync)指令当主服务器接到此命令后就会调用BGSAVE(bgsave)指令来创建一个子进程专门进行数据持久化工作也就是将主服务器的数据写入RDB文件中。在数据持久化期间主服务器将执行的写指令都缓存在内存中。在BGSAVE指令执行完成后主服务器会将持久化好的RDB文件发送给从服务器从服务器接到此文件后会将其存储到磁盘上然后再将其读取到内存中。这个动作完成后主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。另外要说的一点是即使有多个从服务器同时发来SYNC指令主服务器也只会执行一次BGSAVE然后把持久化好的RDB文件发给多个下游。在redis2.8版本之前如果从服务器与主服务器因某些原因断开连接的话都会进行一次主从之间的全量的数据同步而在2.8版本之后redis支持了效率更高的增量同步策略这大大降低了连接断开的恢复成本。主服务器会在内存中维护一个缓冲区缓冲区中存储着将要发给从服务器的内容。从服务器在与主服务器出现网络瞬断之后从服务器会尝试再次与主服务器连接一旦连接成功从服务器就会把“希望同步的主服务器ID”和“希望请求的数据的偏移位置replication offset”发送出去。主服务器接收到这样的同步请求后首先会验证主服务器ID是否和自己的ID匹配其次会检查“请求的偏移位置”是否存在于自己的缓冲区中如果两者都满足的话主服务器就会向从服务器发送增量内容。增量同步功能需要服务器端支持全新的PSYNC指令。这个指令只有在redis-2.8之后才具有。 3.准备3台服务器部署redis主从
首先三台服务器将redis部署完成且做环境变量 a.编辑master的redis配置文件: redis-master----192.168.246.202redis-slave-1-----192.168.246.203redis-slave-2-----192.168.246.204[rootredis-master ~]# cd /data/application/redis/[rootredis-master redis]# vim redis.conf 修改如下 84# you are sure you want clients from other hosts to connect to Redis85 # even if no authentication is configured, nor a specific set of interfaces86 # are explicitly listed using the bind directive.87 protected-mode no #将加密保护关闭88 89 # Accept connections on the specified port, default is 6379 (IANA #815344).
b.修改slave1与slave2的配置文件 [rootredis-slave-1 ~]# cd /data/application/redis/[rootredis-slave-1 redis]# vim redis.conf 修改如下slave2一样 281 # 3) Replication is automatic and does not need user intervention. After a282 # network partition replicas automatically try to reconnect to masters283 # and resynchronize with them.284 #285 replicaof 10.12.153.243 6379 #添加master的内网IP与端口286 287 # If the master is password protected (using the requirepass configuration
c.启动三台redis [rootredis-master redis]# systemctl start redis
d.测试主从 1.在master上面执行[rootredis-master redis]# cd src/[rootredis-master src]# ./redis-cli 127.0.0.1:6379 pingPONG127.0.0.1:6379 set name xuanOK127.0.0.1:6379 get namenewrain127.0.0.1:6379 2.分别在slave-1和slave-2上面执行:[rootredis-slave-1 redis]# cd src/[rootredis-slave-1 src]# ./redis-cli 127.0.0.1:6379 pingPONG127.0.0.1:6379 get namenewrain127.0.0.1:6379[rootredis-slave-2 src]# ./redis-cli 127.0.0.1:6379 pingPONG127.0.0.1:6379 get namenewrain127.0.0.1:6379 3.查看复制状态master执行127.0.0.1:6379 info replication# Replicationrole:masterconnected_slaves:2slave0:ip192.168.246.203,port6379,stateonline,offset490,lag0slave1:ip192.168.246.204,port6379,stateonline,offset490,lag1 slave上面执行127.0.0.1:6379 info replication# Replicationrole:slavemaster_host:192.168.246.202master_port:6379master_link_status:up
主从同步部署完成