算法
YangGangAVA
这个作者很懒,什么都没留下…
展开
-
C++连接池
这是我在使用redis做托管服务时用到的连接池,主要以封装hiredis的redisObj对象来作为连接对象的,为了保证连接存活,会定时检测空闲的连接对象是否可以正常工作(正在使用的默认正常),对于操作失败的会重新连接。 我在使用时使用一个单例redis连接池的,初始化后对外提供一个获取连接的方法,构造实例对象便可以获取一条连接,利用类的析构方式,不需要手动放回,在析构时调用放回的方法。#ifnd原创 2017-10-26 23:50:11 · 1721 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-10-hyperloglog(基数统计)
hyperloglog是redis用来做基数统计的算法,优点是在输入元素的数量或者体积非常大时,基数所需的空间是固定的,并且是很小的,在redis中,每个hyperloglog键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数;但是因为它智慧根据输入元素来计算基数,而不会储存输入元素本身,所以不能像集合那样,返回输入的各个元素。 它定义在hyperloglog.c中,因为对这个算法完原创 2017-10-29 13:48:37 · 579 阅读 · 0 评论 -
时间轮定时器-Timewheel
最近有个大牛给我教了时间轮算法,并且看了他实现的源码,认为自己已经理解了他所实现的思想,这里将我的代码和理解分享一下: 时间轮是模仿钟表的方式,秒针走一圈,分针走一格,只有最里圈的任务需要执行,转一圈后分针(外一层)指向下一格,将那一格的节点重新插入,那么就会插入到秒针(最里圈)。 以下方式还有一些不足,我会再做修改:#ifndef __TIMEWHEEL_H__#define __TIM原创 2017-10-21 23:38:57 · 3945 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-24-二进制位数组(Bitops.c)
Redis提供了SETBIT,GETBIT,BITCOUNT,BITOP四个命令用于处理二进制位数组。 例:SETBIT为位数组指定偏移量上的二进制位设置值,偏移量从0开始计数; GETBIT获取位数组指定偏移量上的二进制位值; BITCOUNT统计位数组中,值为1的二进制位的数量; BITOP可以对多个位数组进行按位与,或,异或运算。 命令 结果 SETBIT bit 0 1原创 2017-12-16 23:28:48 · 902 阅读 · 0 评论