Cachegrand Versions Save

cachegrand - a modern data ingestion, processing and serving platform built for today's hardware

v0.4.0

11 months ago

πŸš€ cachegrand v0.4.0: Implement Authentication Support, Improved Logging, New Commands, redis-benchmark support and More!

We are thrilled to announce the release of cachegrand v0.4.0, featuring a wide array of improvements and bugfixes!

✨ Here's a quick rundown of what's new in v0.4.0:

  • Redis Authentication: Now cachegrand supports the Redis authentication mechanism, both via the AUTH and HELLO commands, supporting as well the default username if no username is provided.
  • Syslog Sink Implementation: A new sink for syslog has been added, improving the logging capabilities of cachegrand.
  • TTL Enforcement: it's now possible to enfroce the TTL (Time To Live) of the data, ensuring that data doesn't live forever in the cache.
  • New commands: the PING over the inline protocolo and the CONFIG GET commands has been implemented, the latter provides default values for the most of the settings as they are Redis specific
  • Redis Benchmark Support: cachegrand now supports Redis-benchmark for performance testing, including the ping, get, set, incr, and mset tests. This allows you to evaluate the performance of your Redis server with standard benchmarks, ensuring the optimal configuration for your needs. Use the command redis-benchmark -t ping,get,set,incr,mset to run the benchmarks.
  • Command Disable Feature: The new feature that allows commands to be disabled gives more control over the server's behavior.
  • Fix for Hashtable Locking: Hashtable locking issues have been fixed, improving the stability and reliability of the system.
  • Reduced Aggressiveness of Key Eviction: The aggressiveness of the keys eviction fiber has been reduced, making the system more responsive.

πŸ”— Visit our website https://cachegrand.io/ and GitHub repository https://github.com/danielealbano/cachegrand for more information.

🎯 To try it out

docker run \
    -it \
    --pull=always \
    --ulimit memlock=-1:-1 \
    --ulimit nofile=262144:262144 \
    -p 6379:6379 \
    -p 6380:6380 \
    -p 9090:9090 \
    --rm \
    cachegrand/cachegrand-server:latest

Happy caching! πŸŽ‰

v0.3.0

11 months ago

πŸš€ cachegrand v0.3.0: Multi database support, New Commands, Performance Enhancements, and More!

We are excited to announce the release of cachegrand v0.3.0, we have introduced several new features and performance improvements!

✨ Here's a quick rundown of what's new in v0.3.0:

  • Monotonic clock fixed for modern Intel CPUs: an optimization implemented in v0.2.1 to improve the performances of the monotonic clock introduced a bug which was causing it to malfunction on recent Intel CPUs.
  • Multi-database support: You can now utilize multiple databases within cachegrand, providing even more flexibility for your data management needs.
  • Configurable database limit: Define the maximum number of databases allowed via the config file, giving you greater control over your caching setup.
  • Support for SELECT and ECHO command: Enhancing the Redis-compatible interface with the addition of these essential commands.
  • kTLS improvements: We've fixed kTLS compatibility issues on Docker, Podman, Kubernetes, and other container platforms. Additionally, kTLS can now be enabled or disabled at runtime for greater flexibility.
  • Improved TLS CA loading: We've enhanced the process of loading TLS Certificate Authorities for better security and ease of use.
  • Initial module support: The introduction of initial module support lays the foundation for future expansions and integration with other tools.
  • Buffering for snapshot generation: We've implemented buffering, which significantly improves the efficiency and performance of snapshot generation.
  • Disable logging to a file in the example config file: To simplify the initial setup process, we've disabled logging to a file by default in the example config file.
  • Various bug fixes: We're continuously working to make cachegrand more stable and reliable, and this update includes numerous bug fixes to ensure a smooth user experience.

πŸ”— Visit our website https://cachegrand.io/ and GitHub repository https://github.com/danielealbano/cachegrand for more information.

🎯 To try it out

docker run \
    -it \
    --pull=always \
    --ulimit memlock=-1:-1 \
    --ulimit nofile=262144:262144 \
    -p 6379:6379 \
    -p 6380:6380 \
    -p 9090:9090 \
    --rm \
    cachegrand/cachegrand-server:latest

Happy caching! πŸŽ‰

v0.2.1

1 year ago

πŸš€ cachegrand v0.2.1: New Commands, Snapshot Save at Shutdown, Performance Enhancements, and More!

We are excited to announce the release of cachegrand v0.2.1, we have introduced several new features and performance improvements!

✨ Here's a quick rundown of what's new in v0.2.1:

  • Support for BGSAVE and SAVE Redis commands, this update brings support for the BGSAVE and SAVE commands, allowing you to save the dataset to disk with ease.
  • Support for SHUTDOWN SAVE and SHUTDOWN NOSAVE Redis commands, you can now safely shut down your cachegrand instance with or without saving the dataset to disk using the SHUTDOWN SAVE and SHUTDOWN NOSAVE commands.
  • Saving snapshot (RDB) at shutdown, you can now configure the saving of a snapshot at shutdown via the database.snapshots.snapshot_at_shutdown setting, providing additional flexibility and control.
  • Improved database limits checking, we've made enhancements to the database limits checking, ensuring a smoother and more efficient experience for users.
  • Enhanced FFMA handling of realloc operations, the Fast-Forward Memory Allocator (FFMA) has been improved to handle realloc operations more effectively.
  • Fixed memory leak issues, in this release, we've addressed a memory leak issue that occurred when freeing or replacing values, ensuring optimal performance and better control over memory consumption.
  • io_uring ring registration, with a kernel version 5.19 or more recent, cachegrand can now register the io_uring ring, enabling even better performance.
  • Prometheus enabled by default, we've made it easier than ever to monitor your cachegrand instance by enabling Prometheus by default in the skel config file and in the Docker image.
  • Updated Performance Tips, to help you get the most out of cachegrand, we have updated our performance tips, ensuring you can maximize the speed and efficiency of your Key-Value store.

With these new features and improvements, cachegrand continues to push the boundaries of Key-Value store performance. We are committed to making cachegrand the go-to solution for developers and organizations seeking the fastest and most efficient Key-Value store available.

cachegrand can now do its first steps in production environments as the new release now allows to to load and save (RDB) snapshots, save them on demand, on a schedule, on shutdown and via the SHUTDOWN SAVE (SHUTDOWN NOSAVE to skip the dump at the shutdown)!

We have also started a new repository called (cachegrand-benchmarks)[https://github.com/cachegrand/cachegrand-benchmarks] to track cachegrand's performance compared to the main competitors, it contains the raw data and a number of scripts to generate them.

Here an overview of the performance of cachegrand compared to the main competitors on the market cachegrand's performance

πŸ”— Visit our website https://cachegrand.io/ and GitHub repository https://github.com/danielealbano/cachegrand for more information.

Also, don't miss out on the opportunity of joining the beta testing for a Cache-as-a-Service platform based on top of cachegrand, visit https://cachegrand.io/cache-as-a-service for more information.

🎯 To try it out

docker run \
    -it \
    --pull=always \
    --ulimit memlock=-1:-1 \
    --ulimit nofile=262144:262144 \
    -p 6379:6379 \
    -p 6380:6380 \
    --rm \
    cachegrand/cachegrand-server:latest

Happy caching! πŸŽ‰

v0.2.0

1 year ago

πŸš€ cachegrand v0.2.0: Featuring RDB Load/Save, Eviction Policies, Performance Enhancements, and More!

We're excited to announce the release of cachegrand v0.2.0, packed with new features, optimizations, and improvements to elevate your data storage experience. Here's what's new in this release:

✨ New Features:

  • RDB Load/Save support: Exchange data with Redis or other Redis-like platforms (currently supporting strings only)
  • Keys Eviction: Configurable limits and policies with default hard limit at 75% usable memory and soft limit at 70%
  • Auto-tuning keys eviction aggressiveness based on soft and hard limits
  • Clock Performance Improvements: Switched to TSC for most time-related operations
  • Optimized Hashtable: Efficiently identifies and skips empty sections to save cycles and avoid unnecessary data scanning
  • io_uring Cooperative Taskrun and Single Issuer Support: Boosts performance (5.19 kernel required for Taskrun; 6.0 kernel required for Single Issuer)
  • FFMA Support without Hugepages: Rewritten and optimized, outperforming other memory allocators in most cases under low and high concurrency

πŸ”— Visit our website https://cachegrand.io/ and GitHub repository https://github.com/danielealbano/cachegrand for more information.

Also, don't miss out on the opportunity of joining the beta testing for a Cache-as-a-Service platform based on top of cachegrand, visit https://cachegrand.io/cache-as-a-service for more information.

🎯 To try it out

docker run \
    -it \
    --pull=always \
    --ulimit memlock=-1:-1 \
    --ulimit nofile=262144:262144 \
    -p 6379:6379 \
    -p 6380:6380 \
    --rm \
    cachegrand/cachegrand-server:latest

πŸ“‹ Below the list of supported Redis commands

Command Notes
βœ” APPEND
βœ” COPY Missing DB parameter
βœ” DBSIZE
βœ” DECR
βœ” DECRBY
βœ” DEL
βœ” EXISTS
βœ” EXPIRE
βœ” EXPIREAT
βœ” EXPIRETIME
βœ” FLUSHDB Missing ASYNC parameter
βœ” GET
βœ” GETDEL
βœ” GETEX
βœ” GETRANGE
βœ” GETSET
βœ” HELLO Missing AUTH and SETNAME parameters
βœ” INCR
βœ” INCRBY
βœ” INCRBYFLOAT
βœ” KEYS
βœ” LCS Missing IDX, MINMATCHLEN and WITHMATCHLEN parameters
βœ” MGET
βœ” MSET
βœ” MSETNX
βœ” PERSIST
βœ” PEXPIRE
βœ” PEXPIREAT
βœ” PEXPIRETIME
βœ” PING
βœ” PSETEX
βœ” PTTL
βœ” QUIT
βœ” RANDOMKEY
βœ” RENAME
βœ” RENAMENX
βœ” SCAN Missing TYPE parameter
βœ” SET
βœ” SETEX
βœ” SETNX
βœ” SETRANGE
βœ” SHUTDOWN
βœ” STRLEN
βœ” SUBSTR
βœ” TOUCH
βœ” TTL
βœ” UNLINK

We appreciate your feedback and questions in the comments below. Thank you for trying cachegrand v0.2.0, and happy coding! πŸŽ‰

v0.1.5

1 year ago

It has been a while from the last release, this new version includes quite a number of minor bugfixes, general improvements and, most importantly, ARMv8 64bit support.

Now cachegrand can run on ARMv8 hardware when running a 64bit operating system, both the hashtable and the fiber library have been optimized to take advantage of the ARM instruction set.

The release actually contains also the initial implementation of the new hashtable although this hasn't been integrated in cachegrand yet.

The docker image has been updated to include the ARMv8 64bit build.

Below the full list of commands implemented

Command Notes
βœ” APPEND
βœ” COPY Missing DB parameter
βœ” DBSIZE
βœ” DECR
βœ” DECRBY
βœ” DEL
βœ” EXISTS
βœ” EXPIRE
βœ” EXPIREAT
βœ” EXPIRETIME
βœ” FLUSHDB Missing ASYNC parameter
βœ” GET
βœ” GETDEL
βœ” GETEX
βœ” GETRANGE
βœ” GETSET
βœ” HELLO Missing AUTH and SETNAME parameters
βœ” INCR
βœ” INCRBY
βœ” INCRBYFLOAT
βœ” KEYS
βœ” LCS Missing IDX, MINMATCHLEN and WITHMATCHLEN parameters
βœ” MGET
βœ” MSET
βœ” MSETNX
βœ” PERSIST
βœ” PEXPIRE
βœ” PEXPIREAT
βœ” PEXPIRETIME
βœ” PING
βœ” PSETEX
βœ” PTTL
βœ” QUIT
βœ” RANDOMKEY
βœ” RENAME
βœ” RENAMENX
βœ” SCAN Missing TYPE parameter
βœ” SET
βœ” SETEX
βœ” SETNX
βœ” SETRANGE
βœ” SHUTDOWN
βœ” STRLEN
βœ” SUBSTR
βœ” TOUCH
βœ” TTL
βœ” UNLINK

What's Changed (most relevant PRs)

New Contributors

Full Changelog: https://github.com/danielealbano/cachegrand/compare/v0.1.4...v0.1.5

v0.1.4

1 year ago

This v0.1.4 add quite a few new commands and general improvements, most notably the memory consumption has been optimized pairing cachegrand slab allocator (now renamed FFMA or Fast Fixed Memory Allocator) with Microsoft's mimalloc allocator, which performs really better than tcmalloc and jemalloc and almost as well as FFMA without the downside of requiring extra memory.

Below the full list of commands implemented

Command Notes
βœ” APPEND
βœ” COPY Missing DB parameter
βœ” DBSIZE
βœ” DECR
βœ” DECRBY
βœ” DEL
βœ” EXISTS
βœ” EXPIRE
βœ” EXPIREAT
βœ” EXPIRETIME
βœ” FLUSHDB Missing ASYNC parameter
βœ” GET
βœ” GETDEL
βœ” GETEX
βœ” GETRANGE
βœ” GETSET
βœ” HELLO Missing AUTH and SETNAME parameters
βœ” INCR
βœ” INCRBY
βœ” INCRBYFLOAT
βœ” KEYS
βœ” LCS Missing IDX, MINMATCHLEN and WITHMATCHLEN parameters
βœ” MGET
βœ” MSET
βœ” MSETNX
βœ” PERSIST
βœ” PEXPIRE
βœ” PEXPIREAT
βœ” PEXPIRETIME
βœ” PING
βœ” PSETEX
βœ” PTTL
βœ” QUIT
βœ” RANDOMKEY
βœ” RENAME
βœ” RENAMENX
βœ” SCAN Missing TYPE parameter
βœ” SET
βœ” SETEX
βœ” SETNX
βœ” SETRANGE
βœ” SHUTDOWN
βœ” STRLEN
βœ” SUBSTR
βœ” TOUCH
βœ” TTL
βœ” UNLINK

Notes: To improve the memory consumption the memory allocator used in some parts of cachegrand was switched from FFMA to mimalloc, this has caused a performance regression which will be addressed in a future release.

What's Changed

Full Changelog: https://github.com/danielealbano/cachegrand/compare/v0.1.3...v0.1.4

v0.1.3

1 year ago

This new release introduces a number of improvements and bug fixes, most notabily fixes how io_uring short sends are handled which, in some edge cases, was causing local connection to receive partial data for values of >2.5MB.

The release also includes the new automated parser, which will drammatically speed up the support for the new commands, support for Read-Modify-Write operations in the Storage DB, full support for the SET command, some bugfixes and some general performance improvements.

What's Changed

Full Changelog: https://github.com/danielealbano/cachegrand/compare/v0.1.2...v0.1.3

v0.1.2

1 year ago

This latest release includes a number of general improvements, like the TLS support, the MGET command and the pipelining support, and a number of fixes, including a corner case in the redis protocol parser that was showing up only when using pipelining.

Main changes

Full Changelog: https://github.com/danielealbano/cachegrand/compare/v0.1.1...v0.1.2

v0.1.1

1 year ago

This new release includes supports prometheus (more details here https://github.com/danielealbano/cachegrand/blob/main/docs/architecture/modules/prometheus.md ) to allows easy monitoring and metrics collections for benchmarking and a few minor fixes

What's Changed

New Contributors

Full Changelog: https://github.com/danielealbano/cachegrand/compare/v0.1.0...v0.1.1

v0.1.0

1 year ago

Finally after an extensive amount of research, development and benchmarks, I am proud to release the v0.1.0 version of cahegrand!

This release has a pretty limited Redis compatibility, don’t expect to be able to run it with clients using anything more than the basic commands, and surely a few bugs sneaked through the testing process, but architecturally-wise the most is in-place allowing the platform to scale-up vertically almost linearly!

Notes:

  • As mentioned, the Redis compatibility is limited, a basic set of redis commands is supported (HELLO, PING, GET, SET, DEL, QUIT, SHUTDOWN)
  • The in-memory storage engine is fully functional, meanwhile the on-disk storage engine is a PoC and is missing major optimizations
  • The modular architecture allows you to implement your own modules (caching or not) taking advantage of the functionalities provided by cachegrand
  • The file I/O interface and the network I/O interface are currently supporting only io_uring and require a kernel 5.8 or newer, they are mostly ready to be expanded to support XDP/DPDK and SPDK
  • Currently the hashtable doesn’t automatically expand if needed, the amount of allowed keys is defined in the configuration, there is also no control on the amount of usable memory
  • To get better performances it’s better to setup hugepages and enable the slab allocator as the difference is notable
  • Pipeline is underperforming as each response is sent sequentially instead of being squashed together

If you decide to benchmark it, please keep in mind that you need to (a) enable the slab allocator and provide enough hugepages, (b) better to test it over the cable and not on localhost and (c) leave some cpu power for the kernel to process the network data otherwise the operating system will not be able to handle the incoming packets.

If you get a crash please enable sentry.io in the configuration and try to replicate the crash, a crash dump will be automatically uploaded and will be available for investigation, although please be aware that it might contain information from the memory used by the process.

Full Changelog: https://github.com/danielealbano/cachegrand/commits/v0.1.0