centos7 安装memcached 以及使用python3 操作 memcached数据库

memcached介绍
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
memcached分布式缓存服务器的特点:协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式


libevent官网:https://libevent.org/old-releases.html#2.0

#下载libevent
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

#编译安装
tar -xvf libevent-2.0.21-stable.tar.gz
cd ibevent-2.0.21-stable
./configure --prefix=/usr/local/libevent-2.0.21-stable --libdir=/usr/lib64
make
make install

#检查是否安装成功
ls -al /usr/local/libevent-2.0.21-stable/lib | grep libevent

#安装
yum install memcached

#查看帮助信息
memcached -h


-p <num> 监听的端口
-l <ip_addr> 连接的IP地址, 默认是本机
-d start 启动memcached 服务
-d restart 重起memcached 服务
-d stop|shutdown 关闭正在运行的memcached 服务
-d install 安装memcached 服务
-d uninstall 卸载memcached 服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-f <factor> 块大小增长因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助

#启动memcached
memcached -d -m 1024 -u root -p 11211 -P /tmp/memcached.pid


yum install telnet


格式<command name> <key> <flags> <exptime> <bytes>
<command name>的值可以是set,add,replace,append,prepend。
<key>此处的值是mykey
<flags>是一个任意的16-bit的无符号number。我们这里给的值是0
<exptime>指定过期时间,0代表永远不会过期。如果非0,则当过了过期时间就无法获取它。
<bytes>存的值的长度。这里给的值是16,就是I Love Memcached的字符个数。

[root@localhost ~]# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

set mykey 0 300 16
I Love Memcached
STORED

get mykey
VALUE mykey 0 16
I Love Memcached
END
quit
Connection closed by foreign host.
[root@localhost ~]#

#安装
pip3 install python3-memcached

 

测试脚本

import memcache

mc = memcache.Client(['127.0.0.1:11211'], debug=0)

print("\n")
#添加值
#add添加一个键值对,如果存在key,重复执行add则异常
mc.add("key0", "value0")
print('mc.add("key0", "value0")',"->",mc.get("key0"))
mc.add("key0", "value00")
print('mc.add("key0", "value0")',"->",mc.get("key0"))

print("\n")
#设置值
#set设置一个键值对,如果key不存在,则创建,如果key存在则修改
mc.set("key1", "value1")
print('mc.set("key1", "value1")',"->",mc.get("key1"))

print("\n")
#设置多个值
#set_multi设置多个键值对,如果key不存在,则创建,如果key存在,则修改
mc.set_multi({'key11':'value11','key21':'value21'})
print("mc.set_multi({'key11':'value11','key21':'value21'})","->",mc.get("key11"),mc.get("key21"))

print("\n")
#获取多个键值对
print("mc.get_multi(['key11','key21'])","->",mc.get_multi(['key11','key21']))


print("\n")
#修改
#append:修改指定key的值,在该值后面追加内容
#prepend:修改指定key的值,在该值前面插入内容
mc.append('key11','after')
mc.prepend('key21','before')
print("mc.append('key11','after')-mc.prepend('key21','before')","->",mc.get_multi(['key11','key21']))

print("\n")
#删除多个值
#delete_multi在memcached中删除指定的多个键值对
mc.delete_multi(['key11','key21'])
print("mc.delete_multi(['key11','key21'])","->",mc.get("key11"),mc.get("key21"))

print("\n")
#获取多个键值对
print("mc.get_multi(['key11','key21'])","->",mc.get_multi(['key11','key21']))

print("\n")
#删除值
#delete在memcached中删除指定的一个键值对
mc.set("key2", 3)
print('mc.set("key2", 3)',"->",mc.get("key2"))
mc.delete("key2")
print('mc.delete("key2")',"->",mc.get("key2"))

print("\n")
#增加减少值
#incr:自增,将memcached中的某个值增加N(默认为1)mc.incr('k1',2)
#decr:自减,将memcached中的某分值减少N(默认为1)mc.decr('k1',3)
mc.set("key3", "1")
print('mc.set("key3", "1")')
mc.incr("key3")
print('mc.incr("key3")',"->",mc.get("key3"))
mc.decr("key3")
print('mc.decr("key3")',"->",mc.get("key3"))

print("\n")
#替换值
#replace修改某个key的值,如果key不存在,则异常
mc.set("key4", "1")
print('mc.set("key4", "1")',"->",mc.get("key4"))
mc.replace('key4','v4')
print('mc.replace("key4","v4")',"->",mc.get("key4"))

print("\n")
#cas:执行一个检查并设置的操作,它仅在当前客户端最后一次取值后,该Key对应的值没有被其他客户端修改的情况下, 才能够将值写入。
mc.cas('key5','999')
print("mc.cas('key5','999')","->",mc.get("key5"))

print("\n")
#gets:gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
print("mc.gets('key5')",mc.gets('key5'))

输出

[root@localhost ~]# python3 test_mem.py


mc.add("key0", "value0") -> value0
mc.add("key0", "value0") -> value0


mc.set("key1", "value1") -> value1


mc.set_multi({'key11':'value11','key21':'value21'}) -> value11 value21


mc.get_multi(['key11','key21']) -> {'key11': 'value11', 'key21': 'value21'}


mc.append('key11','after')-mc.prepend('key21','before') -> {'key11': 'value11after', 'key21': 'beforevalue21'}


mc.delete_multi(['key11','key21']) -> None None


mc.get_multi(['key11','key21']) -> {}


mc.set("key2", 3) -> 3
mc.delete("key2") -> None


mc.set("key3", "1")
mc.incr("key3") -> 2
mc.decr("key3") -> 1


mc.set("key4", "1") -> 1
mc.replace("key4","v4") -> v4


mc.cas('key5','999') -> 999


mc.gets('key5') 999
[root@localhost ~]#

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章