Redis-整数集合
在 Redis 中,如果有用过它的 set 集合,底层的实现整数集合。整数集合,就是只能包括整数值的元素,我们试着创建一个整数集合 它的结构很简单,具体的源码在 src/intset.h 文件中 typedef struct intset { uint32_t encoding; // 编码类型 uint32_t length; // 元素数量 int8_t ...
Redis-跳跃表
有一种查询效率特别高的有序的数据结构,跳跃表(SkipList),这种结构,在Redis和levelDB中,都有用到。其实是在有序链表的基础上进行扩展,丰富了在链表中查找制定值,需要 O(N)的时间复杂度的问题,它在查询时,能做到最快 O(1),平均 O(logN),最坏 O(N)的复杂度。 一般,要求查询效率高的结构,都会想到平衡树,但是树比跳跃表更复杂,但是效率,未必有跳跃表高。许多时候...
详解Laravel中的依赖注入和IoC
作为开发者,我们一直在尝试通过使用设计模式和尝试新的健壮型框架来寻找新的方式来编写设计良好且健壮的代码。在本篇文章中,我们将通过 Laravel 的 IoC 组件探索依赖注入设计模式,并了解它如何改进我们的设计。 依赖注入依赖注入一词是由 Martin Fowler 提出的术语,它是将组件注入到应用程序中的一种行为。就像 Ward Cunningham 说的: 依赖注入是敏捷架构中关键元素...
Redis-链表
链表是一种基本的数据结构,它是由一系列的节点组成,每个节点上都包括有两部分数据:一个是存储数据元素的数据域,一个是存储下一个节点地址的指针域。新增节点时,可以做到O(1)的复杂度。链表一般分为:单向链表、双向链表、循环链表。Redis 的链表,属于双向链表。 链表中节点结构体在文件 src/adlist.h 如下: typedef struct listNode { struct l...
Redis-SDS的实现
Redis 的作者 antirez 在前些日子,通过博客文章《 The first release candidate of Redis 4.0 is out 》发布了 redis 4.0 版本。在网上看到了一些文章,对于4.0新特性的介绍: Lazyfree,之前的版本,在对一个较大的key执行删除时,会造成 redis-server 阻塞,现在可以使用 UNLINK 异步删除, FLU...
PHP序列化的漏洞
0.前言对象的序列化和反序列化作用就不再赘述,php中序列化的结果是一个php自定义的字符串格式,有点类似json. 我们在任何语言中设计对象的序列化和反序列化都需要解决几个问题 把某个对象序列化之后,序列化的结果有自描述的功能(从序列化的结果中知道这个对象的具体类型,知道类型还不够,当然还需要知道这个类型所对应具体的值). 时间性能问题:在某些性能敏感的场景下,对象序列化就不能拖后腿,例如...
PHP的魔术方法:__clone()
最近在写代码的时候,碰到需要copy对象,在 php.net 看到这段话: $copy_of_object = clone $object; 当对象被复制后,PHP 5 会对对象的所有属性执行一个浅复制(shallow copy)。所有的引用属性 仍然会是一个指向原来的变量的引用。 赋值在PHP中, 对象间的赋值操作实际上是引用操作 (事实上,绝大部分的编程语言都是如此! 主要原因是内存及...
Hello World