zoukankan      html  css  js  c++  java
  • Memcache的总结介绍和一些命令的总结

    1.1memcached是什么?

    来看一些官方的一些解释:

    1 free&opensource,high-performance,distributed  memory object caching system

    自由&开放源码, 高性能,分布式的内存对象缓存系统
    由livejounal旗下的danga公司开发的老牌nosql应用

    2.1linux下编译memcached

    1 准备编译环境:
    2 在linux编译,需要gcc,make,cmake,autoconf,libtool等工具,
    3 这几件工具, 以后还要编译redis等使用,所以请先装.
    4 在linux系统联网后,用如下命令安装
    5 #yum install gcc make cmake autoconf libtool

    编译memcached
    memcached依赖于libevent库,因此我们需要先安装libevent.

    分别到libevent.org 和memcached.org下载最新的stable版本(稳定版).

    先编译libevent,再编译memcached,

    编译memcached时要指定libevent的路径.

    过程如下: 假设源码在/usr/local/src下, 安装在/usr/local下

     1 #tar zxvf  libevent-2.0.21-stable.tar.gz
     2 #cd  libevent-2.0.21-stable
     3 #./configure--prefix=/usr/local/libevent
     4 #如果出错,读报错信息,查看原因,一般是缺少库
     5 # make && make  install
     6 # tar zxvf  memcached-1.4.5.tag.gz
     7 # cd  memcached-1.4.5
     8 # ./configure  --prefix=/usr/local/memcached 
     9 --with-libevent=/usr/local/libevent
    10 # make && make install

    memcached的启动:(我们可以通过 --help 来选择启动时的一些参数)

     1 #/usr/local/memcached/bin/memcached -m64 -p11211 -unobody  -vv
     2 slab class 1:chunksize 96 perslab 10922
     3 slab class 2:chunksize 120 perslab 8738
     4 slab class 3:chunksize 152 perslab 6898
     5 slab class 4:chunksize 192 perslab 5461
     6 ....
     7 ....
     8 slab class 9:chunksize 600 perslab 1747
     9 slab class 10:chunksize 752 perslab 1394
    10 slab class 39:chunksize 493552 perslab 2
    11 slab class 40:chunksize 616944 perslab 1
    12 slab class 41:chunksize 771184 perslab 1
    13 slab class 42:chunksize 1048576 perslab 1

    如果想了解-m-p等参数的意义, 可以通过memcached-h 查看帮助:

     1 -p <num> tcp port number to listenon (default:11211)//监听
     2 的端口
     3 -u <num> udp port number to listenon(default:0,off)
     4 -s <file> unixsocket path to listenon(disables network support)
     5 -a <mask> access mask for unixsocket,inoctal(default0700)
     6 -l <ip_addr> interface to listenon,default is in drr_any
     7 -d start tellmemcachedtostart
     8 -d restart tellrunningmemcachedtodoagracefulrestart
     9 -d stop|shutdown tellrunningmemcachedtoshutdown
    10 -d install installmemcachedservice//把memcached注册成服务
    11 -d uninstall uninstall memcached service
    12 -r maximize core file limit
    13 -u <username>assume identity of <username>(only when run as root)
    14 -m <num> max memory to use for items inmegabytes,defaultis64
    15 mb//分配给memcached的最大内存
    16 -m return error on memory exhausted (rather than removing
    17 items)

    memcached的连接:

    1 memcached客户端与服务器端的通信比较简单,使用的基于文本的协议,而不是二进制协议.
    2 (http协议也是这样), 因此我们通过telnet即可与memcached作交互.

    另开一个终端,并运行telnet 命令(开启memcached的终端不要关闭):

    1 #格式telnet host port
    2 #telnet localhost 11211
    3 Trying::1...
    4 Connected to localhost.
    5 Escape character is'^]'.

    memcached的命令:

    1 增: add 往内存增加一行新记录
    2 
    3 语法:add key flag expire length 
    4 
    5 key  给值起一个独特的名字
    6 flag  标志,要求为一个正整数
    7 expire 有效期

    length 缓存的长度(字节为单位)
    1 flag的意义:
    2 memcached基本文本协议,传输的东西,理解成字符串来存储.
    3 想:让你存一个php对象,和一个php数组,怎么办?
    4 答:序列化成字符串,往出取的时候,自然还要反序列化成对象/数组/json格式等等.
    5 这时候,flag的意义就体现出来了.
    6 比如,1就是字符串,2反转成数组3,反序列化对象.....
    1 expire的意义:
    2 设置缓存的有效期,有3种格式
    3 1:设置秒数, 从设定开始数,第n秒后失效.
    4 2:时间戳, 到指定的时间戳后失效.
    5 比如在团购网站,缓存的某团到中午12:00失效.add key 0 13792099996
    6 3:设为0.不自动失效.

    注: 有种误会,设为0,永久有效.错误的.

    1 1:编译memcached时,指定一个最长常量,默认是30天.
    2 所以,即使设为0,30天后也会失效. 3 2:可能等不到30天,就会被新数据挤出去.
    delete 删除
    delete key [time seconds]
    删除指定的key.如加可选参数time,则指删除key,并在删除key后的time秒内,不允许
    get,add,replace操作此key.
    1  replace 替换
    2 replace key flag expire length
    3 参数和add完全一样,不单独写
    1  get查询
    2 get key
    3 返回key的值
    1  set 是设置和修改值
    2 参数和add,replace一样,但功能不一样.
    3 
    4 用add时,key不存在,才能建立此键值.
    1 set 想当于有add replace两者的功能.
    2 set key flag expire leng 时
    3 如果服务器无此键----> 增加的效果
    4 如果服务器有此键----> 修改的效果.
    5 如下图的演示,该图中,name是已经存在,而date原本不存在.set都可以成功设置他们

     incr,decr 命令:增加/减少值的大小
    语法: incr/decr key num
    示例:

    set age 0 0 2
    28
    stored
    get age
    value age 0 2
    28
    end
    incr age 1
    29
    incr age 2
    31
    decr age 1
    30
    decr age 2
    28
    1 应用场景------秒杀功能,
    2 一个人下单,要牵涉数据库读取,写入订单,更改库存,及事务要求, 对于传统型数据库来说,
    3 压力是巨大的.
    4 可以利用memcached的incr/decr功能, 在内存存储count库存量, 秒杀1000台
    5 每人抢单主要在内存操作,速度非常快,
    6 抢到count<=1000的号人,得一个订单号,再去另一个页面慢慢支付

    统计命令:stats:

     1 STAT pid 22443 // 进程号
     2 STAT uptime 17543398 //持续运行的时间
     3 STAT time 1438505866
     4 STAT version 1.4.22
     5 STAT libevent 2.0.20-stable
     6 STAT pointer_size 64
     7 STAT rusage_user 63.916283
     8 STAT rusage_system 36.312479
     9 STAT curr_connections 5
    10 STAT total_connections 36
    11 STAT connection_structures 7
    12 STAT reserved_fds 20
    13 STAT cmd_get 15
    14 STAT cmd_set 6
    15 STAT cmd_flush 1
    16 STAT cmd_touch 0
    17 STAT get_hits 9
    18 STAT get_misses 6
    19 STAT delete_misses 0
    20 STAT delete_hits 1
    21 STAT incr_misses 0
    22 STAT incr_hits 0
    23 STAT decr_misses 0
    24 STAT decr_hits 0
    25 STAT cas_misses 0
    26 STAT cas_hits 0
    27 STAT cas_badval 0
    28 STAT touch_hits 0
    29 STAT touch_misses 0
    30 STAT auth_cmds 0
    31 STAT auth_errors 0
    32 STAT bytes_read 5815
    33 STAT bytes_written 2108
    34 STAT limit_maxbytes 67108864
    35 STAT accepting_conns 1
    36 STAT listen_disabled_num 0
    37 STAT threads 4
    38 STAT conn_yields 0
    39 STAT hash_power_level 16
    40 STAT hash_bytes 524288
    41 STAT hash_is_expanding 0
    42 STAT malloc_fails 0
    43 STAT bytes 74
    44 STAT curr_items 1
    45 STAT total_items 5
    46 STAT expired_unfetched 0
    47 STAT evicted_unfetched 0
    48 STAT evictions 0
    49 STAT reclaimed 1
    50 STAT crawler_reclaimed 0
    51 STAT lrutail_reflocked 0
    52 
    53 缓存有一个重要的概念: 命中率.
    54 命中率是指:(查询到数据的次数/查询总数)*100%
    55 如上,13/(13+7)=60+%, 的命中率.
  • 相关阅读:
    Android中自定义IP控件
    转:如何上传自己的项目到github呢?
    设置Linux系统的交叉编译环境
    在Linux系统下制作系统启动盘(Ubuntu Linux)
    Arduino PWM
    SOCKET CAN的理解
    linux下can调试工具canutils安装与使用
    小梅哥博客
    Brett Beauregard大神的Arduino PID算法
    手把手教你看懂并理解Arduino PID控制库——引子
  • 原文地址:https://www.cnblogs.com/shangzekai/p/4696268.html
Copyright © 2011-2022 走看看