构建Redis&&MeM缓存服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、缓存服务器作用

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


前言

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


一、Memcached架构

memcached是一款NOSql、采用key/value键值对存储的内存式的分布式缓存服务器。

1、特点

内置内存存储方式

重启操作系统会导致全部数据消失

②简单key/value存储

服务器不关心数据本身的意义及结构,只要是可序列化数据即可。
存储项由“键、过期时间、可选的标志及数据”四个部分组成;

③不互相通信的分布式:

各个memcached不会互相通信以共享信息。

2、服务框架

在这里插入图片描述
工作原理:

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

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

③保持缓存的“新鲜性”,每当数据发生变化的时候要同步的更新缓存信息。

3、部署测试

安装memcached

# yum -y install memcached

修改配置文件

# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1000"
OPTIONS=""
--------------------------------------------------
#参数
PORT       访问端口号,可用于同机多实例
USER       系统用户
MAXCONN    最大连接数
CACHESIZE  缓存区大小
OPTIONS    监听的网络地址

启动memcached

# systemctl start memcached.service
# systemctl enable memcached.service

使用memcached原始命令测试

# yum -y install telnet          / ˈtelnet 远程登陆系统
# telent 192.168.116.131 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set name 0 900 5
hahah
STORED
--------
get name
VALUE name 0 5
hahah
END
--------------------------------------------------
name    #key名
0       #key的id号
900     #缓存过期日期,单位为s,0为永久
5       #value长度

三、 Redis缓存服务器

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

官网:http://redis.io

特点:

①丰富的数据结构

②支持持久化,RDB和AOF模式

③哨兵模式,故障转移高可用集群

④支持主从

Redis+Sentinel主从集群

主从同步原理

从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中

在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。

这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。

注:即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个下游。

环境:三台Centos7主机
下载地址:
http://download.redis.io/releases/

      ip                       role
192.168.116.131               master
192.168.116.132               slave
192.168.116.133               slave

1.安装部署Redis

所有节点

# tar -xf redis-7.0.0.tar.gz  -C /usr/local/
# mv /usr/local/redis-7.0.0/ /usr/local/redis
# mkdir /etc/redis
# cd /usr/local/redis/
# make
# cp redis.conf /etc/redis/6379.conf
# cp utils/redis_init_script /etc/init.d/redis
------------------------------------------------------------------------------
# vim /etc/init.d/redis
  # chkconfig: 2345 10 90                     #能够在什么模式下启动(图形+命令行)
  # description: start redis                  #描述
  EXEC=/usr/local/redis/src/redis-server      #服务器文件位置
  CLIEXEC=/usr/local/redis/src/redis-cli      #客户端文件位置
                  $EXEC $CONF &               #后台运行
------------------------------------------------------------------------------
# chmod +x /etc/init.d/redis 
# chkconfig  --add redis
# chkconfig  redis on
------------------------------------------------------------------------------

2.开启集群

master:
# vim /etc/redis/6379.conf
protected-mode no        # 关闭保护模式
bind 0.0.0.0             # 监听本机所有地址
slave:
# vim /etc/redis/6379.conf
protected-mode no
bind 0.0.0.0
slaveof 192.168.116.131 6379   # 作为谁的slave,ip为master的ip

3.开启哨兵模式

所有节点

# vim sentinel.conf
protected-mode no                                     # 关闭保护模式
sentinel monitor mymaster 192.168.116.131 6379 2      # 监控master状态
sentinel down-after-milliseconds mymaster 30000       # master断线时延
sentinel failover-timeout mymaster 10000              # 故障转移时延       failover 故障转移;故障切换;容错;失效接管;失效转移

4.启动Redis和Sentinel

所有节点

# systemctl daemon-reload 
# systemctl start redis
# ./src/redis-sentinel sentinel.conf

5.集群故障转移

# src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.116.132,port=6379,state=online,offset=213759,lag=1
slave1:ip=192.168.116.133,port=6379,state=online,offset=213759,lag=1
master_replid:44951c800b54c5c9cdbfb435f7d742f46b65173e
master_replid2:76f0cacab51d344adf7113937c11539eb10bbd90
master_repl_offset:213904
second_repl_offset:209481
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:31870
repl_backlog_histlen:182035
127.0.0.1:6379> get name
"hahah"
127.0.0.1:6379>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值