Memcached 是一个高性能的分布式的内存对象缓存系统,通过在内存中维护一个统一的巨大的hash 表,Memcached 能存储多种数据,通常情况下,Memcached 被用来存储图形验证码、短信验证码、登录session等不是至关重要的数据,因为一旦遇到断电等意外,内存中的数据将会丢失,所以不能存储特别重要的数据。 优点:之所以使用Memcached 系统,是因为它能提高服务的访问速度,缓解数据库的压力,其实就是因为Memcached 是在内存中存取数据,所以速度上会非常快。 注:Memcached 中的数据是以键值对的方式来存储的。
一、安装和启动
Memcached 需要先在机器上安装后才能使用。
Windows系统
- 安装:
memcached.exe -d install (注意不是双击安装,而是在命令窗口以执行命令的方式安装)。
- 启动:
memcached.exe -d start 。
Linux系统
- 安装:
sudo apt install memcached 。
- 启动:
/usr/bin/memcached [-u memcache] -d start 。
在Windows中使用Memcached 的注意事项:
- 如果提示没有权限,则使用管理员什么打开cmd。
- 提示缺少
pthreadGC2.dll 时,下载此文件并拷贝到windows/System32 下即可。
-
memcached.exe 文件不要放在含有中文的路径下。
Linux中启动时的常用参数:
-
-d :后台运行Memcached ,如/usr/bin/memcached [-u memcache] -d start 。
-
-m :指定运行Memcached 可以占用的内存,单位为M ,默认为64M ,如/usr/bin/memcached [-u memcache] -m 1024 -d start 。
-
-p :指定占用端口,默认端口为11211 。
-
-l :指定别的机器通过哪个ip地址连接到此服务,如果想要别的机器也能访问到此服务,就需要设置为-l 0.0.0.0 。
二、telnet操作Memcached
如果想在命令窗口操作Memcached ,可以使用telnet 命令。执行telnet 服务ip地址 端口号 连接到Memcached 服务,连接上之后就可以操作Memcached 了。
常用命令有: set
如果已存在相同的key ,则会覆盖原有的value ,否则新建一个key-value 键值对。语法为:
set key flas(是否压缩) timeout value_length
value
示例=====================
> set name 0[0表示不压缩] 60[过期时间60秒] 5[字符长度为5个字符]
> hello
> STORED[表示存储成功]
get
根据key 从Memcached 中获取对应的value 。
> get name
add
语法同set 命令,如果已存在相同的key 则会失败,提示NOT_STORED 。 delete
根据key 从Memcached 中删除一个键值对。 flush_all
删除Memcached 中所有键值对(谨慎使用)。 incr/decr
给指定key 的value 加上(减去)指定数字,语法为incr key num ,注意此命令只能操作数字类型的value 。
> set age 0 120 2
> 18
> STORED
> incr age 2
> 20
> get age
> VALUE age 0 2
> 20
> END
stats
查看当前Memcached 的状态信息。常用的信息项有:
-
get_hits :get 命令命中了多少次。
-
get_misses :get 命令空了多少次。
-
curr_items :当前Memcached 中的键值对数。
-
total_connections :Memcached 开启到现在的总连接数。默认最大的连接数为1024。
查看当前Memcached 中所有的key :
> stats items
> stats cachedump [items_id] 0
三、Python操作Memcached
插件安装:pip install python-memcached 。
建立连接并使用:
import memcache
# 连接之前确保Memcached已经启动,可以连接多台机器上的Memcached服务,
# 连接多台机器时,存储数据时会将数据存储到其中一台中,达到分布式的效果。
# debug参数设置为True表示会将错误信息打印到控制台
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
# 相当于set命令,Python中不用指定字符长度
mc.set('name','hello',60)
# 可以一次设置多个值
mc.set_multi({'username': 'zhangsan','age': '30','weight': '120'},60)
# 相当于get命令
name = mc.get('name')
print(name)
# 相当于delete命令
mc.delete('name')
# 可以一次删除多个值
mc.delete_multi(['username','age'])
# 自增长,默认自增长1
mc.incr('weight',10)
# 自减少,默认自减少1
mc.decr('weight',10)
四、Django中使用Memcached
想要在Django中使用Memcached ,既可以使用纯Python的方式来操作,也可以将Memcached 配置为默认的缓存系统,在settings.py 中按如下示例配置CACHES :
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': '127.0.0.1:11211' # 如果是连接多台机器,那这里可以配置为一个列表
}
}
配置好后,使用from django.core.cache import cache 导入即可,这个cache 对象可以直接使用,不需要我们去手动连接。
from django.core.cache import cache
cache.set('name','zhangsan',60)
# 需要注意的是Django中会对存入的key使用特定的规则进行重命名,但在获取时仍然需要使用原来的key
# 对于此处的代码,真正存储的key并不是“name”,但获取时仍然需要使用“name”
print(cache.get('name'))
五、Memcached安全
因为只需要ip和端口号就可以连接到Memcached ,所以使用Memcached 需要注意下安全防护,通常有两种方式来解决这个问题,一种是使用-l 参数指定只有本机才能连接,另一种是在防火墙中关闭该服务开启的端口访问,一般禁止掉默认的11211 端口即可。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|