1. 2

NuSTER is a high performance HTTP proxy cache server and RESTful NoSQL cache server based on HAProxy.

NuSTER can be used as an HTTP proxy cache server like Varnish or Nginx to cache dynamic and static HTTP response, and also can be used as a RESTful NoSQL cache server, using HTTP POST/GET/DELETE to set/get/delete Key/Value object.

It can be used as an internal NoSQL cache sits between your application and database like Memcached or Redis as well as a user facing NoSQL cache that sits between end user and your application. It supports headers, cookies, so you can store per-user data to same endpoint.

  • All features from HAProxy(HTTPS, HTTP/2, ACL, etc)
  • Conditional cache
  • Internal KV cache
  • User facing RESTful cache
  • Support any kind of data
  • Support all programming languages as long as HTTP is supported
Setup Build

See Getting Started

    nuster nosql on data-size 200m
frontend fe
    bind *:8080
    default_backend be
backend be
    nuster nosql on
    nuster rule r1 ttl 3600
Basic Operations Set
curl -v -X POST -d value1
curl -v -X POST --data-binary @icon.jpg

curl -v


curl -v -X DELETE


Check status code.

  • 200 OK
    • POST/GET: succeeds
    • DELETE: always
  • 400 Bad request
    • empty value
    • incorrect acl, rules, etc
  • 404 Not Found
    • POST: failed on all rule tests
    • GET: not found
  • 405 Method Not Allowed
    • other methods
  • 500 Internal Server Error
    • any error occurs
  • 507 Insufficient Storage
    • exceeds max data-size
Per-user data

By using header or cookie in key, you can save per-user data to same endpoint.

nuster rule r1 key method.scheme.host.uri.header_userId if { path /mypoint }
nuster rule r2 key method.scheme.host.uri.cookie_sessionId if { path /mydata }
curl -v -X POST -d "333" -H "userId: 1000"
curl -v -X POST -d "555" -H "userId: 1001"

curl -v -X POST -d "userA data" --cookie "sessionId: ijsf023xe"
curl -v -X POST -d "userB data" --cookie "sessionId: rosre329x"
curl -v
< 404 Not Found

curl -v -H "userId: 1000"
< 200 OK

curl -v --cookie "sessionId: ijsf023xe"
< 200 OK
userA data

You can use any tools or libs which support HTTP: curl, postman, python requests, go net/http, etc.