最近做了哈希存储的功能,是基于共享内存实现的,主要的业务需求是:将多个订单内的关键字做成哈希,查找时通过关键字能将含有此关键字的订单准确的查找出来。
我们用两块大的共享内存做哈希处理,当配置变更时,对其中一块内存做初始化,而不影响其他的查找进程;做完初始化之后,改变内存块的标志位,查询进程就会查询到更新的数据。
1、哈希函数
Demo:
#include <stdio.h>
#include <string.h>
/* NOTE: Arguments are modified. */
#define ccache_jhash_mix(a, b, c) \
{ \
a -= b; a -= c; a ^= (c>>13); \
b -= c; b -= a; b ^= (a<<8); \
c -= a; c -= b; c ^= (b>>13); \
a -= b; a -= c; a ^= (c>>12); \
b -= c; b -= a; b ^= (a<<16); \
c -= a; c -= b; c ^= (b>>5); \
a -= b; a -= c; a ^= (c>>3); \
b -= c; b -= a; b ^= (a<<10); \
c -= a; c -= b; c ^= (b>>15); \
}
/* The golden ration: an arbitrary value */
#define CCACHE_JHASH_GO