memcache

Memcached安装:

wget http://memcached.org/latest
tar -zxvf memcached-1.x.x.tar.gz
cd memcached-1.x.x
./configure && make && make test && sudo make install
 
PS:依赖libevent
       yum install libevent-devel
       apt-get install libevent-dev

启动Memcached


memcached -d -m 10 -u root -l 192.168.187.129 -p 12000 -c 256 -P /tmp/memcached.pid


 
参数说明:
    -d 是启动一个守护进程
    -m 是分配给Memcache使用的内存数量,单位是MB
    -u 是运行Memcache的用户
    -l 是监听的服务器IP地址
    -p 是设置Memcache监听的端口,最好是1024以上的端口
    -c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定
    -P 是设置保存Memcache的pid文件

Memcached命令

存储命令: set/add/replace/append/prepend/cas
获取命令: get/gets
其他命令: delete/stats..

 

 

 

Python操作Memcached

 安装API

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

在memcache内,默认只支持字符串类型,-------->只能是key:value(字符串、数字)

# 第一次操作

import memcache
 
mc = memcache.Client(['10.211.55.4:12000',], debug=True)
mc.set("foo", "bar")
ret = mc.get('foo')
print(ret)
# debug = True 表示运行出现错误时,显示错误信息,上线后移除该参数。

# 天生支持集群

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

mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2),], debug=True)

具体操作

import memcache

mc = memcache.Client(["192.168.187.129:12000", ], debug=True)

# mc.add("f","f23")    # 第二次添加相同key时,会报错  MemCached
# mc.replace("f", "f2") #  将key对应的值,替换,若key不存在报错

# mc.set("f2", "ffff")    # 将key对应的值设置为ffff,若key存在:替换,不存在:创建
# mc.set_multi({"k1": "v1", "k2": "v2"})  # 批量set

# mc.delete("k1")  # 删除key(k1)
# mc.delete_multi(["k1", "k2"])  # 批量删除多个键值

# mc.append("k1", "after")  # 在key对应的值后面拼接after
# mc.prepend("k2", "before")  # 在key对应的值前面拼接before

# mc.set("k1","555")
# mc.decr("k1", delta=10)  # 每执行一次减10
# mc.incr("k1", delta=10)  # 每执行一次加10
PS: 两个客户端同时取到了一个key:500,分别进行减一赋值
----------> key : 499==========>这是错的
避免这种情况 使用 gets 和 cas
v = mc.gets("count")  # 获取值
# 若果有人在gets之后,cas之前修改了count,下面的cas会报错,
mc.cas("count",550)  # 设置值  

:本质 在gets时,会从memcache中获取一个自增的数字,通过cas修改gets的值时,会携带着去比较,
    相同可以修改,不同不允许修改
# ret = mc.get("k2")  # 不存在,返回None
ret = mc.get_multi(["k1", "k2"])  # 返回一个字典/空字典

print(ret)

 

posted @ 2018-09-11 18:11  慕沁  阅读(196)  评论(0)    收藏  举报