一、基本情况

缓存,通常用于将常用数据保存在内存中,

当网站高并发时,首先请求到达缓存,如果缓存中有所需数据,直接拿走,

如果缓存中没有,由缓存区数据库中取相关数据后,放入缓存,在返回给请求使用,

这样,当网站第一次访问时,可能会很慢,但是越使用越快,因为大部分数据在缓存中已经有了,

对于缓存中的数据,通常设置一个超时时间,定期清除缓存中的数据,保证内容更新,

缓存也需要使用socket进行设置和连接,通过ip和端口等,指定主机作为缓存使用,

当前主要有两种:memcache和redis,参考文章:https://www.cnblogs.com/wupeiqi/articles/5132791.html

 二、Memcached

(一)基本介绍

 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。

它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

注意:只支持key:value形式,且value只支持字符串;

(二)安装及使用

在Windows下安装memcached,根据电脑32或64位有不同安装包,

注意:在1.1.4以前的版本,memcached作为一个程序安装,1.1.5以后取消了这个功能,

64位1.1.4版本的安装地址:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip

下载安装包到指定目录并解压,使用管理员权限,在cmd中运行命令进行安装和使用操作,具体步骤:

  1、路径跳转至安装包解压后的文件夹,

  2、安装:memcached.exe -d install

  3、查看是否安装成功:memcached -h

  4、启动telnet服务:“控制面板”->“程序”->“程序和功能”->“打开或关闭Windows功能”中打开“Telnet客户端”

  5、启动:memcached.exe -d start    

    使用本地主机兼缓存时:默认端口11211,    

    端口可以进行修改,

    在linux下使用命令:如 memcached -p 11222 -d start 即可修改端口为11222;

    在windows下,需要直接修改注册表

      cmd中键入 %systemroot%\syswow64\regedit,然后单击“确定”,

      在打开的注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached

      将ImagePath项的值,从:"c:\memcached\memcached.exe" -d runservice 改成:"c:\memcached\memcached.exe" -p 15000 -d runservice

  6、telnet或者第三方软件,通过ip和端口,连接使用memcached,

  7、关闭:memcached.exe -d stop

(三)memcache

python操作Memcached,使用Python-memcached模块,下载安装:https://pypi.python.org/pypi/python-memcached,

1、指定一个服务器作为缓存:

import memcache
 
mc = memcache.Client(['10.211.55.4:12000'], debug=True)
mc.set("foo", "bar")
ret = mc.get('foo')
print ret

2、指定一个集群服务器作为缓存:

import memcache
 
mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True)
mc.set("foo", "bar")
ret = mc.get('foo')
print ret

相当于分布式,且可以添加权重,

使用的算法是将要写入session的key转换成数字并求和,汇总权重总量,用“和除以权重总量”的方法进行缓存服务器的分配,

 3、常用命令

set            设置一个键值对,如果key不存在,则创建,如果key存在,则修改

set_multi   设置多个键值对,如果key不存在,则创建,如果key存在,则修改

delete             在Memcached中删除指定的一个键值对
delete_multi    在Memcached中删除指定的多个键值对

get            获取一个键值对
get_multi   获取多一个键值对

4、特别注意: gets和cas

每次执行gets时,会从memcache中获取一个自增的数字,通过cas去修改gets的值时,会携带之前获取的自增值和memcache中的自增值进行比较,如果相等,则可以提交,如果不想等,那表示在gets和cas执行之间,又有其他人执行了gets(获取了缓冲的指定值), 如此一来有可能出现非正常数据,则不允许修改。