tango.net.util.MemCache

License:
BSD style:

Version:
Mar 2005: Initial release

author:
Kris

class MemCache: core.thread.Thread;


this(const(char[])[] hosts, uint watchdog = cast(uint)3);


final void close();


final bool set(const(void)[][] key, const(void)[][] value, int flags = 0, int timeout = 0);
Store the key and value

final bool add(const(void)[][] key, const(void)[][] value, int flags = 0, int timeout = 0);
Store the value if key does not already exist

final bool replace(const(void)[][] key, const(void)[][] value, int flags = 0, int timeout = 0);
Store the value only if key exists

final bool remove(const(void)[][] key, int timeout = 0);
Remove the specified key and make key "invalid" for the duration of timeout, causing add(), get() and remove() on the same key to fail within that period

final bool get(const(void)[][] key, Buffer buffer);
VALUE \r\n \r\n

final bool incr(const(void)[][] key, uint value);


final bool decr(const(void)[][] key, uint value);


final bool incr(const(void)[][] key, uint value, ref uint result);


final bool decr(const(void)[][] key, uint value, ref uint result);


final void status(void delegate(const(char)[], const(char[])[] list) dg);


final Buffer buffer(uint size);


final void setHosts(const(char[])[] hosts);


class Buffer;


bool expand(size_t size);


void[] set(size_t size);


void[] get();


static final uint jhash(const(void)[][] x, uint c = 0);
jhash() -- hash a variable-length key into a 32-bit value

k : the key (the unaligned variable-length array of bytes) len : the length of the key, counting by bytes level : can be any 4-byte value

Returns a 32-bit value. Every bit of the key affects every bit of the return value. Every 1-bit and 2-bit delta achieves avalanche.

About 4.3*len + 80 X86 instructions, with excellent pipelining

The best hash table sizes are powers of 2. There is no need to do mod a prime (mod is sooo slow!). If you need less than 32 bits, use a bitmask. For example, if you need only 10 bits, do

h = (h & hashmask(10));

In which case, the hash table should have hashsize(10) elements. If you are hashing n strings (ub1 **)k, do it like this:

for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);

By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this code any way you wish, private, educational, or commercial. It's free.

See http://burlteburtle.net/bob/hash/evahash.html Use for hash table lookup, or anything where one collision in 2^32 is acceptable. Do NOT use for cryptographic purposes.


Page generated by Ddoc. Copyright (c) 2005 Kris Bell. All rights reserved