24 releases (7 breaking)

0.7.1 Apr 20, 2018
0.7.0 Feb 22, 2018
0.6.0 Dec 5, 2017
0.5.0 Nov 22, 2017
0.0.4 Nov 21, 2014

#6 in Hardware support

Download history 41/week @ 2018-05-24 129/week @ 2018-05-31 1/week @ 2018-06-07 113/week @ 2018-06-14 29/week @ 2018-06-21 299/week @ 2018-06-28 62/week @ 2018-07-05 25/week @ 2018-07-12 76/week @ 2018-07-19 1/week @ 2018-07-26 108/week @ 2018-08-02 401/week @ 2018-08-09 63/week @ 2018-08-16

603 downloads per month
Used in 1 crate

MIT license

47KB
1K SLoC

rust-memcache

Build Status Coverage Status Crates.io MIT licensed Docs

rust-memcache is a Memcached client written in pure rust.

Install

The crate is called memcache and you can depend on it via cargo:

[dependencies]
memcache = "*"

Features

  • Binary protocal
  • TCP connection
  • UDP connection
  • UNIX Domain socket connection
  • Automatically compress
  • Automatically serialize to JSON / msgpack etc.
  • Typed interface
  • Mutiple server support with custom key hash algorithm

Basic usage

// create connection with to memcached server node:
let mut client = memcache::Client::new("memcache://127.0.0.1:12345").unwrap();

// flush the database
client.flush().unwrap();

// set a string value
client.set("foo", "bar", 0).unwrap();

// retrieve from memcached:
let value: Option<String> = client.get("foo").unwrap();
assert_eq!(value, Some(String::from("bar")));
assert_eq!(value.unwrap(), "bar");

// prepend, append:
client.prepend("foo", "foo").unwrap();
client.append("foo", "baz").unwrap();
let value: String = client.get("foo").unwrap().unwrap();
assert_eq!(value, "foobarbaz");

// delete value:
client.delete("foo").unwrap();

// using counter:
client.set("counter", 40, 0).unwrap();
client.increment("counter", 2).unwrap();
let answer: i32 = client.get("counter").unwrap().unwrap();
assert_eq!(answer, 42);

Custom key hash function

If you have multiple memcached server, you can create the memcache::Client struct with a vector of urls of them. Which server will be used to store and retrive is based on what the key is.

This library have a basic rule to do this with rust's builtin hash function, and also you can use your custom function to do this, for something like you can using a have more data on one server which have more memory quota, or cluster keys with their prefix, or using consitent hash for large memcached cluster.

let mut client = memcache::Client::new(vec!["memcache://127.0.0.1:12345", "memcache:///tmp/memcached.sock"]).unwrap();
client.hash_function = |key: &str| -> u64 {
    // your custom hashing function here
    return 1;
};

License

MIT

Dependencies

~5.5MB
~149K SLoC