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,可能导致内存拷贝。

0 commit comments

Comments
 (0)