Memcache&Redis缓存构建

前言

许多Web应用都将数据保存到 RDBMS(Relational Database Management System,关系数据库管理系统)中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。

一、NoSQL介绍

1.1 NoSQL产品

NoSQL(非关系型数据库)常见的产品有redis、mongodb、memcached等。我在《Linux系统之关系型数据库与非关系型数据库》这篇博客中有对关系型数据库和非关系型数据库的特点、两者区别简单介绍过,感兴趣的可以去看一下。一般非关系型数据库以键值对**(Key-Value)**的方式存储数据,在实际生产中我们也将NoSQL产品做缓存数据库,从而缓解后端DB压力。

1.2 NoSQL特点

优点:

  • 高可扩展性;
  • 分布式计算;
  • 低成本;
  • 架构的灵活性,半结构化数据;
  • 没有复杂的关系。

缺点:

  • 没有标准化;
  • 有限的查询功能(到目前为止)。

二、构建缓存服务器

2.1 Memcached存储

2.1.1 服务框架

在这里插入图片描述

2.1.2 缓存原理
  • 检查客户端的请求数据是否在memcache中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为:1-2-3-4。
  • 如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为:1-2-5-6-4-2。

memcache能存放多少数据,取决于服务器本身的内存有多大。

2.1.3 Memcache特点
  • 内置内存存储方式:

    为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失。

  • 简单key/value存储:

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

  • 不互相通信的分布式:

    memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,**怎样进行分布式呢?**这完全取决于客户端的实现:首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。

    Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口,它拥有Memcached兼容协议。

2.1.4 安装Memcached

(1)安装memcached

[root@memcached ~]# yum install memcached -y
[root@memcached ~]# systemctl start memcached  #启动

(2)修改配置文件

[root@memcached ~]# vim /etc/sysconfig/memcached
PORT="11211"       #监听的端口。默认11211,可以修改
USER="memcached"   #用户
MAXCONN="1024"     #默认并发。可以修改,每秒允许1024个连接memcached
CACHESIZE="64"     #给的内存。默认是单位是M
OPTIONS=""         #监听的网络地址

把ip地址发给开发人员,开发的会使用api接口连接memcached。

(3)测试

[root@memcached ~]# yum install -y telnet   #安装telent
[root@memcached ~]# telnet 192.168.246.188 11211
Trying 192.168.246.188...
Connected to 192.168.246.188.
Escape character is '^]'.   #到此表明可连接memcached

set name 0 60 9  #设置名称为name的key
hello            #给name的值
STORED           #出现stored表示已经存储成功。

get name         #查询key值
VALUE name 0 9
hello
END
quit             #退出

参数解释:
name:key的名字 自己定义
0:key的id号,需要和其他的key不一样
60:缓存过期时间,单位为秒,0为永远
9:字符串最大长度

memcached不足:
存储的数据类型单一,而且数据只能存储在内存中,无法实现数据的持久化,服务器重启,数据将消失,因此在实际生产中很少去用它。

2.2 Redis存储

2.2.1 Redis介绍

Redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库。redis的官网:redis.io

注:域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地。

2.2.2 Redis的特点
  • 丰富的数据结构

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等数据结构的存储。

  • 支持持久化

    可通过RDB、AOF实现持久化。

  • 支持事务

    事务是指:一个完整的动作,要么全部执行,要么全部不执行。

  • 支持主从、集群、哨兵

    可做主从同步,类似于我们的MySQL主从。

2.2.3 安装Redis

安装单机版Redis

(1)下载并使用make安装

[root@redis-master ~]# mkdir -p /data/application     #创建工作目录
[root@redis-master ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz  #下载redis
[root@redis-master ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/    #解压
[root@redis-master ~]# cd /data/application/
[root@redis-master application]# mv redis-4.0.9/ redis 
[root@redis-master application]# cd redis/
[root@redis-master redis]# yum install -y gcc make  #安装编译工具
[root@redis-master redis]# make
#注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。

(2)修改Redis配置文件

[root@redis-master redis]# cp redis.conf redis.conf.bak
[root@redis-master redis]# vim redis.conf     #修改如下
bind 192.168.246.202  #只监听内网IP
daemonize yes       #开启后台模式将on改为yes
port 6379              #端口号
dir /data/application/redis/data  #本地数据库存放持久化数据的目录该目录(需要存在)

[root@redis-master redis]# mkdir /data/application/redis/data   #创建存放数据的目录

(3)配置redis为systemctl启动

[root@redis-master redis]# cd /lib/systemd/system
[root@redis-master system]# vim redis.service
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf  --daemonize no
ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target
参数详解:
• [Unit]       #表示这是基础信息 
• Description  #是描述
• After        #是在那个服务后面启动,一般是网络服务启动后启动[Service]    #表示这里是服务信息 
• ExecStart    #是启动服务的命令
• ExecStop     #是停止服务的指令[Install]    #表示这是是安装相关信息 
• WantedBy     #是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。

(4)启动Redis服务

[root@redis-master system]# systemctl daemon-reload  #重新加载
[root@redis-master system]# systemctl start redis.service

在这里插入图片描述

(5)登录Redis

[root@redis-master system]# cd /data/application/redis/src/
[root@redis-master src]# ./redis-cli -h 192.168.139.154 -p 6379
192.168.139.154:6379> ping     #测试redis是否可以用
PONG                           #出现该字样,表明Redis缓存服务器可用

单机版redsi已经部署完成。将ip和端口发给开发就可以了。

总结

以上就是对Memcache和Redis缓存服务器的构建,对非关系型数据库及其相关产品做了简单的介绍,包括常用非关系型数据库缓存原理、特点的介绍以及安装。后续我将会讲Redis如何实现数据持久化、Redis-sentinel(哨兵模式)监控Redis集群等知识点。总结一下Redis和Memcache的区别:

  • Redis不仅仅支持简单的k/v类型的数据,同时还提供了list、set、zset、hash等数据结构的存储;
  • Redis支持master-slave(主-从)模式应用;
  • Redis支持数据的持久化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值