张伯毅的专栏

人生就是一道证明题,证明我们的存在不是偶然....

Redis 知识梳理 [ 基数树 ]

Rax 是 Redis 内部比较特殊的一个数据结构,它是一个有序字典树 (基数树 Radix Tree),按照 key 的字典序排列,支持快速地定位、插入和删除操作。 Redis 五大基础数据结构里面,能作为字典使用的有 hash 和 zset。hash 不具 备排序功能,zset 则是按照 sc...

2019-03-10 20:48:33

阅读数 333

评论数 0

Redis 知识梳理 [ 紧凑列表 ]

Redis 5.0 又引入了一个新的数据结构 listpack,它是对 ziplist 结构的改进,在 存储空间上会更加节省,而且结构上也比 ziplist 要精简。它的整体形式和 ziplist 还是比较接近的,如果你认真阅读了 ziplist 的内部结构分析,那么 listpack 也是比较容...

2019-03-10 20:39:20

阅读数 65

评论数 3

Redis 知识梳理 [ 跳跃列表 ]

Redis 的 zset 是一个复合结构,一方面它需要一个 hash 结构来存储 value 和 score 的对应关系,另一方面需要提供按照 score 来排序的功能,还需要能够指 定 score 的范围来获取 value 列表的功能,这就需要另外一个结构「跳跃列 表」。 zset 的...

2019-03-10 20:32:39

阅读数 37

评论数 0

Redis 知识梳理 [ 快速列表 ]

Redis 早期版本存储 list 列表数据结构使用的是压缩列表 ziplist 和普通的双向链 表 linkedlist,也就是元素少时用 ziplist,元素多时用 linkedlist。 // 链表的节点 struct listNode<T&...

2019-03-10 20:13:20

阅读数 31

评论数 0

Redis 知识梳理 [ 压缩列表 ]

Redis 为了节约内存空间使用,zset 和 hash 容器对象在元素个数较少的时候, 采用压缩列表 (ziplist) 进行存储。压缩列表是一块连续的内存空间,元素之间紧 挨着存储,没有任何冗余空隙。 > zadd programmings 1.0 go 2.0 ...

2019-03-10 19:45:03

阅读数 87

评论数 0

Redis 知识梳理 [ 字典 内部结构 ]

dict 是 Redis 服务器中出现最为频繁的复合型数据结构,除了 hash 结构的数据 会用到字典外,整个 Redis 数据库的所有 key 和 value 也组成了一个全局字 典,还有带过期时间的 key 集合也是一个字典。zset 集合中存储 value 和 score 值的映射关系也是通...

2019-03-08 17:50:29

阅读数 32

评论数 0

Redis 知识梳理 [ 字符串 内部结构 ]

Redis 中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在 的。我们知道 C 语言里面的字符串标准形式是以 NULL 作为结束符,但是在 Redis 里面字符串不是这么表示的。因为要获取 NULL 结尾的字符串的长度使用 的是 strlen 标准库函数,这个函数的算法复杂度是 O(...

2019-03-08 16:58:15

阅读数 30

评论数 0

Redis 知识梳理 [ Redis 安全通讯 ]

想象这样一个应用场景,公司有两个机房。因为一个紧急需求 , 需要跨机房读 取 Redis 数据。应用部署在 A 机房,存储部署在 B 机房。如果使用普通 tcp 直接访问, 因为跨机房所以传输数据会暴露在公网上,这非常不安全,客户端服务器交互的数 据存在被窃昕的风险,如图 4-11 所示。 ...

2019-03-08 16:33:17

阅读数 43

评论数 0

Redis 知识梳理 [ Jedis 防护 ]

本节我们来谈谈使用 Redis 需要注意的安全风险以及防范措施,避免数据泄露和 丢失,避免所在主机权限被黑客窃取,以及避免人为操作失误。 指令安全 Redis 有一些非常危险的指令,这些指令会对 Redis 的稳定以及数据安全造成非 常严重的影响。比如 keys 指令会导致 Redis...

2019-03-08 15:36:23

阅读数 22

评论数 0

Redis 知识梳理 [ Jedis 使用]

Jedis 是 Java 用户最常用的 Redis 开源客户端。它非常小巧,实现原理也很简 单,最重要的是很稳定,而且使用的方法参数名称和官方的文档非常 match, 如果有什么方法不会用,直接参考官方的指令文档阅读一下就会了,省去了非必 要的重复学习成本。不像有些客户端把方法名称都换了,虽然表面...

2019-03-08 14:42:46

阅读数 22

评论数 0

Redis 知识梳理 [ 懒惰删除 ]

一直以来我们都知道 Redis 是单线程的,单线程为 Redis 带来了代码的简洁性和丰富多样的数据结构。不过 Redis 内部实际上并不是只有 个主线程,它还有几个异 步线程专门用来处理一些耗时的操作。 Redis 为什么要懒惰删除(lazy free)? 删除指令 del 会直接释放对象的...

2019-03-08 14:23:50

阅读数 40

评论数 0

Redis 知识梳理 [ 缓存算法法 LRU ]

当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来 说,这样龟速的存取效率基本上等于不可用。 在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存, Redi...

2019-03-08 12:46:53

阅读数 31

评论数 0

Redis 知识梳理 [ 过期策略 ]

Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。你可以 想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就 会立即收割。 你还可以进一步站在死神的角度思考,会不会因为同一时间太多的 key 过期,以 至于忙不过来。同时因为 Redis 是...

2019-03-08 11:53:29

阅读数 27

评论数 0

Redis 知识梳理 [ 再谈分布式锁 ]

在 Sentinel 集群中,主节点挂掉时,从节点会取而代之,客户端上却并没 有明显感知。原先第一个客户端在主节点中申请成功了一把锁,但是这把锁还没 有来得及同步到从节点,主节点突然挂掉了。然后从节点变成了主节点,这个新 的节点内部没有这个锁,所以当另一个客户端过来请求加锁时,立即就批准了。 这样...

2019-03-08 10:46:29

阅读数 33

评论数 0

Redis 知识梳理 [ Info指令 ]

Info 指令显示的信息繁多,分为 9大块,每个块都有非常多的参数,这 9大块如下。 1. Server:服务器运行的环境参数 。 2. Clients: 客户端相关信息。 3. Memory: 服务器运行内存统计数据。 4. Persistence:持久化...

2019-03-08 10:17:47

阅读数 47

评论数 0

Redis 知识梳理 [ Stream ]

Redis5.0 被作者 Antirez 突然放了出来,增加了很多新的特色功能。而 Redis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的 支持多播的可持久化的消息队列,作者坦言 Redis Stream 狠狠地借鉴了 Kafka 的设计 Redis ...

2019-03-08 00:26:15

阅读数 56

评论数 0

Redis 知识梳理 [ Codis ]

在大数据高并发场景下,单个 Redis 实例往往会显得捉襟见肘。首先体现在内存 上,单个 Redis 的内存不宜过大,内存太大会导致 rdb 文件过大,进一步导致主从同 步时全量同步时间过长,在实例重启恢复时也会消耗很长的数据加载时间,特别是 在云环境下,单个实例内存大小往往都是受限的。其次体现在...

2019-03-07 16:54:10

阅读数 43

评论数 0

Redis 知识梳理 [ Sentinel 哨兵模式 ]

Redis 官方提供了这样一种方案 —— Redis Sentinel(哨兵) 当故障发生时可以自动进行从 主切换,程序可以不用重启 我们可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,它是集群高可用 的心脏, 它一般是由 3~5 个节点组成,这样挂了...

2019-03-07 16:20:16

阅读数 31

评论数 0

Redis 知识梳理 [ 主从同步 ]

当 master 挂掉的时候,运维让从库过来接管,服务就可以继续,否则 master 需 要经过数据恢复和重启的过程,这就可能会拖很长的时间,影响线上业务的持续 服务。 CAP 原理 CAP 原理就好比分布式领域的牛顿定律,它是分布式存储的理论基石。自打 CAP 的论文发表之后,分布式存储...

2019-03-07 16:05:00

阅读数 30

评论数 0

Redis 知识梳理 [ 小对象压缩 ]

Redis 是一个非常耗费内存的数据库,它所有的数据都放在内存里。如果我们不 注意节约使用内存,Redis 就会因为我们的无节制使用出现内存不足而崩溃。 Redis 作者为了优化数据结构的内存占用,也苦心孤诣增加了非常多的优化点, 这些优化也是以牺牲代码的可读性为代价的,但是毫无疑问这是非常值得的...

2019-03-07 11:48:36

阅读数 39

评论数 0

提示
确定要删除当前文章?
取消 删除