随笔 - 214  文章 - 0 评论 - 11 阅读 - 20万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

01 2022 档案
《MySQL是怎样运行的》第二章小结
摘要: 阅读全文
posted @ 2022-01-28 10:44 长江同学 阅读(34) 评论(0) 推荐(0) 编辑
《MySQL是怎样运行的》第一章小结
摘要: 阅读全文
posted @ 2022-01-27 16:05 长江同学 阅读(41) 评论(0) 推荐(0) 编辑
Redis的字典遍历
摘要:Redis本身就是一个大字典,当我们使用keys命令查找这个大字典时,它会遍历整个redis,如果找到了符合匹配条件的key,还需要判断key指向的对象是否已经过期,如果过期了就需要进行删除操作。 字典拓容时需要进行渐进式hash,此时存在新旧两个hashtable,需要先遍历old hashtab 阅读全文
posted @ 2022-01-24 22:14 长江同学 阅读(156) 评论(0) 推荐(0) 编辑
Redis的懒惰删除与对象共享
摘要:【最初的尝试与性能下降】Redis作者在最初的尝试是在主线程中使用类似字典渐进式搬迁的方式来实现渐进式删除回收,这样可以达到删除大对象时不阻塞主线程的效果。但是渐进式回收需要仔细控制回收的频率,不能回收的太猛,这会导致CPU占用过多,也不能回收太慢,因为内存回收不及时可能导致内存消耗持续增长。但是这 阅读全文
posted @ 2022-01-24 21:33 长江同学 阅读(164) 评论(0) 推荐(0) 编辑
Redis之LRU与LFU
摘要:LRU中,系统会根据使用的时间进行排序,内存紧张时会将最久没有用过的一批数据排除出去。LFU是按照最近的访问频率进行排序,它比LRU更加精准地表示了一个key被访问得热度。LFU是作者在Redis4.0里引入的一个新的淘汰策略。 在这里我们回顾以下Redis内存不足时的淘汰策略:noeviction 阅读全文
posted @ 2022-01-21 23:17 长江同学 阅读(1390) 评论(0) 推荐(0) 编辑
Redis之Radix Tree
摘要:Rax全称redis tree,是一个有序字典树,可以根据key进行排序,支持快速定位、插入与删除,与hash/zset不同在于hash不具备排序功能,zset则根据score进行排序。【trie简介】在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串 阅读全文
posted @ 2022-01-20 14:26 长江同学 阅读(1971) 评论(0) 推荐(0) 编辑
Redis之紧凑列表listpack
摘要:listpack是ziplist结构的改进版,在存储空间上更加节省,而且比ziplist也更精简。 struct listpack<T>{ int32 total_bytes; //总字节数 int16 size; //元素个数 T[] entries; //紧促排列的元素列表 int8 end; 阅读全文
posted @ 2022-01-17 22:06 长江同学 阅读(795) 评论(0) 推荐(0) 编辑
Redis之跳跃列表
摘要:zset是一个符合结构,一方面需要一个hash结构来存储value和score的关系,另一方面需要提供按照score的排序,还需要能够指定score的范围来获取value列表的功能,这需要跳表结构来支持,即skiplist。 【基本结构】 Redis的跳跃列表共有64层,每个kv块对应的结构如下面的 阅读全文
posted @ 2022-01-16 21:34 长江同学 阅读(90) 评论(0) 推荐(0) 编辑
Redis之quicklist
摘要:Redis的早期版本存储list列表的数据结构是ziplist和普通的双向链表linkedlist,元素个数少时使用ziplist,多时用linkedlist。 //链表的节点 struct listNode<T> { listNode* prev; listNode* next; T value; 阅读全文
posted @ 2022-01-15 19:57 长江同学 阅读(146) 评论(0) 推荐(0) 编辑
Redis之ziplist
摘要:【ziplist结构】Redis为了节约内存空间,zset和hash在元素个数较少的时候使用的是ziplist结构进行存储。zip+list,我们可以想到这应该是一系列的zip结构的数据链在了一起。压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。 struct ziplist<T 阅读全文
posted @ 2022-01-15 12:13 长江同学 阅读(722) 评论(0) 推荐(0) 编辑
Redis之字典内部
摘要:【内部使用到字典的结构】>hash>整个Redis库中的key和value也组成了一个全局字典>带过期时间的key集合>zset中存储value和score值的映射关系也是通过字典结构实现的 struct RedisDb { dict* dict; // all keys key=>value di 阅读全文
posted @ 2022-01-14 18:29 长江同学 阅读(48) 评论(0) 推荐(0) 编辑
Redis字符串结构
摘要:【SDS结构】Redis中字符串的结构叫SDS,即Simple Dynamic String。它的结构是一个带长度信息的字节数组。 struct SDS<T>{ T capacity; T len; byte flags; byte[] content; } 1.capacity>=lenconte 阅读全文
posted @ 2022-01-14 09:03 长江同学 阅读(148) 评论(0) 推荐(0) 编辑
MySQL语句错误:Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)
摘要:两张表的字段分别是两种不同的比较规则,在进行联表查询的时候就会出现上述错误。字符比较规则有各个层级的,比如数据库、表、字段,这里只需要保证字段的比较规则一致即可。但是为了整体一致,除了特殊的业务需求,我们最好还是保证库、表、字段的比较规则一致。 -- -- Table structure for a 阅读全文
posted @ 2022-01-12 21:48 长江同学 阅读(15603) 评论(0) 推荐(0) 编辑
Redis的安全使用
摘要:【指令安全】Redis中有一些需要慎重使用的危险指令,keys指令会导致服务卡顿,flushdb和flushall会让Redis的所有数据全部清空,config可以从客户端修改服务的密码并且立即生效。对于这些危险的指令,Redis在配置文件提供了rename-command指令用于将危险的指令修改成 阅读全文
posted @ 2022-01-10 22:33 长江同学 阅读(236) 评论(0) 推荐(0) 编辑
从jedis的优雅使用学习代码的优化过程
摘要:《Redis深度历险 核心原理与应用实践》中有一小节讲到了优雅地使用Jedis,整个过程里包含了一些代码优化的思路,对于我们写出优雅代码也有一定的启示。 【问题】Java程序一般都是多线程的应用,我们很少直接使用Jedis,而是从Jedis对象池中取出Jedis选取一个Jedis对象,单线程独占使用 阅读全文
posted @ 2022-01-06 22:32 长江同学 阅读(81) 评论(0) 推荐(0) 编辑
Redis之懒惰删除
摘要:【懒惰删除】Redis内部利用单线程处理了绝大部分指令,但对于一些耗时的操作,还有几个异步线程在做支撑。对于大部分key来说,del指令非常快,但如果key的value是一个很大的对象,那么del就会造成卡顿,所以Redis4.0引入了unlink指令,可以对删除操作进行懒处理,即不立即进行删除操作 阅读全文
posted @ 2022-01-06 21:23 长江同学 阅读(577) 评论(0) 推荐(0) 编辑
Redis中的近似LRU-超出内存限制后的处理
摘要:【淘汰策略】当Redis内存超过物理内存时,内存的数据会开始和磁盘产生频繁地交换(swap),这会大大降低Redis的性能。在生产环境我们一般不允许出现Redis的交换行为,为了限制最大使用内存,Redis提供了maxmemory参数,当实际内存超过这个值时,Redis提供了几种可选策略来处理:1. 阅读全文
posted @ 2022-01-06 20:10 长江同学 阅读(198) 评论(0) 推荐(0) 编辑
Redis之过期key处理
摘要:单线程Redis内部的过期key是怎么处理的?会不会同一时刻过期key太多,导致来不及删除? 【过期key集合】Redis会将每个设置了过期时间的key放入一个独立的字典里,以后会定时遍历这个字典来删除到期的key。除了定时遍历,还会使用惰性策略,即客户端访问这个key时,Redis发现这个key过 阅读全文
posted @ 2022-01-05 20:55 长江同学 阅读(1175) 评论(0) 推荐(0) 编辑
Redis之Info指令
摘要:Info指令可以查询Redis内部的一些运行情况Info主要分为9大块: Server:服务器运行的环境参数 Clients:客户端相关信息 Memory:服务器运行内存统计数据 Persistence:持久化信息 Stats:通用数据统计 Replication:主从复制相关信息 CPU:CPU使 阅读全文
posted @ 2022-01-04 22:32 长江同学 阅读(454) 评论(0) 推荐(0) 编辑
Redis之Stream
摘要:【Stream简介】Redis5.0增加了一种新的数据结构:Stream,它是一个支持多播的可持久化消息队列。Stream的结构是一个链表,将所有的消息都串起来,每个消息都有一个唯一的ID和对应的内容。消息是持久化的,Redis重启后,内容还在。和其它的结构一样,结构上的不同,都是value不同,k 阅读全文
posted @ 2022-01-04 22:07 长江同学 阅读(2860) 评论(0) 推荐(1) 编辑
Redis深度历险第一章小结
摘要: 阅读全文
posted @ 2022-01-03 20:57 长江同学 阅读(33) 评论(0) 推荐(0) 编辑
Redis之Redis Cluster
摘要:【Redis Cluster简介】Redis Cluster(后面简写RC)是Redis作者自己提供的Redis集群化方案。RC是去中心化的,如图,集群由3个Redis节点组成,每个节点负责一部分数据,三个节点互联组成一个对等的集群,他们之间通过一种特殊的二进制协议交互集群信息。【槽位定位】RC将所 阅读全文
posted @ 2022-01-02 22:18 长江同学 阅读(442) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示