基于C语言的hash table实现进程内缓存

新浪微博 QQ空间 腾讯微博

最近遇到一个问题需要做本地缓存,首先想到就是hash表。如果是java,太easy了。C语言就是需要不停的造轮子,实在不想写这个面试题样的东西了,求助于万能的Google了。找到一个不错的hashtable开源实现:http://troydhanson.github.io/uthash/,BSD的许可,赞。也找到了一篇文章介绍详细的用法:http://blog.csdn.net/hongqun/article/details/6103275

 

这里说一下做本地cache的思路,以字符串作key,需要缓存的内容封装在新的结构里面,在新的结构里面封装一个时间字段,在放入缓存表时将当前时间存入该字段,同时加入uthash要求的成员,这样就可以调用add/del/get接口来进行缓存操作了。

设置hash表的最大值,在add时,检查是否达到hash表的最大值,如果达到则删除一批数据。遍历时是按照时间先后顺序来的,因此最先遍历到的是最老的数据,删除掉的一批数据是最老的。查找时,传入key值,命中,则取出内容后,先根据时间字段判断是否过期,如果过期,则从持久层重新读取数据,并重新覆盖到缓存中;查找结果为空,则到持久层读取,将读取结果加入缓存中。这样一个简易的本地缓存管理就实现了。新生成缓存节点和删除缓存节点时需要涉及堆内存的操作,如果再作一个内存管理,那么这个缓存就可以应用到生产环境了。

新浪微博 QQ空间 腾讯微博

| 1 分2 分3 分4 分5 分 (5.00- 9票)
Loading ... Loading ... | 这篇文章归档在:C/C++, 算法数据结构, 语言基础
| 标签: , , . | 永久链接:链接 | 评论(0) |

评论

邮箱地址不会被泄露, 标记为 * 的项目必填。

8 - 2 = *



You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <img alt="" src="" class=""> <pre class=""> <q cite=""> <s> <strike> <strong>

返回顶部