码迷,mamicode.com
首页 > 数据库 > 详细

数据库自学(1)

时间:2015-07-17 13:41:47      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

Memcached

分布式,内存缓存,服务器

 

内存缓存:

提供将数据缓存到内存中服务。数据在内存中,为一个临时的存储器,通常作为缓存服务器来使用,而不是数据服务器来使用。

缓存:将中间结果临时存储,就是缓存技术。

Memcache是缓存服务器,仅仅提供存储缓存数据,而不决定什么样的数据存储于缓存中。

 

分布式:

多台memcache服务器,组成memcache集合。

 

 

安装

Windows

下载,解压,并拷贝到指定目录

官网:http://memcached.org/

技术分享

Memcached的服务器端程序。

技术分享

 

Linux

 

Memcached服务器安装完毕。

 

管理memcached服务器

方案一:基于CMD(命令行)的程序

通过CMD命令行,进行管理:

技术分享

 

全部使用默认参数,即可开启memcached服务器:

技术分享

此时,该memcached服务器,监听任意网卡(IP),11211端口上的请求。

 

典型的选项:

-p 所监听的端口

技术分享

-l 所监听的网卡接口

如果一台电脑存在多个网络连接,可以指定监听哪个网络的请求

技术分享

 

 

方案二:针对windows

通过访问的方式,管理memcached

选择–d 来控制该守护进程(deamon

以管理员权限运行cmd

技术分享

 

-d install安装服务

技术分享

技术分享

 

-d uninstall卸载服务

技术分享

 

使用Memcached

基于C/SClient-Server

刚刚memcached是服务器端软件。

需要提供客户端软件。

Memcached的数据交互协议,基于文本的。因此只要可向目标服务器发送文本,即可memcached客户端使用。例如:telnet

 

通过客户端软件 secureCRT来发送telnet协议,连接memcached服务器:

技术分享

puttywindows自带的telnet都可以)

技术分享

 

Memcached数据存储KEY-Value

一个KEY,对应一个值。

 

 

操作命令

设置

Set

Set KEY 是否压缩 有效期 长度

技术分享

 

Key                具有独立标志功能的字符串,长度在250个字节之内。

是否压缩         是否将数据压缩后进行存到服务器端。节省存储空间(需要压缩与解压时间)。

有效期:             数据在服务器端存储的有效时间。有效期的表示方式存在2种,时间间隔,时间戳。其判断使用哪种方式,依据有效期整数值的大小。临界值为: 30*24*3600 = 2592000

技术分享

测试获取:

技术分享

发现e3过期,因为:超过2592000当作时间戳来处理。

 

如果需要设置超过30天的数据,则使用时间戳的形式:

Time()+间隔

技术分享

长度              数据占用的空间,单位字节。与字符集相关。

技术分享

 

 

存在则替换,不存在则创建。

Add

添加

使用方式与参数与set一致。

仅仅可以完成添加,如果key已经存在,则add失败。

技术分享

Replace

替换

使用方式与参数与set一致。

仅仅完成存在时替换。

技术分享

 

Incr

Increment,递增

将已有值,递增N个数

get+set

Decr

Decrement,递减

get-set

技术分享

获取

Get KEY

技术分享

删除

Delete key

删除某个key

技术分享

Flush_all

删除全部

 

Stats

获取当前服务器状态信息

技术分享

 

PHP操作memcached

PHP作为memcached服务器的客户端来使用。

加载memcached操作扩展:memcache

将扩展文件:php_memcached.dll 看拷贝到PHP的扩展目录

技术分享

修改PHP.ini增加开启该扩展指令:

技术分享

技术分享

 

 

该扩展提供面向对象的操作语法:

实例化memcache对象

技术分享

建立连接

Connect

技术分享

 

设置

$mem->set(KEY, VALUE, 是否压缩, 有效期)

$mem->add(KEY, VALUE, 是否压缩, 有效期);

$mem->replace(KEY, VALUE, 是否压缩, 有效期);

技术分享

技术分享

如果需要压缩存储,将flag标志设置为

MEMCACHE_COMPRESSED

$mem->increment();

$mem->decrement();

技术分享

获取

$mem->get(KEY);

技术分享

删除

技术分享

获得统计信息

技术分享

技术分享

 

PHP不同数据类型

分成两类进行处理:

标量类型:

整型,浮点型,布尔型,字符串

以字符串的形式进行存储:

技术分享

非标量类型:

数组,对象,  NULL

数据类型可以被保存,获得原始数据。可见,set方法,在判断当前的数据为非标量类型时,自动进行序列化存储,获取时完成反序列化返回。

技术分享

 

分布式的memcached

各个memcached服务器间互不通讯的分布式算法。

要求,分布式算法(一个key 对应哪台memcached服务器)是由客户端决定(实现)的。

技术分享

 

Memcached默认实现的是:

取模(求余):依据服务器的数量,计算余数,对应某台memcached服务器。

 

使用:

技术分享

 

后续的使用与基本操作是相同的:

 

 

 

注意,由于分布式算法是求余算法,导致:

设置与获取时:服务器的数量,与服务器的顺序,应该匹配才可以。

 

 

附:典型KEY求余的实现:

通过crc32冗余校验算法获得一个字符串的整型冗余值。

技术分享

 

 

失效的问题讨论

Memcached缓存项何时会失效?(未命中)

 

情况一:有效期控制失效。

 

需要注意:懒惰模式

当缓存项失效时(过有效期),memcached不会主动删除该缓存项。

而是在get该缓存项时判断是否失效,则删除。

 

 

情况二:删除最近最少使用的缓存项

需要:LRU( Least Recently USE)

技术分享

-m 指定使用的N兆字节

 

当新加缓存项时,空间不足,将最近最少使用的缓存项删除,释放空间。

 

不需要考虑的memcached问题

不是数据库,而是缓存。

不需要做:数据持久化;数据的备份恢复。

缓存不会影响项目的业务逻辑,仅仅会影响处理速度。

 

 

 

常见的问题?

 

安全性问题?

Memcached本身没有提供认证机制。

通常,memcached服务器都是局域网内服务器。

如果memcached服务器可以被访问到,通过系统上其他软件进行控制:

Firewall

Iptables

 

 

使用

Sessionmemcached

Session处理非常频繁,为了高速存储session数据,将session数据存储于内存中。

 

扩展memcache中,已经提供好了  memcache session存储处理器(session.save_handler

将其设置为 memcache就可以使用session入内存了。

 

通过配置项:session.save_path 就可以配置session数据的存储位置,包括所使用的memcached服务器信息(集合信息)

 

技术分享

 

常规使用session即可:

技术分享

 

 

Tip

Memcached存储的session数据,以session-IDKEY,序列化的数据为值一种格式

技术分享

 

总结:

存储方式:

1文件(默认)

2数据库表(user

3内存(memcached

 

除了速度快,session入数据库服务器,session入内存服务器,另外的一个优势(很重要):

多台web服务器共享session

技术分享

 

 

获取时过程复杂,更新频率低

例如:项目中无限分类(树状分类)的获取:

获取时过程复杂:需要递归完成。

分类的更新频率:低

 

将获取好的分类数据,存储在memcached中,需要查询时,先判断是否已经缓存了,如果存在则完成从缓存中获取,如果不存在,则完成从数据表中获取,并更新缓存。

一旦缓存数据源(分类数据)变化,更新(删除)缓存

 

完成该例子:

 

 

列表页:

 

 

TP中,函数M,D

S()可以快捷的操作缓存。

 

 

不需要持久化的某些状态数据

好友列表登录状态显示

 

User_status

User_id,   is_login

23              1

45              0

 

Memcache:

User_23=>1

User_45=>0





数据库自学(1)

标签:

原文地址:http://www.cnblogs.com/geyu/p/4654087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!