请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

memcached学习

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Memcached

1. Memcached介绍:
(1)memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大型项目采用。官网是www.danga.com或者是memcached.org。
(2)Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力。Memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像、视频、文件、以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。文件IO操作比内存耗时.
2. 安装和启动memcached:
(1)memcached在linux中才能发挥他的极致性能,但是在windows上也可以用来学习。以下将介绍如何在windows下安装和启动memcached:
lcmd->memcached所在的目录,然后输入命令进行安装memcached.exe -d install。通过以上方式就完成了安装。
l启动memcached,在memcached所在的目录输入以下命令进行启动:memcached.exe -d start。输入完成后,输入netstat -an,如果发现有一个11211端口在监听则说明你的memcached是启动成功的。
(2)memcached安装不成功的原因和解决方案:
l如果是win7或者win8,安装的时候提示没有权限:在打开cmd或者powershell的时候,右键使用管理员身份运行。
l不要放在含有中文的路径下面。
l如果提示缺少pthreadGC2.dll文件,那么将pthreadGC2.dll文件拷贝到windows/System32.
3. 使用telnet操作memcached:
首先需要使用telnet登录到memcached上,输入命令:telnet 127.0.0.1 11211
这个命令有几个参数需要注意一下:
-m: 指定memcached最多占用多少内存。
-p:指定memcached监听的端口号。
-d:表示在后台执行这个服务。
(1)添加数据:
语法:add keyname 0 有效时间 数据大小
举个栗子:比如要添加一个{‘username’:’xiao’}到memcached中,那么可以使用以下代码:
-> add username 0 60 7
-> xiao
那么这样就完成了一次数据添加操作。其中的0表示能否压缩数据,默认使用不压缩就可以了。
(2)查询数据:
语法:get keyname
举个栗子:比如要查找username这个key所对应的值,那么可以使用以下代码:
-> get username
-> xiao
这样就可以获取到memcached中存储的key为username的值。
(3)修改数据:
有两种方式进行数据的修改,分别是使用set和replace,以下分别进行讲解:
lset方式:
语法:set keyname 0 有效时间 数据大小。
如果这个keyname存在,则修改,否则就是添加。举个栗子:
-> set username 0 60 5
-> xiaoming
就完成了存储。
lreplace方式:
语法:replace keyname 0 有效时间 数据大小。
如果这个keyname存在,则进行修改,否则就直接失败。举个栗子:
-> update username 0 60 6
-> xiaoming
(4)删除数据:
语法:delete keyname。
举个栗子:
-> delete keyname
以上就把keyname这个值删除了。
还有另外一种方式,flush_all将会把memcached中(内存)的所有值都删除掉,比较危险。
(5)查看memcached的状态:
语法:stats。
算命中率是通过get_hits/cmd_get来计算.这个命中率说明你的memecached当中存储的有效数据的分配率. 命中率要达到60%以上才算正常.
4. 使用python操作memcached:
前提:在python中使用memcached,需要使用pip安装python-memcached包,这个包是线程安全的。使用的时候需要导入memcache包。import memcache。在python中操作memcached,主要使用以下方法即可:
(1)连接memcached:mc = memcache.Client([‘127.0.0.1:11211’],debug=0)。获取一个memcache对象,来操作memcached
(2)set方法:set(key,val,time=0,min_compress_len=0)。
参数解释:
lkey表示key的名称
lVal表示value。
lTime表示超时时间,0代表的是永远都不过期.
举个栗子:
set(‘username’,’xiao’,time=60)
(3)set_multi方法:set(mapping,time=0,key_prefix=’’,min_compress_len=0)
参数解释:
lmapping:键值对的字典。
ltime:过期时间。
lKey_prefix:key的前缀。
lMin_compress_len:能否压缩。
举个栗子:
set_multi({‘myname’:’hello’},10,key_prefix=’kpr_’)
(4)add方法:add(key,val,time=0,min_compress_len=0)
参数解释:
同set方法,这个方法只会负责添加元素,如果该key存在了,则会抛出异常。
(5)replace方法:replace(key,val,time=0,min_compress_len=0)
参数解释:
同set方法,这个方法只负责替换元素,如果元素不存在,则会抛出异常。
(6)get方法:get(key)
根据key获取value。
(7)get_multi方法:get_multi(keys,key_prefix=’’)
获取多个Key的值,返回的是字典。Keys是key的数组,可以提供一个前缀。
(8)delete方法:delete(key)
删除某个key。
(9)delete_multi方法:delete_multi(keys)
给定一个keys的数组,把keys里面对应的key与其value都删除。
(9)incr方法:incr(key,delta=1)
用于给key对应的这个value+delta,默认是1,举个栗子:
-> mc.incre(‘counter’)
(10) decr方法:decr(key,delta=1)
用于给key对应的这个value-delta,默认是1,举个栗子
-> mc.decr(‘counter’)
Memcached可以保存的数据类型:
Key:必需是string类型,并且是唯一的。
Value:可以是普通的数据类型(int/float/string/Bool),也可以是集合(list/dict/tuple),可以是二进制数据(视频,图片)。
5. 其他注意事项:
1. Memcached是存储在内存中,一旦服务器发生异常或者重启,里面的数据将全部消失,因此使用memcached的时候,应该考虑将一些不重要的但经常需要使用的数据放到里面,比如一篇文章的阅读量,比如一个系统的在线人数,比如一些浏览量非常大的电影评分等。
2. Memcached指定内存后,如果存储的数据超过指定的内存大小后,memcached就自动根据LRU(Least Recently Used最近最少使用)的算法规则将不常用的数据给替换掉,所以这一点尤其要注意。
3. 如果需要同步memcached当中的数据到数据库中,需要自己写代码实现,这个也不麻烦,可以根据自己的策略进行同步.比如可以在每天的某个时刻同步,或者有一定的机制,比如主播直播完成后把直播过程中最多的观众的人数和最低的观众的人数同步到数据库当中,通过这种方式,可以把缓存中的数据同步到硬盘中.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 5 帖子
广告招商