nuster 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

Config

  1. global
  2. nuster nosql on data-size 200m
  3. frontend fe
  4. bind *:8080
  5. default_backend be
  6. backend be
  7. nuster nosql on
  8. nuster rule r1 ttl 3600

Basic Operations

Set

  1. curl -v -X POST -d value1 http://127.0.0.1:8080/key1
  2. curl -v -X POST --data-binary @icon.jpg http://127.0.0.1:8080/imgs/icon.jpg

Get

curl -v http://127.0.0.1:8080/key1

Delete

curl -v -X DELETE http://127.0.0.1:8080/key1

Response

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.

  1. nuster rule r1 key method.scheme.host.uri.header_userId if { path /mypoint }
  2. nuster rule r2 key method.scheme.host.uri.cookie_sessionId if { path /mydata }

Set

  1. curl -v -X POST -d "333" -H "userId: 1000" http://127.0.0.1:8080/mypoint
  2. curl -v -X POST -d "555" -H "userId: 1001" http://127.0.0.1:8080/mypoint
  3. curl -v -X POST -d "userA data" --cookie "sessionId: ijsf023xe" http://127.0.0.1:8080/mydata
  4. curl -v -X POST -d "userB data" --cookie "sessionId: rosre329x" http://127.0.0.1:8080/mydata

Get

  1. curl -v http://127.0.0.1:8080/mypoint
  2. < 404 Not Found
  3. curl -v -H "userId: 1000" http://127.0.0.1:8080/mypoint
  4. < 200 OK
  5. 333
  6. curl -v --cookie "sessionId: ijsf023xe" http://127.0.0.1:8080/mydata
  7. < 200 OK
  8. userA data

Clients

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