memcache

 

memcached:

memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

最初的目的是用来加速动态页面访问,减少缓解数据库压力,主要生产场景用来缓存mysql的查询结果。

缓存服务器:

    缓存:cache,无持久存储功能;所有数据都保存在内存中,断电即丢失
    bypass缓存--旁挂式缓存
        只能性一般依赖于服务端,一半依赖于客户端
    k/v cache,仅支持存储流式化数据;
        单个缓存项大小不能大于1M,支持池流失化数据。
        key和value都放在内存中。key放在hash表中

LiveJournal旗下的Danga Interactive研发,

特性:

k/v cache:仅可序列化数据;存储项:k/v;存储于内存中

智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;

运作方式,客户端(例如php)先找memcache查找缓存中是否有其想要的数据,有则直接读取(缓存命中),没有则去真实的服务端请求数据,请求到数据后,自己将请求结果缓存到memcache。

分布式缓存:互不通信的分布式集群;负载均衡需要客户端自己实现。(需要程序员自己实现)

分布式系统请求路由方法:取模法,一致性哈希算法;
key的哈希值除以服务的数量取模,0就是第一台,1就是第二台...但是取模法会出现雪崩效应。其中一台故障,但是客户端根据算法还是会调度到该服务器上。

建议使用一致性哈希算法

hash环

算法复杂度:O(1)

    执行效率非常高

清理过期缓存项:

        缓存耗尽:LRU ,最近最少使用算法,主动清理
        缓存项过期:惰性清理机制,不删除,直接覆盖

安装配置:

有两个版本centos6都可以安装
    memcache
    memcached   centos7只能按装这个

    由CentOS 7 base仓库直接提供:
        监听的端口:
            11211/tcp, 11211/udp 
            tcp更可靠,udp效率更高效

主程序:/usr/bin/memcached

配置文件:/etc/sysconfig/memcached  #环境配置定义的变量,启动脚本中要调用。

[root@localhost html]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""    # 使用memcached [options]

Unit File:memcached.service

[root@localhost html]# cat /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached 
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached  ##调用环境文件
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS  ###调用变量

[Install]
WantedBy=multi-user.target

协议格式:memcached协议

文本格式  使用Telnet就可以控制
二进制格式

memcache配置文件 centos7为列

[root@localhost html]# rpm -ql memcached
/etc/sysconfig/memcached #memcache的运行环境
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/lib/systemd/system/memcached.service  #服务启动脚本
/usr/share/doc/memcached-1.4.15
/usr/share/doc/memcached-1.4.15/AUTHORS
/usr/share/doc/memcached-1.4.15/CONTRIBUTORS
/usr/share/doc/memcached-1.4.15/COPYING
/usr/share/doc/memcached-1.4.15/ChangeLog
/usr/share/doc/memcached-1.4.15/NEWS
/usr/share/doc/memcached-1.4.15/README.md
/usr/share/doc/memcached-1.4.15/protocol.txt
/usr/share/doc/memcached-1.4.15/readme.txt
/usr/share/doc/memcached-1.4.15/threads.txt
/usr/share/man/man1/memcached-tool.1.gz
/usr/share/man/man1/memcached.1.gz

命令:

命令格式:

统计类:stats, stats items, stats slabs, stats sizes

存储类:set, add, replace, append, prepend
    命令格式:<command name> <key> <flags> <exptime> <bytes> 

             <cas unique>

检索类:get, delete, incr/decr(自增自减)

清空:flush_all

示例:
    telnet> add KEY <flags> <expiretime> <bytes> \r  #最后敲回车
    telnet> VALUE

exptime 过期时间

memcached程序的常用选项:

memcached [options]

    -m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes.
        缓存空间大小,默认64MB
    -c <num>:Use <num> max simultaneous connections; the default is 1024. 
        用户的最大连接数
    -u <username>:
        以指定的用户身份来运行进程;
    -l <ip_addr>:
        监听的IP地址,默认为本机所有地址;
    -p <num>:监听的TCP端口, the default is port 11211.
    -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
    0表示关闭此功能

    -M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;

    -f <factor>:增长因子;默认是1.25;内存的空间分配因子
        创建chunk的粒度,粒度过于粗糙浪费空间。根据实际情况调整。

    -t <threads>:启动的用于响应用户请求的线程数;

使用Telnet连接使用文本格式的协议

[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 5051  #主进程的pid号
STAT uptime 13419  
STAT time 1477675842
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.144034
STAT rusage_system 1.049062
STAT curr_connections 10
STAT total_connections 743
STAT connection_structures 12
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 10270
STAT bytes_written 756593
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END

memcache也是使用事件驱动机制,开启的线程数最好不要超过cpu核心数

memcached默认没有认证机制,可借用于SASL进行认证;

    SASL:Simple Authentication Secure Layer  #可以基于pam或mysql认证

API:

    php-pecl-memcache  #php的API接口扩展模块
    php-pecl-memcached #PHP的API接口扩展模块
    python-memcached   #python的API接口扩展模块

    libmemcached       #工具
    libmemcached-devel #开发库

命令行工具:
    memcached-tool  SERVER:PORT  COMMAND
    memcached-tool - stats and management tool for memcached

图形界面工具: phpmemcacheadmin

安装 yum install httpd php php-pecl-memcached memcached

将管理页面放到httpd的虚拟主机目录。php通过API会调用一些系统调用。selinux会阻止,禁用selinux。目录的属主。启动httpd服务,启动memcached 即可运行。

进入首页先配置根据装的是memcached还是memcache选择API接口。如果服务启动没有问题。访问status页面能看到memcache的状态。

注意:memcache的使用场景,有场景适合使用更为专业的redis,但是如果本机安装一个memcache就能解决大问题。也就没必要使用redis。

nginx也支持memcache有相关模块 ngxhttpmemcached_module

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56558

(0)
yywyyw
上一篇 2016-11-01
下一篇 2016-11-01

相关推荐

  • Linux文件层级结构标准(FHS)

    Linux文件层级结构标准(FHS) 设计FHS(Filesystem Hierarchy Standard)的目的主要是为了给Unix-like系统的管理员提供一个管理系统以及目录结构的一个参考。 由于利用Linux源码开发产品和发行版的企业或组织众多,如果每个组织都按照自己的喜好来组织系统中的文件结构,网络上必然出现各种各样的文件结构。这些产品的用户就不…

    2016-12-05
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • 马哥教育面授班22期:第一天课程练习

    Linux发展史:        1984年:Richard Stallman发起GNU项目和自由软件基金会创建开源的UNIX实用工具版本        创建通用公共许可证(GPL)        1991年:Linux Torvalds发…

    Linux干货 2017-05-16
  • 第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 光标跳转 字符间跳转 h或向左箭头键 光标向左移动一个字符 j或向下箭头键 光标向下移动一个字符 k或向上箭头键 光标向上移动一个字符 l或向右箭头键 光标向右移动一个字符 翻屏 Ctrl+f 屏幕向下移动一页 Ctrl+b 屏幕向上移动一页 Ctrl+d 屏幕向下移动半页 Ctrl+u 屏幕向上移动半页 Ent…

    Linux干货 2017-01-22
  • Linux的终端类型

            Linux的终端类型         Linux终端的定义         Linux终端的分类 &nb…

    Linux干货 2016-10-18
  • UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。 3) 类的属性…

    Linux干货 2015-04-07