哈希存储整理(基于共享内存的实现)一

本文介绍了基于共享内存实现的哈希存储功能,主要用于快速查找含有特定关键字的订单。通过两块共享内存,实现配置变更时的无干扰初始化,并通过改变内存块标志位指示查询进程使用最新数据。详细讲解了哈希函数设计和插入操作流程,包括冲突处理和关键字文件的读取。

最近做了哈希存储的功能,是基于共享内存实现的,主要的业务需求是:将多个订单内的关键字做成哈希,查找时通过关键字能将含有此关键字的订单准确的查找出来。

 我们用两块大的共享内存做哈希处理,当配置变更时,对其中一块内存做初始化,而不影响其他的查找进程;做完初始化之后,改变内存块的标志位,查询进程就会查询到更新的数据。

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_GOLDEN_RATIO	0x9e3779b9

typedef unsigned long ccache_u32;
typedef unsigned char ccache_u8;


static inline ccache_u32 ccache_jhash(const void *key, ccache_u32 leng
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值