前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作

听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作

作者头像
不吃小白菜
发布2020-09-15 09:54:52
5540
发布2020-09-15 09:54:52
举报

文章目录

  • 一、Memcached 简介:
    • 1、介绍:
    • 2、特点:
    • 3、存储方式:
  • 二、关于Redis和Memcached的不同,主要有以下几点
    • 1、存储方式:
    • 2、数据支持类型:
    • 3、使用底层模型不同:
    • 4、运行环境不同:
    • 5、Redis 原生支持集群模式
    • 6、性能对比
    • 7、Memcached还有如下缺点
    • 8、总结
  • 二、案例部署
    • 1、实验环境
    • 2、拓扑图如下
    • 3、具体配置如下
      • (1)服务端安装部署memcached
      • (2)客户端安装部署LAMP架构
      • (3)测试lamp架构
      • (4)测试php连接数据库
      • (5)客户端安装memcached连接服务端
      • (6)测试memcached连接情况
  • 三、Memcached 数据库操作与管理
    • 1、安装使用 telnet 连接主机IP地址以及11211端口,就可以对数据库进行操作和管理了
    • 2、新建数据:
    • 3、查询数据
    • 4、更新数据:
    • 5、检测/查看 更新数据:
    • 6、追加数据:
    • 7、清除数据:
    • 8、查看服务器统计信息:
    • 9、退出:

一、Memcached 简介:

1、介绍:

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

2、特点:

memcached作为高速运行的分布式缓存服务器,具有以下的特点:

1、协议简单; 2、基于libevent的事件处理; 3、内置内存存储方式; 4、memcached不互相通信的分布式。

3、存储方式:

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

二、关于Redis和Memcached的不同,主要有以下几点

1、存储方式:

Memcached 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。

2、数据支持类型:

Redis在数据支持上要比Memcached多的多。

3、使用底层模型不同:

新版本的Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4、运行环境不同:

Redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上 Redis 支持复杂的数据结构 Redis 相比 Memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, Redis 会是不错的选择。

5、Redis 原生支持集群模式

在 redis3.x 版本中,便能支持 Cluster 模式,而 Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。

6、性能对比

由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis,虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Remcached,还是稍有逊色。

7、Memcached还有如下缺点

key 不能超过 250 个字节; value 不能超过 1M 字节; key 的最大失效时间是 30 天; 只支持 K-V 结构,不提供持久化和主从同步功能。

8、总结

个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择Redis,其他简单的key/value存储,选择Memcached。

单纯 K-V 缓存的场景可以使用 MC,而需要缓存 list、set 等特殊数据格式,可以使用 Redis;

需要缓存一个用户最近播放视频的列表可以使用 Redis 的 list 来保存、需要计算排行榜数据时,可以使用 Redis 的 zset 结构来保存。

二、案例部署

1、实验环境

vmware15.5 centos7.6 memcached-1.5.6.tar.gz libevent-2.1.8-stable.tar.gz php-5.6.11.tar.bz2 mysql-5.6.26.tar.gz apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2

2、拓扑图如下

在这里插入图片描述
在这里插入图片描述

3、具体配置如下

(1)服务端安装部署memcached

(1)安装依赖环境包: yum install gcc gcc-c++ make -y

(2)解压软件包: tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ tar zxvf memcached-1.5.6.tar.gz -C /opt/ //时间库 是memcache的依赖包

(3)编译安装 libevent : cd /opt/libevent-2.1.8-stable ./configure --prefix=/usr/local/libevent make && make install

(4)编译安装 memcached : cd /opt/memcached-1.5.6/

./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent/

make && make install

(5)方便操作可以创建一个软链接: ln -s /usr/local/memcached/bin/* /usr/local/bin

(6)开启 memcached 服务:

memcached -d -m 32m -p 11211 -u root

//-d守护进程 ;-m缓存大小32M ;-p端口11211

(7)查看端口是否正常开发: netstat -natp | grep memcached

(8)关闭防火墙 [root@promote memcached-1.5.6]# systemctl stop firewalld [root@promote memcached-1.5.6]# setenforce 0 (9)测试memcache

代码语言:javascript
复制
root@promote memcached-1.5.6]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set username 0 0 10       0不设置他的序列号  0  不设置他的过期时间  10 设置字符长度
evereqqqqq
STORED
gets username
VALUE username 0 10 2              更新因子  每次更新都会加一
evereqqqqq
END

(2)客户端安装部署LAMP架构

代码语言:javascript
复制
------------安装Apache----下面两个插件是httpd2.4以后的版本所需要-----
tar xf apr-1.6.2.tar.gz
tar xf apr-util-1.6.0.tar.gz
tar xf httpd-2.4.29.tar.gz
mv apr-1.6.2 httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util

yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl

cd httpd-2.4.29

./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

make && make install

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd

# chkconfig: 35 85 21  //35级别自动运行  第85个启动 第21个关闭
# description: Apache is a World Wide Web server

chkconfig --add httpd //将httpd加入到SERVICE管理器

vi /usr/local/httpd/conf/httpd.conf
ServerName 

ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/

systemctl stop firewalld.service
setenforce 0

httpd -t 
apachectl -t

service httpd start
netstat -anpt | grep 80


--------------以下是安装MYSQL-----http://mirrors.sohu.com/mysql/---

yum install -y ncurses-devel autoconf


tar xzvf mysql-5.6.26.tar.gz
cd mysql-5.6.26

cmake  \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock

make && make install

cp support-files/my-default.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld       
chkconfig --add /etc/init.d/mysqld
chkconfig  mysqld --level 235 on

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
echo $PATH

useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/

/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

ln -s /var/lib/mysql/mysql.sock  /home/mysql/mysql.sock

vi  /etc/init.d/mysqld

basedir=/usr/local/mysql     
datadir=/home/mysql

service mysqld start
netstat -anpt | grep 3306

mysqladmin -u root -p password "abc123" //给root账号设置密码

---------以下安装PHP------------
yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel

tar xjvf php-5.6.11.tar.bz2
cd php-5.6.11

./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring 

make && make install

cp php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/
ln -s /usr/local/php5/sbin/* /usr/local/sbin/

vi /etc/httpd.conf //在合适位置新增

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

 

vi /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>

在网页测试“http://192.168.80.182/index.php”



--------下面测试数据库工作是否正常-----
mysql -u root -p

CREATE DATABASE sky;
GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';
flush privileges; 

<?php
$link=mysql_connect('192.168.80.193','skyuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>

(3)测试lamp架构

在这里插入图片描述
在这里插入图片描述

(4)测试php连接数据库

代码语言:javascript
复制
[root@localhost apache]# mysql -u root -p
GRANT all ON dog.* TO 'doguser'@'%' IDENTIFIED BY 'adc123';
mysql> flush privileges;

[root@localhost mysql]# vim /usr/local/httpd/htdocs/index.php
 <?php
$link=mysql_connect('192.168.110.133','doguser','adc123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>
在这里插入图片描述
在这里插入图片描述

(5)客户端安装memcached连接服务端

(1)安装依赖包: shell工具 yum install autoconf -y

(2)解压: tar zvxf memcache-2.2.7.tgz -C /opt/

(3)编译(使用PHP的phpize脚本生成配置脚本configure,再进行配置编译): cd /opt/memcache-2.2.7 /usr/local/php5/bin/phpize

./configure –enable-memcache –with-php-config=/usr/local/php5/bin/php-config

(4)安装: make && make install

(5)安装完成后,会出现一行,这是共享文件的位置,后面要用到: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/

(6)编辑测试页面 vim /usr/local/httpd/htdocs/index.php

<?php $memcache=new Memcache(); $memcache->connect('192.168.220.169',11211); ##连接Memcached服务器地址 $memcache->set('key','Memcache test Successfull!',0,60); $result=$memcache->get('key'); unset($memcache); echo$result; ?>

(6)测试memcached连接情况

在这里插入图片描述
在这里插入图片描述

三、Memcached 数据库操作与管理

1、安装使用 telnet 连接主机IP地址以及11211端口,就可以对数据库进行操作和管理了

代码语言:javascript
复制
yum install telnet -y
telnet 127.0.0.1 11211   //连接本地用 127.0.0.1就可以了,连接其他主机使用对应IP地址即可

2、新建数据:

代码语言:javascript
复制
add username 0 0 7  //添加数据(两个0表示:不进行压缩和序列化标识,数据过期时间为永不过期;标识号是7就需要输入7位数。)
allways   //输入一个7位数

3、查询数据

代码语言:javascript
复制
get username  //查询数据

gets username

4、更新数据:

代码语言:javascript
复制
set username 0 0 10       //更新信息,若键名不存在,则自行添加
everything

replace username 0 0 8    //更新信息,若键名不存在,则报错
12345678

5、检测/查看 更新数据:

gets username //检测更新 VALUE username 0 8 4 12345678

6、追加数据:

append username 0 0 7 //键值后追加数据 example

prepend username 0 0 2 //键值前追加数据 un

7、清除数据:

delete username //清除指定的键值数据 flush_all //清除所有缓存数据 OK

8、查看服务器统计信息:

代码语言:javascript
复制
stats                  //显示状态信息
stats items            //返回所有键值对的统计信息
stats cachedump 1 0    //返回指定存储空间的键值对 
stats slabs            //显示各个slab的信息
stats sizes           //输出所有item的大小和个数
stats reset           //清空统计数据

9、退出:

代码语言:javascript
复制
quit
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Memcached 简介:
    • 1、介绍:
      • 2、特点:
        • 3、存储方式:
        • 二、关于Redis和Memcached的不同,主要有以下几点
          • 1、存储方式:
            • 2、数据支持类型:
              • 3、使用底层模型不同:
                • 4、运行环境不同:
                  • 5、Redis 原生支持集群模式
                    • 6、性能对比
                      • 7、Memcached还有如下缺点
                        • 8、总结
                        • 二、案例部署
                          • 1、实验环境
                            • 2、拓扑图如下
                              • 3、具体配置如下
                                • (1)服务端安装部署memcached
                                • (2)客户端安装部署LAMP架构
                                • (3)测试lamp架构
                                • (4)测试php连接数据库
                                • (5)客户端安装memcached连接服务端
                                • (6)测试memcached连接情况
                            • 三、Memcached 数据库操作与管理
                              • 1、安装使用 telnet 连接主机IP地址以及11211端口,就可以对数据库进行操作和管理了
                                • 2、新建数据:
                                  • 3、查询数据
                                    • 4、更新数据:
                                      • 5、检测/查看 更新数据:
                                        • 6、追加数据:
                                          • 7、清除数据:
                                            • 8、查看服务器统计信息:
                                              • 9、退出:
                                              相关产品与服务
                                              云数据库 Redis
                                              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                              领券
                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档