码迷,mamicode.com
首页 > 系统相关 > 详细

day13 memcache,redis,myqlachemy

时间:2017-01-12 02:53:55      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:connect   back   com   conf   htm   amp   utf-8   https   设计   

memcache

memcache简介

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

本质上,它是一个简洁的key-value存储系统。通过socket连接和发送命令

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

特征

协议简单

基于libevent的事件处理

内置内存存储方式

memcached不互相通信的分布式

memcached安装

参考安装链接地址:http://www.runoob.com/memcached/window-install-memcached.html

当前安装方法:

[[email protected] ~]# yum install memcached -y
[[email protected] ~]# memcached -d -m 10 -u root -l 172.1.1.7 -p 11211 –P /tmp/memcached.pid   #启动

参数说明:

-d 是启动一个守护进程

-m 是分配给Memcache使用的内存数量,单位是MB

-u 是运行Memcache的用户

-l 是监听的服务器IP地址

-p 是设置Memcache监听的端口,最好是1024以上的端口

-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定

-P 是设置保存Memcache的pid文件

python操作memcached:

  • 安装API:
python操作Memcached使用Python-memcached模块

下载安装:https://pypi.python.org/pypi/python-memcached
  • python操作memcached
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
memc=memcache.Client([172.1.1.7:11211],debug=True)     #连接远程mencache
memc.set(key1,value1)                                 #写入键值对
rec=memc.get(key1)                                       #按照key读取参数
print(rec)
  • 连接memcached集群

memc=memcache.Client([(‘172.1.1.6:11211’,1),(‘172.1.1.2:11211’,2)],debug=True)

权重的计算:

     python-memcached模块原生支持集群操作,其原理是在内存维护一个主机列表,且集群中主机的权重值和主机在列表中重复出现的次数成正比;

如果用户根据如果要在内存中创建一个键值对(如:k1 = "v1"),那么要执行一下步骤:

  1. 根据算法将 k1 转换成一个数字
  2. 将数字和主机列表长度求余数,得到一个值 N( 0 <= N < 列表长度 )
  3. 在主机列表中根据 第2步得到的值为索引获取主机,例如:host_list[N]
  4. 连接 将第3步中获取的主机,将 k1 = "v1" 放置在该服务器的内存中
  • add操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
#添加一条键值对,如果已经存在的 key,重复执行add操作异常
memc = memcache.Client([172.1.1.7:11211],debug=True)   #连接memcache服务端
memc.add(k1,v1)     #添加参数
# memc.add(‘k1‘,‘v2‘)
  • replace操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
#replace 修改某个key的值,如果key不存在,则异常
memc=memcache.Client([172.1.1.7:11211],debug=True)
memc.replace(k1,vvvv)
kk=memc.get(k1)
print(kk)
  • set&set_multi
    • set 设置一个键值对,如果key不存在,则创建,
    • 如果key存在,可以修改 set_multi 设置多个键值对,如果key不存在,则创建,如果key存在,可以修改
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
memc=memcache.Client([172.1.1.7:11211],debug=True)
#memc.set(‘s1‘,‘t1‘)
memc.set_multi({s2:k2,s3:k3})     #千万要记住此处是引号
  • delete&delete_multi
    • delete 在Memcached中删除指定的一个键值对
    • delete_multi 在Memcached中删除指定的多个键值对
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
memc = memcache.Client([172.1.1.7:11211],debug=True)
#memc.delete(‘s1‘)
memc.delete_multi([‘s2‘,‘s3‘])
  • get&get_multi
    • get            获取一个键值对
    • get_multi   获取多个或者一个键值对
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
memc=memcache.Client([172.1.1.7:11211],debug=True)
val1 = memc.get(s1)     #取的值不存在就为None
print(val1)
val2 = memc.get_multi([s1,s2,s3])
print(val2)
  • append&prepend
    • append    修改指定key的值,在该值 后面 追加内容
      prepend   修改指定key的值,在该值 前面 插入内容
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import memcache
memc = memcache.Client([172.1.1.7:11211],debug=True)
memc.append(s7