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
键值对。语法为:
<code>set key flas(是否压缩) timeout value_length value 示例===================== > set name 0[0表示不压缩] 60[过期时间60秒] 5[字符长度为5个字符] > hello > STORED[表示存储成功] </code>
www#gaodaima.com来源gaodai$ma#com搞$$代**码网搞代码
get
根据key
从Memcached
中获取对应的value
。
<code>> get name </code>
add
语法同set
命令,如果已存在相同的key
则会失败,提示NOT_STORED
。
delete
根据key
从Memcached
中删除一个键值对。
flush_all
删除Memcached
中所有键值对(谨慎使用)。
incr/decr
给指定key
的value
加上(减去)指定数字,语法为incr key num
,注意此命令只能操作数字类型的value
。
<code>> set age 0 120 2 > 18 > STORED > incr age 2 > 20 > get age > VALUE age 0 2 > 20 > END </code>
stats
查看当前Memcached
的状态信息。常用的信息项有:
-
get_hits
:get
命令命中了多少次。 -
get_misses
:get
命令空了多少次。 -
curr_items
:当前Memcached
中的键值对数。 -
total_connections
:Memcached
开启到现在的总连接数。默认最大的连接数为1024。
查看当前Memcached
中所有的key
:
<code>> stats items > stats cachedump [items_id] 0 </code>
三、Python操作Memcached
插件安装:pip install python-memcached
。
建立连接并使用:
<code class="language-python">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) </code>
四、Django中使用Memcached
想要在Django中使用Memcached
,既可以使用纯Python的方式来操作,也可以将Memcached
配置为默认的缓存系统,在settings.py
中按如下示例配置CACHES
:
<code class="language-python">CACHES = { "default": { "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", "LOCATION": "127.0.0.1:11211" # 如果是连接多台机器,那这里可以配置为一个列表 } } </code>
配置好后,使用from django.core.cache import cache
导入即可,这个cache
对象可以直接使用,不需要我们去手动连接。
<code class="language-python">from django.core.cache import cache cache.set("name", "zhangsan", 60) # 需要注意的是Django中会对存入的key使用特定的规则进行重命名,但在获取时仍然需要使用原来的key # 对于此处的代码,真正存储的key并不是“name”,但获取时仍然需要使用“name” print(cache.get("name")) </code>
五、Memcached安全
因为只需要ip和端口号就可以连接到Memcached
,所以使用Memcached
需要注意下安全防护,通常有两种方式来解决这个问题,一种是使用-l
参数指定只有本机才能连接,另一种是在防火墙中关闭该服务开启的端口访问,一般禁止掉默认的11211
端口即可。