5.4k 5 分钟

# 前言 文中附代码实现. 电梯直达 在公众号回复 【跳表】 也可以获取哦。 # 什么是跳表 跳表是一种数据结构。它允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是 O (log n),优于普通队列的 O (n)。 from. 维基百科 # 引题 线性表这种数据有两种具体实现,数组和链表。具体的内容之前的文章里也有说过,可以翻翻看哇~。在这里两种数据结构中,数组的优点是查找速度快,而链表的优点是增删的效率高,这也是我们常说的。其实,非也。 数组是一种内存连续的数据结构,其优点是可以通过 首地址+N*(sizeOf(Node))...
3.4k 3 分钟

# 书接上回 上一篇我们学习的 bitmap 这一 “数据类型” 。其内部是由 sds 这种种数据结构编码的。 如果不记得了,那就来坐穿梭机回去看看吧。 开始穿梭 接下来,我们继续学习一个新的 "数据类型" , 位图, HyperLogLogs .(注意啦,数据类型,我又加了引号!!) # HyperLogLogs 简介 HyperLogLog 是一种概率数据结构,用于对唯一事物进行计数(从技术上讲,这是指估计集合的基数)。 注意哦, HyperlogLog 其实是一种基数计数算法,并非 Redis...
12k 11 分钟

# 书接上回 上一篇我们学习的 zset 集合这一数据类型。其内部是由 skiplist 和 hashtable 这种两种数据结构编码的。 如果不记得了,那就来坐穿梭机回去看看吧。 开始穿梭 接下来,我们继续学习一个新的 "数据类型" , 位图, bitmap .(注意啦,数据类型,我加了引号!!) # bitmap 简介 那么什么是 bitmap , 我们先从名字上来说, bit ,计算机中最小的单位,一个 bit 表示一个二进制位。 map ,映射,图。所以, bitmap 就是表示对二进制位的映射。那具体是怎么回事呢? bitmap...
14k 13 分钟

# 书接上回 上一篇我们学习的 set 集合这一数据类型。其内部是由 inset 和 hashtable 这种两种数据结构编码的。 如果不记得了,那就来坐穿梭机回去看看吧。 开始穿梭 接下来,我们继续学习一个新的数据类型,有序集合. zset . # zset 简介 zset , 中文名字叫 有序集合。序这个字,在 Redis 的实现是 score 字段。我们先不急这个字段,后面会介绍。 在 Redis 中有序的数据类型,还有一个就是我们前面学习的 list 了。 它们还都可以获得某一定范围内的元素。 而 zset 的优点是: list...
10k 9 分钟

# 书接上回 前一篇文章,我们学习的是 Redis 的数据结构之 hash, 学习了其基本的操作和使用内部数据结构是 hashtable 和 ziplist ,其中 Redis 中的 hashtable 是用 dict 表示的。如果不记得了其内部构成,就再看看看着上篇文章吧。现在我们继续学习下一个数据类型 set 。 # set 简介 Redis 的 set 数据类型表示 一堆不重复值的集合。 Redis 的 set 数据类型有两种编码方式. OBJ_ENCODING_INTSET 和 OBJ_ENCODING_HT . OBJ_ENCODING_HT 这种编码方式在上一篇文章...
7.4k 7 分钟

# 书接上回 前一篇文章,我们学习的是 Redis 的数据结构 list, 学习了其基本的操作和使用内部数据结构是 quicklist 和 ziplist ,这两种数据结构虽然起得名字是 list ,但是其内部结构却是链表。如果不记得了其内部构成,就再看看看着上篇文章吧。现在我们继续学习下一个数据类型 hash # hash 简介 hash 是一个键值对集合。是 string 类型的 key 和 value 的映射表,hash 特别适合用于存储对象,每个 hash 类型可以存储 2^32-1 个键值对。 hash 实际上就是一个 哈希表。类似于 Java 里的 HashTable 。 但是...
13k 12 分钟

# 书接上回 上一篇文章 Redis 的数据结构 string 我们一起学习了这种类型的常用命令,并且还学习了 Redis 中的字符串的结构表示以及好处,这里我们接着学习另外一种数据结构 list 。 # list 简介 list , 一般都会称为列表。在 Redis 中,这种数据结构是一种比较灵活的结构,由于其元素的是有序的,所以可以充当栈和队列这两种数据结构。实际在开发总也有很多应用场景。 一个 List 最多可以包含 2^32-1 个元素。 很多人都会以为 list 是用数组来实现的,非也,非也。它内部是 quicklist 这种数据结构。想要先睹为快的,那么坐电梯直达吧。 # list...
9.6k 9 分钟

今天来聊聊 Redis 的 string ,这一数据结构。 # string 简介 string 是 Redis 中最基本,也是最简单的数据结构。一个键 ( key ) 对应着一个 string 类型的值 ( value ). 我们都知道 redis 是使用 C 语言来编写的,但是 string 这一个数据结构并非是使用 C 语言的 string(char[]) 来实现的,要想先了解,那就做电梯吧 ->( 电梯直达 ). 现在,先暂且抛开内部实现,我们先看看有怎么使用这一数据结构。 # string 相关常用命令 # set 命令 SET key value...
1.7k 2 分钟

Redis 默认提供了 16 个数据库。每个数据库都有一个 id , 从 0 开始,[0,15]。 不同的数据库中数据隔离保存。我们可以通过修改 redis 的配置文件进行修改数据库的数量。 1database 32 使用 select <ID> 可以切换数据库. 示例如下: 12345678910127.0.0.1:6379> select 1OK# 演示数据隔离127.0.0.1:6379[1]> set test 1OK127.0.0.1:6379[1]> select...
601 1 分钟

Redis 是一个开放源代码( BSD 许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图 ( bitMap ),超日志 ( hyperlog ),带有半径查询和流的地理空间索引 ( geohash )。 Redis 还内置了副本, Lua 脚本, LRU 驱逐策略,事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供了高可用性。 Redis 还支持一下特性: 事务 发布 / 订阅模式 lua 脚本 键值的允许生存时长. LRU 驱逐 故障自动转移 #...