Mik*_*keN 74 django memcached django-cache
我正在测试使用memcached来缓存django视图.如何判断memcached是否实际缓存了Linux命令行中的任何内容?
let*_*two 44
我知道这个问题很老,但这是用django测试memcached的另一个有用的方法:
正如@Jacob所提到的,你可以在非常详细的模式下启动memcached(而不是作为守护进程):
memcached -vv
Run Code Online (Sandbox Code Playgroud)
要测试django缓存配置,可以使用低级缓存api.
首先,启动python解释器并加载你的django项目设置:
python manage.py shell
Run Code Online (Sandbox Code Playgroud)在shell中,您可以使用低级缓存api来测试您的memcache服务器:
from django.core.cache import cache
cache.set('test', 'test value')
Run Code Online (Sandbox Code Playgroud)如果您的缓存配置正确,您应该在memcache中看到与此类似的输出:
<32 set :1:test 0 300 10
>32 STORED
Run Code Online (Sandbox Code Playgroud)
Nod*_*ode 42
您可以使用telnet和stats命令,例如:
# telnet localhost [memcacheport]
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 2239
STAT uptime 10228704
STAT time 1236714928
STAT version 1.2.3
STAT pointer_size 32
STAT rusage_user 2781.185813
STAT rusage_system 2187.764726
STAT curr_items 598669
STAT total_items 31363235
STAT bytes 37540884
STAT curr_connections 131
STAT total_connections 8666
STAT connection_structures 267
STAT cmd_get 27
STAT cmd_set 30694598
STAT get_hits 16
STAT get_misses 11
STAT evictions 0
STAT bytes_read 2346004016
STAT bytes_written 388732988
STAT limit_maxbytes 268435456
STAT threads 4
END
Run Code Online (Sandbox Code Playgroud)
Mik*_*keN 10
测试memcache工作的简单方法是在每个提供的页面上隐藏一个注释掉的时间戳.如果时间戳在对页面的多个请求中保持不变,则该页面由memcache缓存.
在Django设置中,我还设置了缓存机制以在文件系统上使用文件缓存(非常慢),但是在点击页面后我可以看到实际的缓存文件放在文件路径中,所以我可以确认缓存是在Django活跃.
我使用这两个步骤来解决我的缓存问题.我实际上没有在Django中正确启用缓存.更新的激活缓存方法是使用'django.middleware.cache.CacheMiddleware'中间件(不是具有两个中间件的中间件,必须是第一个/最后一个中间件设置.)
从命令行,尝试以下命令:
echo stats | nc 127.0.0.1 11211
Run Code Online (Sandbox Code Playgroud)
如果它没有返回任何内容,则内存缓存未运行。否则它应该返回一堆统计数据,包括正常运行时间(以及命中和未命中计数)
参考文章在这里, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
要每 2 秒查看一次更改:
watch "echo stats | nc 127.0.0.1 11211"
Run Code Online (Sandbox Code Playgroud)
小智 6
Memcached实际上可以自行写入日志文件,而不必手动重新启动它。的/etc/init.d/memcached初始化脚本(/usr/lib/systemd/system/memcached.service上EL7 +;啊)可以调用memcached的与指定的选项/etc/memcached.conf(或/etc/sysconfig/memcached上EL5 +)。这些选项包括详细程度和日志文件路径。
简而言之,您只需要在该conf / sysconfig文件中添加(或取消注释)这两行...
-vv
logfile /path/to/log
Run Code Online (Sandbox Code Playgroud)
...并使用service memcached restart(EL3-7)或/etc/init.d/memcached restart(debuntus)重新启动守护程序
然后,您可以使用传统方式(例如)监视此日志tail -f /path/to/log。
对于扩展节点的响应,您可以使用socat UNIX-CONNECT:/var/run/memcached.sock STDIN调试 unix 套接字。
例子:
$ socat UNIX-CONNECT:/var/run/memcached.sock STDIN
stats
STAT pid 931
STAT uptime 10
STAT time 1378574384
STAT version 1.4.13
STAT libevent 2.0.19-stable
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.015625
STAT curr_connections 1
STAT total_connections 2
STAT connection_structures 2
Run Code Online (Sandbox Code Playgroud)
在 Bash 中,您可以通过以下命令查看 memcache 的统计信息:
exec 3<>/dev/tcp/localhost/11211; printf "stats\nquit\n" >&3; cat <&3
Run Code Online (Sandbox Code Playgroud)
要刷新缓存,请使用memflush命令:
echo flush_all >/dev/tcp/localhost/11211
Run Code Online (Sandbox Code Playgroud)
并检查统计数据是否增加。
要转储所有缓存的对象,请使用memdump或memcdump命令(memcached/libmemcached包的一部分):
memcdump --servers=localhost:11211
Run Code Online (Sandbox Code Playgroud)
或者:
memdump --servers=localhost:11211
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 PHP,要查看是否支持,请检查:php -i | grep memcached。
要检查正在处理的 memcached 进程,您可以使用网络嗅探器或调试器(例如strace在 Linux 或dtrace/dtruss在 Unix/OS X 上)。检查下面的一些示例。
sudo strace -e read,write -fp $(pgrep memcached)
Run Code Online (Sandbox Code Playgroud)
要以更好的方式格式化输出,请检查:如何将 shell 中的 strace 解析为纯文本?
Dtruss 是一个 dtrace 包装器,可在 Unix 系统上使用。运行它:
sudo dtruss -t read -fp $(pgrep memcached)
Run Code Online (Sandbox Code Playgroud)
sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63819 次 |
| 最近记录: |