Skip to content

Commit 8da36a4

Browse files
committed
modify cache
1 parent e3d7ab3 commit 8da36a4

17 files changed

+206
-27
lines changed

docs/cache/Redis原理与实践总结.md

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
# 目录
2+
* [使用和基础数据结构(外观)](#使用和基础数据结构(外观))
3+
* [底层数据结构](#底层数据结构)
4+
* [redis server结构和数据库redisDb](#redis-server结构和数据库redisdb)
5+
* [redis的事件模型](#redis的事件模型)
6+
* [备份方式](#备份方式)
7+
* [redis主从复制](#redis主从复制)
8+
* [分布式锁实现](#分布式锁实现)
9+
* [使用setnx加expire实现加锁和时限](#使用setnx加expire实现加锁和时限)
10+
* [使用getset加锁和获取过期时间](#使用getset加锁和获取过期时间)
11+
* [2.0的setnx可以配置过期时间。](#20的setnx可以配置过期时间。)
12+
* [使用sentx将值设为时间戳,通过lua脚本进行cas比较和删除操作](#使用sentx将值设为时间戳,通过lua脚本进行cas比较和删除操作)
13+
* [分布式Redis锁:Redlock](#分布式redis锁:redlock)
14+
* [总结](#总结)
15+
* [分布式方案](#分布式方案)
16+
* [redis事务](#redis事务)
17+
* [redis脚本事务](#redis脚本事务)
18+
* [微信公众号](#微信公众号)
19+
* [Java技术江湖](#java技术江湖)
20+
* [个人公众号:黄小斜](#个人公众号:黄小斜)
21+
22+
123
[toc]
224

325

@@ -422,21 +444,3 @@ redis事务的ACID特性
422444
事务的耐久性指的是,当一个事务执行完毕时,执行这个事务所得的结果已经被保持到永久存储介质里面。
423445
因为redis事务不过是简单的用队列包裹起来一组redis命令,redis并没有为事务提供任何额外的持久化功能,所以redis事务的耐久性由redis使用的模式
424446
决定
425-
426-
## 微信公众号
427-
428-
### Java技术江湖
429-
430-
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
431-
432-
**Java工程师必备学习资源:** 一些Java工程师常用学习资源,关注公众号后,后台回复关键字 **“Java”** 即可免费无套路获取。
433-
434-
![我的公众号](https://img-blog.csdnimg.cn/20190805090108984.jpg)
435-
436-
### 个人公众号:黄小斜
437-
438-
作者是 985 硕士,蚂蚁金服 JAVA 工程师,专注于 JAVA 后端技术栈:SpringBoot、MySQL、分布式、中间件、微服务,同时也懂点投资理财,偶尔讲点算法和计算机理论基础,坚持学习和写作,相信终身学习的力量!
439-
440-
**程序员3T技术学习资源:** 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 **“资料”** 即可免费无套路获取。
441-
442-
![](https://img-blog.csdnimg.cn/20190829222750556.jpg)

docs/cache/探索Redis设计与实现开篇:什么是Redis.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
# Table of Contents
2+
3+
* [redis 学习笔记](#redis-学习笔记)
4+
* [redis 是什么?](#redis-是什么)
5+
* [Redis 数据结构](#redis-数据结构)
6+
* [Redis 数据类型](#redis-数据类型)
7+
* [过期时间](#过期时间)
8+
* [应用场景](#应用场景)
9+
* [内存优化](#内存优化)
10+
* [天下无难试之Redis面试刁难大全](#天下无难试之redis面试刁难大全)
11+
12+
113
[toc]
214

315
本文转自互联网

docs/cache/探索Redis设计与实现:Redis 的基础数据结构概览.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# Table of Contents
2+
3+
* [SDS](#sds)
4+
* [链表](#链表)
5+
* [字典](#字典)
6+
7+
18
[toc]
29

310
本文转自https://www.xilidou.com/2018/03/22/redis-event/
@@ -181,4 +188,4 @@ typedef struct dictType { // 计算哈希值的函数
181188

182189
这样保证数据能够平滑的进行 rehash。防止 rehash 时间过久阻塞线程。
183190

184-
* 在进行 rehash 的过程中,如果进行了 delete 和 update 等操作,会在两个哈希表上进行。如果是 find 的话优先在ht[0] 上进行,如果没有找到,再去 ht[1] 中查找。如果是 insert 的话那就只会在 ht[1]中插入数据。这样就会保证了 ht[1] 的数据只增不减,ht[0]的数据只减不增。
191+
* 在进行 rehash 的过程中,如果进行了 delete 和 update 等操作,会在两个哈希表上进行。如果是 find 的话优先在ht[0] 上进行,如果没有找到,再去 ht[1] 中查找。如果是 insert 的话那就只会在 ht[1]中插入数据。这样就会保证了 ht[1] 的数据只增不减,ht[0]的数据只减不增。

docs/cache/探索Redis设计与实现:Redis事务浅析与ACID特性介绍.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
# Table of Contents
2+
3+
* [事务](#事务)
4+
* [用法](#用法)
5+
* [事务中的错误](#事务中的错误)
6+
* [为什么 Redis 不支持回滚(roll back)](#为什么-redis-不支持回滚(roll-back))
7+
* [放弃事务](#放弃事务)
8+
* [使用 check-and-set 操作实现乐观锁](#使用-check-and-set-操作实现乐观锁)
9+
* [了解`WATCH`](#了解`watch`)
10+
* [使用 WATCH 实现 ZPOP](#使用-watch-实现-zpop)
11+
* [Redis 脚本和事务](#redis-脚本和事务)
12+
* [redis事务的ACID特性](#redis事务的acid特性)
13+
14+
115
[toc]
216

317
本文转自互联网

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——dict.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Table of Contents
2+
3+
* [dict的数据结构定义](#dict的数据结构定义)
4+
* [dict的创建(dictCreate)](#dict的创建(dictcreate))
5+
* [dict的查找(dictFind)](#dict的查找(dictfind))
6+
* [dict的插入(dictAdd和dictReplace)](#dict的插入(dictadd和dictreplace))
7+
* [dict的删除(dictDelete)](#dict的删除(dictdelete))
8+
9+
110
[toc]
211

312
本文转自互联网
@@ -167,7 +176,7 @@ dictCreate为dict的数据结构分配空间并为各个变量赋初值。其中
167176

168177
## dict的查找(dictFind)
169178
````
170-
#define dictIsRehashing(d) ((d)->rehashidx != -1)
179+
//define dictIsRehashing(d) ((d)->rehashidx != -1)
171180
172181
dictEntry *dictFind(dict *d, const void *key)
173182
{

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——intset.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
# Table of Contents
2+
3+
* [intset数据结构简介](#intset数据结构简介)
4+
* [intset的查找和添加操作](#intset的查找和添加操作)
5+
* [Redis的set](#redis的set)
6+
* [Redis set的并、交、差算法](#redis-set的并、交、差算法)
7+
* [交集](#交集)
8+
* [并集](#并集)
9+
* [差集](#差集)
10+
11+
112
[toc]
213

314
本文转自互联网

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——quicklist.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Table of Contents
2+
3+
* [quicklist概述](#quicklist概述)
4+
* [quicklist的数据结构定义](#quicklist的数据结构定义)
5+
* [quicklist的创建](#quicklist的创建)
6+
* [quicklist的push操作](#quicklist的push操作)
7+
* [quicklist的其它操作](#quicklist的其它操作)
8+
9+
110
[toc]
211

312
本文转自互联网
@@ -300,4 +309,4 @@ quicklist不仅实现了从头部或尾部插入,也实现了从任意指定
300309
**原创文章,转载请注明出处,并包含下面的二维码!否则拒绝转载!**
301310
**本文链接:**[http://zhangtielei.com/posts/blog-redis-quicklist.html](http://zhangtielei.com/posts/blog-redis-quicklist.html)
302311

303-
![我的微信公众号: tielei-blog (张铁蕾)](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/my_weixin_sign_sf_840.jpg)
312+
![我的微信公众号: tielei-blog (张铁蕾)](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/my_weixin_sign_sf_840.jpg)

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——sds.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
# Table of Contents
2+
3+
* [前言](#前言)
4+
* [sds的数据结构定义](#sds的数据结构定义)
5+
* [Redis dict结构举例](#redis-dict结构举例)
6+
* [sds的创建和销毁](#sds的创建和销毁)
7+
* [sds的连接(追加)操作](#sds的连接(追加)操作)
8+
* [浅谈sds与string的关系](#浅谈sds与string的关系)
9+
10+
111
[toc]
212

313
本文转自互联网
@@ -179,4 +189,4 @@ setbit和getrange都是先根据key取到整个sds字符串,然后再从字符
179189

180190
但是,string除了支持这些操作之外,当它存储的值是个数字的时候,它还支持incr、decr等操作。那么,当string存储数字值的时候,它的内部存储还是sds吗?
181191

182-
实际上,不是了。而且,这种情况下,setbit和getrange的实现也会有所不同。这些细节,我们放在下一篇介绍robj的时候再进行系统地讨论。
192+
实际上,不是了。而且,这种情况下,setbit和getrange的实现也会有所不同。这些细节,我们放在下一篇介绍robj的时候再进行系统地讨论。

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——skiplist.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
# Table of Contents
2+
3+
* [skiplist数据结构简介](#skiplist数据结构简介)
4+
* [skiplist的算法性能分析](#skiplist的算法性能分析)
5+
* [skiplist与平衡树、哈希表的比较](#skiplist与平衡树、哈希表的比较)
6+
* [Redis中的skiplist实现](#redis中的skiplist实现)
7+
* [sorted set的命令举例](#sorted-set的命令举例)
8+
* [Redis中skiplist实现的特殊性](#redis中skiplist实现的特殊性)
9+
* [skiplist的数据结构定义](#skiplist的数据结构定义)
10+
* [Redis中的sorted set](#redis中的sorted-set)
11+
* [Redis为什么用skiplist而不用平衡树?](#redis为什么用skiplist而不用平衡树?)
12+
13+
114
[toc]
215

316

@@ -451,4 +464,4 @@ typedef struct zset {
451464
**原创文章,转载请注明出处,并包含下面的二维码!否则拒绝转载!**
452465
**本文链接:**[http://zhangtielei.com/posts/blog-redis-skiplist.html](http://zhangtielei.com/posts/blog-redis-skiplist.html)
453466

454-
![我的微信公众号: tielei-blog (张铁蕾)](http://zhangtielei.com/assets/my_weixin_sign_sf_840.jpg)
467+
![我的微信公众号: tielei-blog (张铁蕾)](http://zhangtielei.com/assets/my_weixin_sign_sf_840.jpg)

docs/cache/探索Redis设计与实现:Redis内部数据结构详解——ziplist.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Table of Contents
2+
3+
* [什么是ziplist](#什么是ziplist)
4+
* [ziplist的数据结构定义](#ziplist的数据结构定义)
5+
* [ziplist的接口](#ziplist的接口)
6+
* [ziplist的插入逻辑解析](#ziplist的插入逻辑解析)
7+
* [hash与ziplist](#hash与ziplist)
8+
9+
110
[toc]
211

312
本文转自互联网
@@ -279,4 +288,4 @@ Redis的hash之所以这样设计,是因为当ziplist变得很大的时候,
279288
* 一旦发生内存拷贝,内存拷贝的成本也相应增加,因为要拷贝更大的一块数据。
280289
* 当ziplist数据项过多的时候,在它上面查找指定的数据项就会性能变得很低,因为ziplist上的查找需要进行遍历。
281290

282-
总之,ziplist本来就设计为各个数据项挨在一起组成连续的内存空间,这种结构并不擅长做修改操作。一旦数据发生改动,就会引发内存realloc,可能导致内存拷贝。
291+
总之,ziplist本来就设计为各个数据项挨在一起组成连续的内存空间,这种结构并不擅长做修改操作。一旦数据发生改动,就会引发内存realloc,可能导致内存拷贝。

docs/cache/探索Redis设计与实现:Redis分布式锁进化史.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# Table of Contents
2+
3+
* [Redis分布式锁进化史](#redis分布式锁进化史)
4+
* [各个版本的Redis分布式锁](#各个版本的redis分布式锁)
5+
* [分布式Redis锁:Redlock](#分布式redis锁:redlock)
6+
* [总结](#总结)
7+
8+
19

210
本文转自互联网
311
本文将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

docs/cache/探索Redis设计与实现:Redis的事件驱动模型与命令执行过程.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,4 @@ eaMain() while(true) 的调用 aeProcessEvents()。
189189
为什么 Redis 是一个单线程应用,却有如此高的性能?
190190
如果你用本文提供的知识点回答这两个问题,一定会在面试官心中留下一个高大的形象。
191191

192-
大家还可以阅读我的 Redis 相关的文章:
192+
大家还可以阅读我的 Redis 相关的文章:

docs/cache/探索Redis设计与实现:Redis集群机制及一个Redis架构演进实例.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
# Table of Contents
2+
3+
* [Replication(主从复制)](#replication(主从复制))
4+
* [配置主服务器](#配置主服务器)
5+
* [配置从服务器](#配置从服务器)
6+
* [测试](#测试)
7+
* [Sentinel(哨兵)](#sentinel(哨兵))
8+
* [配置Sentinel](#配置sentinel)
9+
* [启动 Sentinel](#启动-sentinel)
10+
* [测试](#测试-1)
11+
* [Twemproxy](#twemproxy)
12+
* [Codis](#codis)
13+
* [Redis 3.0集群](#redis-30集群)
14+
* [环境搭建](#环境搭建)
15+
* [根据实际情况修改](#根据实际情况修改)
16+
* [允许redis支持集群模式](#允许redis支持集群模式)
17+
* [节点配置文件,由redis自动维护](#节点配置文件,由redis自动维护)
18+
* [节点超时毫秒](#节点超时毫秒)
19+
* [开启AOF同步模式](#开启aof同步模式)
20+
* [创建集群](#创建集群)
21+
22+
123
## Replication(主从复制)
224

325
Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份,从而达到主从机制。为了实现主从复制,我们准备三个redis服务,依次命名为master,slave1,slave2。
@@ -263,4 +285,4 @@ appendonly yes
263285
* 版权声明:本文由 **梁桂钊** 发表于 [梁桂钊的博客](http://blog.720ui.com/)
264286
* 转载声明:转载请联系公众号【服务端思维】。
265287
* 文章标题:[Redis实战(四) 集群机制 | 梁桂钊的博客](http://blog.720ui.com/2016/redis_action_04_cluster/)
266-
* 文章链接:[http://blog.720ui.com/2016/redis_action_04_cluster/](http://blog.720ui.com/2016/redis_action_04_cluster/)
288+
* 文章链接:[http://blog.720ui.com/2016/redis_action_04_cluster/](http://blog.720ui.com/2016/redis_action_04_cluster/)

docs/cache/探索Redis设计与实现:使用快照和AOF将Redis数据持久化到硬盘中.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Table of Contents
2+
3+
* [前言](#前言)
4+
* [快照持久化](#快照持久化)
5+
* [AOF持久化](#aof持久化)
6+
* [验证快照文件和AOF文件](#验证快照文件和aof文件)
7+
* [总结](#总结)
8+
9+
110
[toc]
211

312
本文转自互联网

docs/cache/探索Redis设计与实现:数据库redisDb与键过期删除策略.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
# Table of Contents
2+
3+
* [一. 数据库](#一-数据库)
4+
* [二、切换数据库原理](#二、切换数据库原理)
5+
* [三、数据库的键空间](#三、数据库的键空间)
6+
* [1、数据库的结构(我们只分析键空间和键过期时间)](#1、数据库的结构(我们只分析键空间和键过期时间))
7+
* [2、键空间的初始化](#2、键空间的初始化)
8+
* [3、键空间的操作](#3、键空间的操作)
9+
* [四、数据库的过期键操作](#四、数据库的过期键操作)
10+
* [1、过期键处理函数](#1、过期键处理函数)
11+
* [2、过期键删除策略](#2、过期键删除策略)
12+
13+
114
[toc]
215

316
本文转自互联网

docs/cache/探索Redis设计与实现:浅析Redis主从复制.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# Table of Contents
2+
3+
* [Redis复制概论](#redis复制概论)
4+
* [Redis复制方式](#redis复制方式)
5+
* [复制优点](#复制优点)
6+
* [1、高可用性](#1、高可用性)
7+
* [2、高性能](#2、高性能)
8+
* [3、水平扩展性](#3、水平扩展性)
9+
* [复制缺点](#复制缺点)
10+
* [复制实时性和数据一致性矛盾](#复制实时性和数据一致性矛盾)
11+
* [Redis复制原理及特性](#redis复制原理及特性)
12+
* [slave指向master](#slave指向master)
13+
* [复制过程](#复制过程)
14+
* [增量复制](#增量复制)
15+
* [免持久化复制](#免持久化复制)
16+
* [slave只读模式](#slave只读模式)
17+
* [半同步复制](#半同步复制)
18+
* [总结](#总结)
19+
20+
121
[toc]
222

323

@@ -214,4 +234,4 @@ min-slaves-to-write <number of slaves>min-slaves-max-lag <number of seconds>
214234
215235
# 总结
216236
217-
本文在理解Redis复制概念和复制的优缺点的基础之上介绍了当前Redis复制工作原理以及主要特性,希望能够帮助大家。
237+
本文在理解Redis复制概念和复制的优缺点的基础之上介绍了当前Redis复制工作原理以及主要特性,希望能够帮助大家。

docs/cache/探索Redis设计与实现:连接底层与表面的数据结构robj.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# Table of Contents
2+
3+
* [robj的数据结构定义](#robj的数据结构定义)
4+
* [string robj的编码过程](#string-robj的编码过程)
5+
* [string robj的解码过程](#string-robj的解码过程)
6+
* [再谈sds与string的关系](#再谈sds与string的关系)
7+
* [robj的引用计数操作](#robj的引用计数操作)
8+
9+
110
[toc]
211
本文转自互联网
312
本文将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

0 commit comments

Comments
 (0)