数据库键空间
Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redisDb结构表示,其中,redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典成为键空间(key space)
Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redisDb结构表示,其中,redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典成为键空间(key space)
压缩列表(ziplist)是列表键和哈希键的底层实现之一
当一个列表只包含少量列表项,并且每个列表项要么是小整数值,要么就是长度比较短的字符串,那么Redis会使用压缩列表来做列表键的底层实现
例如:
跳跃表通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.
跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点
在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡术要来的更为简单,所以有不少程序都使用跳跃表来代替平衡树
条件队列就像烤面包机中通知"面包已烤好"的铃声.如果注意听着铃声,那么当面包烤好后可以立刻得到通知,开始吃面包.如果没有听见铃声,那么会错过消息通知,但回到厨房时还可以观察烤面包机的状态,如果已经烤好,就取出面包;没有烤好就再次留意铃声
在基于AQS构建的同步器类中,最基本的操作包括各种形式的获取操作和释放操作.
获取操作是一种依赖状态的操作,并且通常会阻塞.当使用锁或信号量时,"获取"操作的含义就很直观,即获取的是锁或者许可,并且调用者可能会一直等待直到同步器类处于可被获取的状态.在使用CountDownLatch时,“获取"操作意味着"等待并直到闭锁到达结束状态”,而在使用FutureTask时,“获取"操作意味着"等待并直到任务已经完成”."释放"并不是一个可阻塞的操作,当执行"释放"操作时,所有在请求时被阻塞的线程都会开始执行.
1 | public interface Lock { |