上一页 1 2 3 4 5 6 ··· 15 下一页
摘要: LRU中,系统会根据使用的时间进行排序,内存紧张时会将最久没有用过的一批数据排除出去。LFU是按照最近的访问频率进行排序,它比LRU更加精准地表示了一个key被访问得热度。LFU是作者在Redis4.0里引入的一个新的淘汰策略。 在这里我们回顾以下Redis内存不足时的淘汰策略:noeviction 阅读全文
posted @ 2022-01-21 23:17 长江同学 阅读(1346) 评论(0) 推荐(0) 编辑
摘要: Rax全称redis tree,是一个有序字典树,可以根据key进行排序,支持快速定位、插入与删除,与hash/zset不同在于hash不具备排序功能,zset则根据score进行排序。【trie简介】在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串 阅读全文
posted @ 2022-01-20 14:26 长江同学 阅读(1862) 评论(0) 推荐(0) 编辑
摘要: listpack是ziplist结构的改进版,在存储空间上更加节省,而且比ziplist也更精简。 struct listpack<T>{ int32 total_bytes; //总字节数 int16 size; //元素个数 T[] entries; //紧促排列的元素列表 int8 end; 阅读全文
posted @ 2022-01-17 22:06 长江同学 阅读(775) 评论(0) 推荐(0) 编辑
摘要: zset是一个符合结构,一方面需要一个hash结构来存储value和score的关系,另一方面需要提供按照score的排序,还需要能够指定score的范围来获取value列表的功能,这需要跳表结构来支持,即skiplist。 【基本结构】 Redis的跳跃列表共有64层,每个kv块对应的结构如下面的 阅读全文
posted @ 2022-01-16 21:34 长江同学 阅读(89) 评论(0) 推荐(0) 编辑
摘要: Redis的早期版本存储list列表的数据结构是ziplist和普通的双向链表linkedlist,元素个数少时使用ziplist,多时用linkedlist。 //链表的节点 struct listNode<T> { listNode* prev; listNode* next; T value; 阅读全文
posted @ 2022-01-15 19:57 长江同学 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 【ziplist结构】Redis为了节约内存空间,zset和hash在元素个数较少的时候使用的是ziplist结构进行存储。zip+list,我们可以想到这应该是一系列的zip结构的数据链在了一起。压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。 struct ziplist<T 阅读全文
posted @ 2022-01-15 12:13 长江同学 阅读(712) 评论(0) 推荐(0) 编辑
摘要: 【内部使用到字典的结构】>hash>整个Redis库中的key和value也组成了一个全局字典>带过期时间的key集合>zset中存储value和score值的映射关系也是通过字典结构实现的 struct RedisDb { dict* dict; // all keys key=>value di 阅读全文
posted @ 2022-01-14 18:29 长江同学 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 【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 长江同学 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 两张表的字段分别是两种不同的比较规则,在进行联表查询的时候就会出现上述错误。字符比较规则有各个层级的,比如数据库、表、字段,这里只需要保证字段的比较规则一致即可。但是为了整体一致,除了特殊的业务需求,我们最好还是保证库、表、字段的比较规则一致。 -- -- Table structure for a 阅读全文
posted @ 2022-01-12 21:48 长江同学 阅读(15318) 评论(0) 推荐(0) 编辑
摘要: 【指令安全】Redis中有一些需要慎重使用的危险指令,keys指令会导致服务卡顿,flushdb和flushall会让Redis的所有数据全部清空,config可以从客户端修改服务的密码并且立即生效。对于这些危险的指令,Redis在配置文件提供了rename-command指令用于将危险的指令修改成 阅读全文
posted @ 2022-01-10 22:33 长江同学 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 《Redis深度历险 核心原理与应用实践》中有一小节讲到了优雅地使用Jedis,整个过程里包含了一些代码优化的思路,对于我们写出优雅代码也有一定的启示。 【问题】Java程序一般都是多线程的应用,我们很少直接使用Jedis,而是从Jedis对象池中取出Jedis选取一个Jedis对象,单线程独占使用 阅读全文
posted @ 2022-01-06 22:32 长江同学 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 【懒惰删除】Redis内部利用单线程处理了绝大部分指令,但对于一些耗时的操作,还有几个异步线程在做支撑。对于大部分key来说,del指令非常快,但如果key的value是一个很大的对象,那么del就会造成卡顿,所以Redis4.0引入了unlink指令,可以对删除操作进行懒处理,即不立即进行删除操作 阅读全文
posted @ 2022-01-06 21:23 长江同学 阅读(569) 评论(0) 推荐(0) 编辑
摘要: 【淘汰策略】当Redis内存超过物理内存时,内存的数据会开始和磁盘产生频繁地交换(swap),这会大大降低Redis的性能。在生产环境我们一般不允许出现Redis的交换行为,为了限制最大使用内存,Redis提供了maxmemory参数,当实际内存超过这个值时,Redis提供了几种可选策略来处理:1. 阅读全文
posted @ 2022-01-06 20:10 长江同学 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 单线程Redis内部的过期key是怎么处理的?会不会同一时刻过期key太多,导致来不及删除? 【过期key集合】Redis会将每个设置了过期时间的key放入一个独立的字典里,以后会定时遍历这个字典来删除到期的key。除了定时遍历,还会使用惰性策略,即客户端访问这个key时,Redis发现这个key过 阅读全文
posted @ 2022-01-05 20:55 长江同学 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: Info指令可以查询Redis内部的一些运行情况Info主要分为9大块: Server:服务器运行的环境参数 Clients:客户端相关信息 Memory:服务器运行内存统计数据 Persistence:持久化信息 Stats:通用数据统计 Replication:主从复制相关信息 CPU:CPU使 阅读全文
posted @ 2022-01-04 22:32 长江同学 阅读(449) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 15 下一页