zoukankan      html  css  js  c++  java
  • Memcached安装与使用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

    一、Memcached的安装

    wget http://memcached.org/latest  #下载memcached

    yum install -y libevent-devel  #解决依赖

    tar zxvf memcached-1.4.31.tar.gz

    cd memcached-1.4.31

    ./configure

    make && make install

    二、启动

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

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

    ps –aux | grep memcached

    netstat –tunpl | grep :12000

    telnet 192.168.0.125 12000

    stats   #统计Memcached的各种信息

    memcached -d -m 2048 -p $1 -u root -vv >> /tmp/memcached.log 2>&1   #生成日志文件

    memcached启动的shell脚本

     1 #!/bin/sh  
     2 echo "Start to start memcached server $(date)..."  
     3   
     4 MEMCACHED=/usr/local/bin/memcached  
     5   
     6 usage()  
     7 {  
     8      echo "usage: `basename $0` port"  
     9 }  
    10   
    11 if [ -n "$1" ]  
    12 then  
    13 {  
    14      pid=`ps aux|grep memcached|grep "$1" |grep -v grep|awk '{print $2}'`  
    15      if [ -n "$pid" ]  
    16      then  
    17      {  
    18           sleep 2  
    19           echo "kill memcached which port is $1 begin"  
    20           echo "pid:$pid"  
    21           kill -9 $pid  
    22           echo "kill memcached which port is $1 end"  
    23           sleep 2  
    24      }  
    25      fi  
    26      echo "begin to start memcached in port $1"  
    27      LOG_FILE=/var/log/memcached/memcached_$1.log  
    28      rm -f $LOG_FILE  
    29      $MEMCACHED -d -m 2048 -p $1 -u root -vv >> $LOG_FILE 2>&1  
    30      echo "start memcached end"  
    31      tail -f $LOG_FILE  
    32 }  
    33 else  
    34 {  
    35      usage  
    36      exit 1  
    37 }  
    38 fi  

    ./startup.sh 12000

    三、memcached的命令

    命令格式

    1. <command name> <key> <flag> <expire> <bytes>  
    2. <data block>  

    command name 命令名称
    key 查找关键字
    flag 存储额外信息
    expire 数据保存时间,0表示永远,单位秒
    bytes 存储数据的字节数
    data block 存储的数据

    1.set 无论如何都存储,数据不存在时存储,数据存在时更新

    set name 0 0 3
    abc
    STORED
    get name
    VALUE name 0 3
    abc
    END

    2.add 当数据不存在时存储

    3.replace 当数据存在时存储

    4.get 可以一个或多个,用空格格开

    5.gets 与 get 一样,但会返回多一个数字,这个数字用来检查数据是否被修改过,如修改过,这个数字回改变

    6.cas cas即checked and set ,当最后一个参数与gets返回的数字一致时才存储,否则返回EXISTS

    7.append 将数据追加到当前缓存数据的之后,当缓存数据存在时才存储

    8.delete 删除缓存数据,数据存在返回DELETED,数据不存在返回NOT_FOUND

    9.flush_all 将当前所有缓存数据设置为过期,但不会释放内存

    10.stats items 执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行

    11.stats cachedump slabs_id limit_num 

      slabs_id:由stats items返回的结果(STAT items后面的数字)决定的
      limit_num:返回的记录数,0表示返回所有记录
      通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

    12.stats slabs 显示各个slab的信息,包括chunk的大小、数目、使用情况等

    13.stats sizes 输出所有item的大小和个数

    14.stats reset 清空统计数据

    四、通过python使用memcached

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

    集群的支持

    1 #内存中的主机列表为host_list = ["1.1.1.1", "1.1.1.2", "1.1.1.2", "1.1.1.3", ]
    2 mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True)
    3 mc.set('k1', 'v1')

    mc.set_multi({'k1': 'v1', 'k2': 'v2'})  #设置多个键值对

    mc.delete_multi(['k1', 'k2'])  #删除多个键值对

    mc.append('k1', 'after') #修改指定key的值,在该值后面追加内容

    mc.prepend('k1', 'before') #修改指定key的值,在该值前面插入内容

    mc.incr('k1') #自增,默认1

    mc.decr('k1') #自减

  • 相关阅读:
    win7环境下一次浅谈栈溢出
    字符约束条件的SQL注入攻击
    较有意思的Apple XSS(CVE-2016-7762)漏洞
    metasploit下Windows下多种提权方式
    NTFS ADS带来的web安全问题
    某安全团队内部渗透比赛
    MySQL注射绕过技巧(三)
    MySQL注射绕过技巧(二)
    MySQL注射绕过技巧
    centos7 zabbix3.4.6显示中文乱码问题
  • 原文地址:https://www.cnblogs.com/yoyovip/p/5869080.html
Copyright © 2011-2022 走看看