• memcached


    memcached for Win32:
    1. http://jehiah.cz/projects/memcached-win32/ , 1.2.1
    2. http://code.jellycan.com/memcached/ , 1.2.6
    3. http://www.splinedancer.com/memcached-win32/ , 1.2.4
    4. http://blog.northscale.com/ , 1.4.4
    memcached .NET clients:
    http://code.google.com/p/memcached/wiki/Clients

    Win32的安装、卸载等参考memcached.exe -h,正式环境的部署应当使用linux环境,使用memcached最新版本

    描述
    高性能、内存、分布式缓存方案。存储string、byte[]类型数据
    全内存缓存,提供高性能存取,但服务器重启将导致已有缓存数据丢失,需重新设置加载
    key-value类型存储方案,负载均衡、一致性哈希、failover等管理都由client完成
    key值限定为250字符以下,存储小对象效率很高,大对象效率比较低(服务器端存储空间大,网络通讯开销大),对大对象、大文件数据等情形,应当考虑其他缓存方案

    不支持锁,替代的方案是cas操作,其原理与乐观锁一样:
    1. 添加到cache server的每个key-value值对,服务器都会生成一个cas值(8字节无符号整数,即服务器端的版本号)
    2. 服务器每次更新某个值,都会自动更新他的cas值
    3. client向服务器请求数据的同时,要求服务器返回每个key对应的cas值
    4. client对数据进行处理
    5. client向服务器更新数据的同时,提交读取数据时服务器返回的cas值
    6. 服务器使用client提交的cas值与服务器上该key当前的cas值比较是否一致。如果不一致,说明在client读取数据之后,提交更新之前,有其他人更新了该数据,服务器返回更新失败的消息;如果一致,则服务器将更新数据并返回操作成功
    7. cas方式更新失败说明存在并发一致性冲突,client自行处理该异常状况

    协议简述
    详细协议规范参考官方提供的memcached-protocol.txt

    支持TCP/IP和UDP协议,建议客户端缓存连接

    数据有2种格式:文本行和非结构化数据。文本行用于客户端和服务器端的命令,非结构化数据用于客户端提交数据或者接收数据,非结构化数据为字节流的方式
    2种数据格式都以\r\n作为结束标记。因为非结构化数据中可能包含\r或\n字符,所以接收非结构化数据时必须根据预先接收到的数据长度进行处理,而不能依赖数据中的\r和\n字符判断是否结束

    目前key被限制为250字符,不能包含控制字符和空白字符

    命令分类
    1. 存储命令:set, add, replace, append, prepend, cas,通知服务器存储一个key标识的数据。客户端发送一个命令,接着发送数据块,从服务器接收一行回应消息,表明操作成功或者失败
    2. 读取命令:get, gets,向服务器请求返回一个或多个key标识的数据。客户端发送一个命令,包含key值列表,接着服务器为每个返回数据,先发送一行回应消息,包含返回数据的信息,接着发送返回数据块,结束时服务器发送一行"END"的回应消息
    3. 其他命令:都不包含非结构化数据。客户端发送一个命令,服务器返回一行或多行回应消息,最后一行消息为"END"
    命令行均以命令的名称开始,后面跟着空格分隔开的参数(如果有),命令名称都为小写并且是大小写敏感的

    过期时间
    时间有2种格式:
    1. Unix时间格式,即从1970年1月1号开始的秒数(32位整数)
    2. 从当前时间开始的秒数(最大值为30*24*60*60秒)
    如果值的范围超过30天的总秒数,则认为是Unix格式的时间

    错误消息
    1. "ERROR\r\n",表示命令不存在
    2. "CLIENT_ERROR <error>\r\n",表示客户端的错误,例如消息不符合协议等,<>中为错误描述
    3. "SERVER_ERROR <error>\r\n",服务器端错误,发送完错误消息后服务器端将关闭连接(其他情况服务器都不会关闭连接)

    主要命令
    add: store this data, but only if the server *doesn't* already hold data for this key
    replace: store this data, but only if the server *does* already hold data for this key
    set: store this data,没有就插入有就覆盖
    append: add this data to an existing key after existing data
    prepend: add this data to an existing key before existing data
    cas: store this data but only if no one else has updated since I last fetched it
    get:
    gets:
    delete:
    flush_all:

    使用telnet
    参考:memcached Telnet Interface
    连接: telnet localhost 11211
    存储:
    set mykey 0 60 10        #60秒过期时间,数据长度为10字节
    HelloWorld                   #要存储的数据
    读取:
    get mykey
  • 相关阅读:
    lucene.net的一点知识
    Lucene.net的全新体验
    天涯上令人肝肠寸断的100个签名
    第二天,把所有官方的demo都测试一遍
    DeBug 第一次实际使用~~
    [正式发布]库存管理系统v1.1!修复大量BUG,以及UI显示!
    !!终于把【库存管理的大致功能完成了!】
    第三天实战jsp&servlet的学生信息管理!
    ER图,数据库设计,烦恼
    第一天学习 easyUi
  • 原文地址:https://www.cnblogs.com/RicCC/p/memcached.html
Copyright © 2020-2023  润新知