https://github.com/malwarebo/memcachex
Implementation of libmemached.
https://github.com/malwarebo/memcachex
cpp libmemcached memcached
Last synced: 12 months ago
JSON representation
Implementation of libmemached.
- Host: GitHub
- URL: https://github.com/malwarebo/memcachex
- Owner: malwarebo
- Created: 2023-08-16T09:58:26.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-04-01T10:27:15.000Z (about 1 year ago)
- Last Synced: 2025-04-01T11:29:42.537Z (about 1 year ago)
- Topics: cpp, libmemcached, memcached
- Language: C++
- Homepage:
- Size: 1.33 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# memcachex
A C++ wrapper library for memcached using the libmemcached library.
## Overview
memcachex provides a simple, modern C++ interface to interact with memcached servers. It uses libmemcached under the hood and offers a cleanerAPI for common memcached operations.
## Requirements
- C++11 compatible compiler
- CMake 3.29.3 or higher
- libmemcached 1.0.18 or higher
- macOS (tested on arm64 architecture) or Linux
## Building
### macOS (with Homebrew)
1. Install the dependencies:
```bash
brew install cmake libmemcached
```
2. Create a build directory, configure the project, and compile:
```bash
mkdir -p build && cd build
cmake ..
make
```
## Example Usage
```cpp
#include "MemcachedClient.h"
#include
int main() {
// Initialize client with default server (localhost:11211)
memcachex::MemcachedClient client;
// Or with specific server config
memcachex::ServerConfig config;
config.host = "localhost";
config.port = 11211;
memcachex::MemcachedClient client2(config);
// Set a value
if (client.set("my_key", "my_value")) {
std::cout << "Successfully set key" << std::endl;
}
// Get a value
std::string value = client.get("my_key");
if (!value.empty()) {
std::cout << "Retrieved value: " << value << std::endl;
}
// Delete a key
if (client.remove("my_key")) {
std::cout << "Successfully deleted key" << std::endl;
}
return 0;
}
```
## Constructor Options
The `MemcachedClient` class provides the following constructors:
```cpp
// Default constructor - no servers configured
MemcachedClient();
// Constructor with a single server config
MemcachedClient(const ServerConfig& config);
// Constructor with multiple server configs
MemcachedClient(const std::vector& configs);
```
The `ServerConfig` struct allows you to specify server details:
```cpp
struct ServerConfig {
std::string host = "localhost";
uint16_t port = 11211;
uint32_t weight = 1;
};
```
## Methods
### Basic Operations
- `bool set(const std::string& key, const std::string& value, time_t expiration = 0)`: Store a value with the given key
- `std::string get(const std::string& key)`: Retrieve a value for the given key
- `bool remove(const std::string& key, time_t expiration = 0)`: Delete a key-value pair
### Additional Operations
- `bool add(const std::string& key, const std::string& value, time_t expiration = 0)`: Add a new key-value only if it doesn't exist
- `bool replace(const std::string& key, const std::string& value, time_t expiration = 0)`: Replace existing key-value
- `bool append(const std::string& key, const std::string& value)`: Append to an existing value
- `bool prepend(const std::string& key, const std::string& value)`: Prepend to an existing value
- `uint64_t increment(const std::string& key, uint32_t offset = 1)`: Increment numeric value
### Error Handling
- `std::string getLastErrorMessage() const`: Get the last error message
- `memcached_return_t getLastReturnCode() const`: Get the last return code
- `void throwIfError(memcached_return_t rc, const std::string& operation) const`: Throw a MemcachedError exception if operation failed
## Exception Handling
The library provides a `MemcachedError` exception class that can be caught to handle errors:
```cpp
try {
client.throwIfError(rc, "operation");
} catch (const memcachex::MemcachedError& e) {
std::cerr << e.what() << std::endl;
auto code = e.getReturnCode(); // Get the return code
}
```