0%

linux socket编程中经常用到各种类型的地址, 最近在一些开源代码中经常见到, 它们是进行socket编程的基础, 本文对常见的地址结构进行简单整理, 并在附录中对某些函数给出了helloworld式的测试代码, 方便查询.

阅读全文 »

最近在开源代码中遇到MySQL-Proxy, 其允许lua脚本实现用户的个性化配置, lua脚本可以引用C/C++的动态链接库完成一些复杂的功能. 本文对最近接触到的lua和C/C++混合的相关接口使用做个总结. 本文的完整代码在文末的附录中, 代码测试在Ubuntu16.04+lua5.1下完成, 不同版本可能API有所变化, 可以参考文末给出的官方文档链接.

阅读全文 »

本文对最近接触到Hbase相关的资料做个简单整理, 主要包含了数据模型, 底层存储结构, 以及分布式模型.Hbase是Google发表的论文Bigtable的开源实现, 文中对于BigTable和Hbase中的对应的名词在不引起歧义的情况下可能混合使用, 不做区分.

阅读全文 »

Cryptdb是MIT的开源数据库加密层, 其实现了数据加密操作, 代码在Ubuntu12.04上进行过测试. 但是12.04对于现在来说太老了, 在Ubuntu16.04系统上直接使用脚本安装会出现各种问题, 网上现有的参考资料也比较少. 本文基于对其安装脚本的分析, 给出了Ubuntu16.04上安装的分解步骤.该方法在Ubuntu16.04上测试通过.

阅读全文 »

摘要

在Redis的Bio代码中, 需要使用for循环创建两个服务线程, 并且把两个整数0 1作为参数传到线程执行的函数中. 这个问题涉及到在linux c中, 用for循环创建多个线程并传参数时会遇到的数据竞争问题. 本文给出该问题的分析, 几段相关的错误代码的分析, 并结合redis的BIO模块代码给出总结.

阅读全文 »

Redis通过bio系统完成两件事,一是进行Aof持久化,也就是将写入到系统的page cache的数据fsync到磁盘中;二是关闭文件。为了完成这件任务,其采用了任务队列的方式,每个任务都是一个线程来完成,任务会被放到任务队列中,然后由执行任务线程取走,如果队列空,则阻塞等待,如果队列里有任务,就通知工作线程,这通过条件变量来实现。后面以任务初始化,任务放入队列,任务出队列三个方面进行介绍,并且以aof持久化为例说明其在系统中的使用方式,本文基于redis的3.2.3版本代码。

阅读全文 »

本文以linux c为例子, 介绍锁和共享变量的基本使用方法, 并介绍一个基于条件变量实现生产者消费者模型的例子, 然后在文末给出相关书籍的参考.

阅读全文 »

本文讲述了Redis集群搭建的基本方法, 然后给出一个使用一键配置的脚本搭建Redis集群的方法,本文编写时Redis处于3.2.4版本.

阅读全文 »