php下使用memcache学习笔记


学习memcache前言

这篇文章是写给自己的,用于记录memocache的学习过程,里面写的东西可能不完善,也不全,甚至会有很多错误,如果有人看见的话,非常欢迎指正


一、memcache是什么?

memcache是一种存在内存里的nosql数据库,是一个自由开源的,高性能,分布式内存对象缓存系统(其实只要是存在性能的数据库,性能就不会低)。
memcache是一个简单的key-value形式的数据库,开发简洁。但是有些问题,比如不能永久化存储,支持的类型只有简单的类型,也就是string,如果要存数组需要序列化后再存,比如json

二、memcache特征

  • 协议简单,使用简单的基于文本行的协议
  • 基于libevent事件处理,灵活调整服务器连接数
  • 存在内存里面,存取速度非常快
  • 不互相通信,每个服务器只对自己的数据进行管理,也就是他自己无法组建集群
  • 缺乏认证和安全管制,也就是没有账号密码
  • 不支持数据持久化,需要自己实现

三、memcache内存管理方式

使用slab Allocation 方式存储。
Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。

slab由page组成,page又由chunk组成。

简单的来说,就是像仓库货架一样,大的货物和大货物放在一起,小货物和小货物放在一起,但是他们都是一个个货架码好了,编好号了放在一个大仓库里。

page大小可以设定,默认是1Mb,可以在启动时通过-I参数来指定。
在这里插入图片描述
但是这里有个问题,这里很容易造成内存浪费,比如进来一个300byte大小的数据,会放在1024byte的数据chunk里面,这样空间就被浪费了。

为此,memcache就会使用一个LRU算法(最近最少使用算法)来清除那些废弃数据。熟悉mysql的innodb的人可能更熟悉这个算法。在此不再累述。

四,安装

本人用的是php环境,所以代码是基于php的

Ubuntu下安装

sudo apt install memcache
sudo apt install php-memcached
sudo service php7.4-fpm restart

memcache 后面加d是升级版,旧版php不支持,不过现在谁还用旧版php

连接memcache的方法是

telnet 127.0.0.1 11211

连接成功

五、memcache基本命令

在这里插入图片描述

  • flags 就是是否使用压缩
  • exptime 过期时间
  • bytes 是指定数据大小,主要是前面说的选slab的时候,不同大小的chunk组成的page在不同的slab里面
    在这里插入图片描述

在这里插入图片描述

六、memcache集群

在这里插入图片描述

①余数计算

在这里插入图片描述

  • 取余计算有个问题,一旦其中一台服务器崩掉,会造成下一台服务器超负荷运行,最终全都崩掉。
  • 一旦移除或者添加服务器,要重建所有缓存
②一致性hash算法

在这里插入图片描述

七、session存到memcache里面

修改php的ini文件
session.save_handle = “memcache”
session.save_path = “192.168.1.104:11211” 或者 127.0.0.1:11211 或者对应的memcache服务器
这样既可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值