----------Redis
文章平均质量分 73
mfcheer
他不停地跑啊跑 就为了追上那个曾经被寄予厚望的自己
展开
-
SWAR算法:计算Hamming Weight
统计数组里面非0二进制位的数目: 比如a[] = {1,0,1,0,0,1,1,0}统计非0数目为4。Hamming Weight,即汉明重量,指的是一个位数组中非0二进制位的数量。比较常规的方法,按位统计,算法复杂度O(n)。redis里实现用到了两种算法:1.查表法 比如 0000 0001 : 1 0110 0001 : 3原创 2016-09-09 22:40:50 · 1308 阅读 · 0 评论 -
Redis内存回收:LRU算法
LRU算法(最近最久未使用算法)LRU算法作为内存管理的一种有效算法,其含义是在内存有限的情况下,当内存容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间,那么选择淘汰哪些对象呢?LRU算法就提供了一种策略,告诉我们选择最近一段时间内,最久未使用的对象将其淘汰,至于为什么要选择最久未使用的,可以想想,最近一段时间内使用的东西,我们是不是可能一会又要用到呢~,而很原创 2015-11-23 19:01:25 · 544 阅读 · 0 评论 -
RDB和AOF持久化
RDB持久化直接保存数据库的键值对。是二进制文件存储。指定的时间间隔内生成数据集的时间点快照两个命令:1 SAVE 会阻塞进程 2 BGSAVE 创建子进程处理文件,不会阻塞。父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面原创 2016-09-17 23:52:14 · 534 阅读 · 0 评论 -
Redis主从同步
全量同步Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 1)从服务器连接主服务器,发送SYNC命令; 2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的原创 2016-01-21 12:23:48 · 618 阅读 · 0 评论 -
内存分配函数(C语言)
C 标准函数库提供了许多函数来实现对堆上内存管理 malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化) free函数:释放内存,防止内存泄露 calloc函数:与 malloc类似,但不需要初始化 realloc函数:重新分配内存头文件stdlib.hmallocmalloc函数可以从堆上获得指定字节的内存空间,其函数原型如下:void * malloc(int原创 2016-09-18 02:10:47 · 4077 阅读 · 0 评论 -
跳跃表 SkipList【数据结构】原理及实现
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的效率原创 2016-09-06 22:35:07 · 9335 阅读 · 1 评论