All Projects → jonhoo → Cucache

jonhoo / Cucache

Licence: mit
Fast PUT/GET/DELETE in-memory key-value store for lookaside caching

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Cucache

Olric
Distributed cache and in-memory key/value data store. It can be used both as an embedded Go library and as a language-independent service.
Stars: ✭ 2,067 (+3180.95%)
Mutual labels:  caching, key-value, memcached, in-memory
gocache
High performance and lightweight in-memory cache library with LRU and FIFO support as well as memory-usage-based-eviction
Stars: ✭ 15 (-76.19%)
Mutual labels:  caching, key-value, in-memory
b52
b52 is a fast experimental Key/value database. With support for the memcache protocol.
Stars: ✭ 20 (-68.25%)
Mutual labels:  memcached, key-value
file.io
🐈 💻 Simple File Share Service where the file is completely deleted after download.
Stars: ✭ 38 (-39.68%)
Mutual labels:  key-value, in-memory
Ansible Role Memcached
Ansible Role - Memcached
Stars: ✭ 54 (-14.29%)
Mutual labels:  caching, memcached
cachegrand
cachegrand is an open-source fast, scalable and secure Key-Value store, also fully compatible with Redis protocol, designed from the ground up to take advantage of modern hardware vertical scalability, able to provide better performance and a larger cache at lower cost, without losing focus on distributed systems.
Stars: ✭ 87 (+38.1%)
Mutual labels:  caching, key-value
quitsies
A persisted drop-in replacement for Memcached, respecting the rules of quitsies.
Stars: ✭ 16 (-74.6%)
Mutual labels:  memcached, key-value
Buntdb
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support
Stars: ✭ 3,583 (+5587.3%)
Mutual labels:  key-value, in-memory
dxram
A distributed in-memory key-value storage for billions of small objects.
Stars: ✭ 25 (-60.32%)
Mutual labels:  memcached, in-memory
React Component Caching
Speedier server-side rendering with component caching in React 16
Stars: ✭ 365 (+479.37%)
Mutual labels:  caching, memcached
Coherence
Oracle Coherence Community Edition
Stars: ✭ 328 (+420.63%)
Mutual labels:  caching, in-memory
Easycaching
💥 EasyCaching is an open source caching library that contains basic usages and some advanced usages of caching which can help us to handle caching more easier!
Stars: ✭ 1,047 (+1561.9%)
Mutual labels:  caching, memcached
stash
Key-value store abstraction with plain and cache driven semantics and a pluggable backend architecture.
Stars: ✭ 71 (+12.7%)
Mutual labels:  caching, key-value
kdk memcached object cache
Object cache driver for Memcached in WordPress (based on Memcached Redux)
Stars: ✭ 20 (-68.25%)
Mutual labels:  caching, memcached
webuntis
A API library that makes it easy to access the Webuntis JSON RPC 2.0 API
Stars: ✭ 22 (-65.08%)
Mutual labels:  caching, memcached
Scrapbook
PHP cache library, with adapters for e.g. Memcached, Redis, Couchbase, APC(u), SQL and additional capabilities (e.g. transactions, stampede protection) built on top.
Stars: ✭ 279 (+342.86%)
Mutual labels:  caching, memcached
Hazelcast
Open-source distributed computation and storage platform
Stars: ✭ 4,662 (+7300%)
Mutual labels:  caching, in-memory
keyv
Simple key-value storage with support for multiple backends.
Stars: ✭ 202 (+220.63%)
Mutual labels:  caching, key-value
hazelcast-csharp-client
Hazelcast .NET Client
Stars: ✭ 98 (+55.56%)
Mutual labels:  caching, in-memory
Gokv
Simple key-value store abstraction and implementations for Go (Redis, Consul, etcd, bbolt, BadgerDB, LevelDB, Memcached, DynamoDB, S3, PostgreSQL, MongoDB, CockroachDB and many more)
Stars: ✭ 314 (+398.41%)
Mutual labels:  key-value, memcached

cucache

Fast PUT/GET/DELETE in-memory key-value store for lookaside caching.

Build Status

A mostly complete implementation the memcache text and binary protocols can be found inside cucache. The binary protocol has been tested using memcached-test, and the text protocol with simple test cases extracted from the protocol specification.

The implementation uses Cuckoo hashing along with several concurrency optimizations. The implementation uses much of the code from Dustin Sallings' gomemcached for the binary protocol.

Known limitations and outstanding things

  • Needs configurable debugging information output
  • The touch command is not implemented; see dustin/gomemcached#12
  • Protocol should be tested against mctest

Current implementation notes can be found in wip.md.

Want to use it?

Great! Please submit pull-requests and issues if you come across anything you think is wrong. Note that this is very much a WIP, and I give no guarantees about support.

Why another memcached?

Cuckoo hashing is cool, and fast. Go is cool, and fast. Maybe the two can outcompete the aging (though still very much relevant) memcached while keeping the code nice and readable. Furthermore, as the Go runtime improves over time, cucache might itself get faster automatically!

The hope is that fine-grained write locking and lock-free reading might speed up concurrent access significantly, and allow better scalability to many cores. While the traditional memcached wisdom of "just shard your data more" works well most of the time, there comes a point where you have some single key that is extremely hot, and then sharing simply won't help you. You need to be able to distribute that keys load across multiple cores. Although memcached does support multi-threaded execution, the fact that it locks during reads is a potential scaling bottleneck.

Experimental results

cucache is currently slightly slower than memcached in terms of over-the-network performance simply due to Go being slower than C for many operations: network socket operations have more overhead, system calls are slower, request and response marshalling is slower, and goroutine scheduling and GC incur additional runtime cost. In terms of pure performance (i.e. direct hash table operations), cuache is probably significantly faster than memcached already.

See benchmark/ for more in-depth performance evaluation.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].