Giter Site home page Giter Site logo

mini-memecached's Introduction

简化版memcached服务器

实现功能

  • 支持get、set、delete指令
  • 支持惰性缓存过期策略

设计思路

基于Java的NIO实现IO多路复用,Reactor模型,由一个Acceptor线程来循环检测客户端的连接事件与读就绪事件。 当Acceptor接收到客户端的读就绪事件时,会将客户端连接句柄交给RequestDispatcher中,它持有一个业务线程池, 该线程池会调用RequestHandler,它将拿到客户端连接,进行读取,然后将指令交给CommandExecutor去执行指令。 CommandExecutor会获得单例CacheManager的引用,然后遍历所有的Command实例,基于责任链模式去检测该Command是否 支持该指令,若支持,则执行,然后返回结果。将结果交给RequestHandler,将结果写入到客户端连接中。

  • {basePackage}/Bootstrap
    • Main方法所在类
  • {basePackage}/server/Server
    • 服务器主体,其内部类Acceptor会循环检测客户端的就绪事件
  • {basePackage}/request/RequestDispatcher
    • 持有一个业务线程池,它会将客户端的请求放入至线程池中
  • {basePackage}/request/RequestHandler
    • 线程池执行的runnable,它会进行IO读取指令,然后交给CommandExecutor去执行指令
  • {basePackage}/command/CommandExecutor
    • 指令执行器,持有所有具体的Command,组成一个链,如果某个Command支持该指令,则调用该Command执行指令
  • {basePackage}/cache/CacheManager
    • 缓存管理器,单例,基于ConcurrentHashMap,支持线程安全的插入、删除等

运行示例

要求将mini_memcached.jar放在/home/mini_memcached目录下 然后执行 ./run.sh start ,如果启动成功,将显示mini-memecached server started 该服务器会监听在8888端口上,客户端使用telnet localhost 8888来连接服务器。

测试用例1

test_case1

cd /home/memcached ./run.sh start

telnet localhost 8888 set k1 0 0 2 v1 < STORED get k1 < VALUE k1 0 2 < v1 < END delete 1 < DELETED get k1 < END quit < Connection closed by foreign host

./run.sh stop

测试用例2

test_cast2

cd /home/memcached ./run.sh start

telnet localhsot 8888 get k1 < END set k1 0 10 2 v1 < STORED get k1 < VALUE 1 0 2 < v1 < END get k1 (此时已经过期) < END delete k2 < NOT_FOUND quit < Connection closed by foreign host

./run.sh stop

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.