![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
普通网友
这个作者很懒,什么都没留下…
展开
-
极客时间 Redis核心技术与实战 05 数据分布优化
37 | 数据分布优化:如何应对数据倾斜? 为了应对这个问题,我们可以通过运维规范,在分配之前,我们就要避免把过多的 Slot 分配到同一个实例。如果是已经分配好 Slot 的集群,我们可以先查看 Slot 和实例的具体分配关系,从而判断是否有过多的 Slot 集中到了同一个实例。如果有的话,就将部分 Slot 迁移到其它实例,从而避免数据倾斜。...原创 2020-11-17 22:55:05 · 788 阅读 · 0 评论 -
极客时间 Redis核心技术与实战 基础篇 笔记04 缓存事务 数据同步 分布式锁
29 | 无锁的原子操作:Redis如何应对并发访问?别担心,Redis 提供了 INCR/DECR 命令,把这三个操作转变为一个原子操作了。INCR/DECR 命令可以对数据进行增值 / 减值操作,而且它们本身就是单个命令操作,Redis 在执行它们时,本身就具有互斥性。 Redis 会把整个 Lua 脚本作为一个整体执行,在执行的过程中不会被其他命令打断,从而保证了 Lua 脚本中操作的原子性。如果我们有多个操作要执行,但是又无法用 INCR/DECR 这种命令操作来...原创 2020-11-14 18:25:18 · 450 阅读 · 0 评论 -
极客时间 Redis核心技术与实战 基础篇 笔记03 缓存穿透,雪崩,击穿
我们再看一下刚才的计算机分层结构。LLC 的大小是 MB 级别,page cache 的大小是 GB 级别,而磁盘的大小是 TB 级别。这其实包含了缓存的第二个特征:缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中 举个例子,在商品大促的场景中,商品的库存信息会一直被修改。如果每次修改都需到数据库中处理,就会拖慢整个应用,此时,我们通常会选择读写缓存的模式。而在短视频 App 的场景中,虽然视频的属性有很多,但是,一般确定后,修改并不频繁,此时,在数据...原创 2020-11-14 17:14:13 · 1095 阅读 · 0 评论 -
极客时间 Redis核心技术与实战 基础篇 笔记02 主从同步 && 哨兵 && 切片
06 | 数据同步:主从库如何实现数据一致? 好了,到这里,我们了解了主从库间通过全量复制实现数据同步的过程,以及通过“主 - 从 - 从”模式分担主库压力的方式。那么,一旦主从库完成了全量复制,它们之间就会一直维护一个网络连接,主库会通过这个连接将后续陆续收到的命令操作再同步给从库,这个过程也称为基于长连接的命令传播,可以避免频繁建立连接的开销。 在网络断连阶段,主库可能会收到新的写操作命令,所以,一般来说,master_repl_offset 会大于 ...原创 2020-08-19 23:40:23 · 1722 阅读 · 1 评论 -
极客时间 Redis核心技术与实战 笔记01 基础篇
01 | 基本架构:一个键值数据库包含什么?而 Redis 支持的 value 类型包括了 String、哈希表、列表、集合等。Redis 能够在实际业务场景中得到广泛的应用,就是得益于支持多样化类型的 value。为了和 Redis 保持一致,我们的 SimpleKV 就采用内存保存键值数据。接下来,我们来了解下 SimpleKV 的基本组件。大体来说,一个键值数据库包括了访问框架、索引模块、操作模块和存储模块四部分(见下图)。接下来,我们就从这四个部分入手,继续构建我们...原创 2020-08-03 20:09:17 · 10408 阅读 · 0 评论 -
redis 深入学习 07 布隆过滤器
详细解析Redis中的布隆过滤器及其应用布隆过滤器(Bloom Filter)是由Howard Bloom在1970年提出的一种比较巧妙的概率型数据结构,它可以告诉你某种东西一定不存在或者可能存在。当布隆过滤器说,某种东西存在时,这种东西可能不存在;当布隆过滤器说,某种东西不存在时,那么这种东西一定不存在。布隆过滤器相对于Set、Map 等数据结构来说,它可以更高效地插入和查询,并且占用空间更少,它也有缺点,就是判断某种东西是否存在时,可能会被误判。但是只要参数设置的合理,它的精确度也可以控制的相对原创 2020-07-14 23:33:17 · 160 阅读 · 0 评论 -
Redis 深入学习 06 淘汰策略
volatile-lru : 设置了过期时间expire的key,进行lru,最近最少使用keyvolatile - random: 设置了过期时间expire,随机删除一部分keyvolatile-ttl :设置了过期时间expire,优先删除剩余时间ttl 短的keyredis 5.0(4)volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。(6)allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。(8) no-enviction(驱逐):..原创 2020-07-16 13:31:40 · 156 阅读 · 0 评论 -
Redis 深入学习 05 I/O 多路复用
Redis 和 I/O 多路复用最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回.原创 2020-07-20 12:24:21 · 119 阅读 · 0 评论 -
Redis5 设计与源码分析 阅读笔记 04
第9章 命令处理生命周期redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问原创 2020-05-18 11:23:31 · 338 阅读 · 0 评论 -
Redis5 设计与源码分析 阅读笔记 03
第8章 stream消息,生产者,消费者,消费组生产者负责向消息队列中生产消息,消费者消费某个消息流。消费者可以归属某个消费组,也可以不归属某个消费组当消费者不归属任何消费组时,该消费者可以消费消息队列中的任何消息。消费组:每个消费组可以消费队列中全部消息,多个消费组之间相互独立一个消息可以由该组的一个成员消费每个消息组都有一个待确认消息队列,用以维护该消费组已经消费但没有确认的消息消费组的每个成员也有一个待确认消息队列,维护着该消费者已经消费尚未确认的消息...原创 2020-05-15 20:27:45 · 284 阅读 · 0 评论 -
Redis5 设计与源码分析 阅读笔记 02
第4章 压缩列表 ziplist本质为一个字节数组,redis为了节约内存而设计的一种线性数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。 有序集合Zset或者散列表 的元素个数比较少,且元素都是短字符串,redis便使用压缩列表作为其底层存储结构,列表使用快速链表quicklist结构存储,这个就是双向链表和压缩列表的组合。下面是插入方法插入元素步骤1.对插入元素内容进行编码 编码先尝试将数据内容解析为整数,如果解析成功,按照压缩列表整数类型编码存储;...原创 2020-05-15 15:19:50 · 536 阅读 · 0 评论 -
Redis5 设计与源码分析 阅读笔记 01
从github上下载redis的源代码,地址为https://github.com/antirez/redis.gitmac 事先安装了CLion,导入redis源码工程如下,然后切换到redis 6.0第2章 简单动态字符串原创 2020-05-14 21:07:16 · 1531 阅读 · 1 评论 -
Redis 深入学习 04 RedLock Redisson
不同于我们在市面上看到的 Redis 通过 SET 命令带上 NX 和 EXPIRE 的方式实现获得分布式锁,RedissonLock 提供重入性,所以需要 Lua 脚本来实现。当然,实际上,也可以通过 ThreadLocal 来实现重入性的技术RedLock学习...原创 2020-07-20 11:18:37 · 84 阅读 · 0 评论 -
Caffeine cache 学习02
Caffeine是一种高性能的缓存库,是基于Java 8的最佳(最优)缓存框架。Cache(缓存),基于Google Guava,Caffeine提供一个内存缓存,大大改善了设计Guava's cache 和 ConcurrentLinkedHashMap 的体验。1 LoadingCache<Key, Graph> graphs = Caffeine.newBuilder(...原创 2020-06-03 23:09:29 · 487 阅读 · 0 评论 -
Redis 深入学习 03
Redis 底层实现Redis的五大数据类型也称五大数据对象;前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject;这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、集合(set)对象和有序集合对象(zset);而这五大对象的底层数据编码可以用命令OBJECT ...原创 2020-07-20 12:01:51 · 117 阅读 · 0 评论 -
Caffeine cache 学习01
Caffeine是一款基于Java8开发的,高性能的,接近最优的本地缓存库2.1 淘汰策略(Size-Based)缓存命中率是衡量缓存系统优劣的重要指标,缓存通过保存最近使用或经常使用的数据于速度较快的介质中以提高数据的访问速度,缓存空间被填满后,会面临如何选择丢弃数据为新数据腾出空间的问题,因此选择合适的缓存淘汰算法会直接影响缓存的命中率。常用的缓存算法有: First in...原创 2020-06-03 23:09:16 · 914 阅读 · 0 评论 -
缓存相关总结
Ehcache支持持久化到本地磁盘,Guava不可以; Ehcache有现成的集群解决方案,Guava没有。不过个人感觉比较鸡肋,对JVM级别的缓存来讲太重了; Ehcache jar包庞大,Guava Cache只是Guava jar包中的工具之一,而且后者远远小于Ehcache; 两种缓存当缓存过期或者没有命中的时候都可以通过load接口重载数据,调用方式略有不同。两者的主要区别是Ehc...原创 2020-05-01 17:59:23 · 79 阅读 · 0 评论 -
Redis 6 新特性 相关 && 网络模型
1、select 同步多路IO复用时间复杂度:O(n)fd_set(监听的端口个数):32位机默认是1024个,64位机默认是2048。缺点:(1)单进程可以打开fd有限制;(2)对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低;(2)用户空间和内核空间的复制非常消耗资源;2、poll同步多路IO复用调用过程和selec...原创 2020-04-04 20:23:58 · 3276 阅读 · 1 评论 -
Redis 深入学习 01
缓存,就是数据交换的缓冲区,针对服务对象的不同(本质就是不同的硬件)都可以构建缓存。目的是,把读写速度【慢】的介质的数据保存在读写速度【快】的介质中,从而提高读写速度,减少时间消耗。例如:CPU 高速缓存 :高速缓存的读写速度远高于内存。 CPU 读数据时,如果在高速缓存中找到所需数据,就不需要读内存 CPU 写数据时,先写到高速缓存,再回写到内存。 磁盘缓存:磁盘缓存其实就把...原创 2020-04-04 16:36:30 · 62 阅读 · 0 评论 -
Redis 深入学习 02 持久化
(1)redis和memcached有啥区别这个事儿吧,你可以比较出N多个区别来,但是我还是采取redis作者给出的几个比较吧1)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,...原创 2020-07-08 17:26:51 · 488 阅读 · 0 评论 -
Redis 深入学习 (转载一些优秀文章)
Redis 字符串命令https://blog.csdn.net/men_wen/article/details/60783300原创 2019-12-12 22:52:20 · 267 阅读 · 0 评论 -
Redis 源码分析 三 核心功能实现 数据库 , 通知
lookupKeyRead()函数调用了lookupKeyReadWithFlags()函数,后者其实就判断了一下当前键是否过期,如果没有过期,更新 misses 和 hits 信息,然后就返回值对象。lookupKeyWrite() 函数则先判断键是否过期,然后直接调用最底层的 lookupKey() 函数,和 lookupKeyRead()函数 相比,少了一步更新 ...原创 2019-12-24 09:58:41 · 150 阅读 · 0 评论 -
Redis 源码分析 二 对象,集合类
2.1 对象的结构对象结构robj功能:为5种不同的对象类型提供同一的表示形式。 为不同的对象适用于不同的场景,支持同一种对象类型采用多种的数据结构方式。 支持引用计数,实现对象共享机制。 记录对象的访问时间,便于删除对象。(九)字符串命令的实现(十)列表键命令实现(t_list)(十一)哈希键命令的实现(十二)集合类型键实现(十三)...原创 2019-12-15 22:24:07 · 140 阅读 · 0 评论 -
Redis 源码分析 一 基本数据结构
Redis 源码分析总览https://blog.csdn.net/men_wen/article/details/75668345笔记汇总:使用双向链表的好处:prev和next指针:获取某个节点的前驱节点和后继节点复杂度为O(1)。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...原创 2019-12-12 22:53:41 · 201 阅读 · 0 评论 -
知识点复习33 Redis 知识点05
Redis集群最大节点个数是多少?Redis集群预分好16384个桶(哈希槽)Redis集群的主从复制模型是怎样的?为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.Redis集群会有写操作丢失吗?为什么?Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。使用过R...原创 2019-10-05 21:28:35 · 165 阅读 · 0 评论 -
知识点复习32 Redis 知识点04
4. Redis 持久化的几种方式?持久化方式主要分为RDB和AOF两种方式。RDB:RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。AOF: AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记...原创 2019-09-24 11:17:42 · 241 阅读 · 0 评论 -
知识点复习31 Redis 知识点03
1. Redis为什么是单线程的?1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题...原创 2019-09-23 22:16:17 · 101 阅读 · 0 评论 -
知识点复习29 Redis 知识点01
Redis的数据类型?答:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。我们实际项目中比较常用的是string,hash如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。使用Redis有哪些好处?(1) 速度快,因为数据存在内存中,...原创 2019-09-23 09:46:27 · 197 阅读 · 0 评论