随笔分类 -  redis

摘要:前言 使用redis作为缓存,必然存在redis缓存和DB数据一致性的问题:某一时刻,redis缓存数据和DB数据不一致 一 缓存更新策略 按照缓存更新的方式大致分为: 内存淘汰、过期删除、主动更新 一) 内存淘汰 利用Redis的内存淘汰策略,当内存不足时自动进行淘汰部分数据,下次查询时更新缓存, 阅读全文
posted @ 2023-03-12 19:05 junffzhou 阅读(573) 评论(0) 推荐(0) 编辑
摘要:前言 redis是基于内存的,如果内存超过限定值(redis配置文件的maxmemory参数决定redis最大内存使用量),导致新的数据存不进去,此时redis会根据淘汰策略删除一些数据 一 内存淘汰策略 淘汰策略由redis配置文件的maxmemory-policy参数决定设置,默认为no-evi 阅读全文
posted @ 2023-03-12 18:56 junffzhou 阅读(192) 评论(0) 推荐(0) 编辑
摘要:简单动态字符串(simple dynamic string,SDS) redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS作为redi 阅读全文
posted @ 2022-12-17 18:04 junffzhou 阅读(94) 评论(0) 推荐(0) 编辑
摘要:双向链表(linkedlist) redis的双向链表(linkedlist)是基于链表的一种数据结构 链表是一种常见的基础数据结构,是一种非顺序存储数据的线性表,在每一个节点里存储了下一个节点的指针 链表充分利用内存实现灵活的内存动态管理,但是失去了数组随机读取的优点,同时链表由于增加了结点的指针 阅读全文
posted @ 2022-12-17 18:03 junffzhou 阅读(139) 评论(0) 推荐(0) 编辑
摘要:压缩列表(ziplist) 压缩列表(ziplist)是redis 为了节约内存而开发的,由连续内存块组成的顺序型数据结构,适用于长度较小的值 存取的效率高,内存占用小,但由于内存是连续的,在修改的时候要重新分配内存 同时满足以下两个条件时,使用ziplist: 1) 元素长度都小于64Byte 2 阅读全文
posted @ 2022-12-17 18:03 junffzhou 阅读(415) 评论(0) 推荐(0) 编辑
摘要:快速列表(quicklist) redis3 .2版本之前,List类型数据使用的底层数据结构是压缩列表(ziplist)或双向链表(linkedlist),当列表元素个数比较少并且每个元素占用空间比较小时使用压缩列表;当列表元素个数比较多或者某个元素占用空间比较大的时使用双向链表 redis3 . 阅读全文
posted @ 2022-12-17 18:03 junffzhou 阅读(167) 评论(0) 推荐(0) 编辑
摘要:字典(dict) 字典又称为符号表或者关联数组、或映射(map),是一种用于保存键值对(key-value)的抽象数据结构 字典中的每个key都是唯一的,通过key对值来进行查找或修改,时间复杂度为 O(1) redis的底层数据结构字典又使用了哈希表,一个哈希表包含多个哈希表节点,每个哈希表节点保 阅读全文
posted @ 2022-12-17 18:03 junffzhou 阅读(218) 评论(0) 推荐(0) 编辑
摘要:跳表(跳跃表, skiplist) 跳跃表(skiplist)是用于有序元素序列快速搜索查找的数据结构,跳表是一个随机化的数据结构,实质是一种可以进行二分查找的、具有层次结构的有序链表 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找,平均期望的查找、插入、删除时间复杂度都是O(log 阅读全文
posted @ 2022-12-17 18:03 junffzhou 阅读(373) 评论(0) 推荐(0) 编辑
摘要:整数集合(intset) 当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis会使用整数集合(intset)作为集合键的底层实现 整数集合用于保存整数值的集合抽象数据类型,它可以保存类型为int16_t、int32_t 或者int64_t 的整数值,并且保证集合中不会出现重复元素 它 阅读全文
posted @ 2022-12-17 18:02 junffzhou 阅读(109) 评论(0) 推荐(0) 编辑
摘要:五种基本数据类型 redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是:String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的类型, 阅读全文
posted @ 2022-12-17 18:02 junffzhou 阅读(1192) 评论(0) 推荐(0) 编辑
摘要:一、redis为何是单线程 官方给出的答案: 因为 Redis 是基于内存的操作,CPU 不会成为 Redis 的瓶颈,而最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了 具体原因: 1) 不需要性能消耗的锁 redis 的 Li 阅读全文
posted @ 2022-12-17 18:02 junffzhou 阅读(431) 评论(0) 推荐(0) 编辑
摘要:redisObject对象 无论什么数据类型,redis都是以key-value形式保存,并且所有的key都是字符串redis每存储一条数据,都会生成一个redisObject对象,通过redisObject对象来表示存储的数据 redisObject对象是联结外部数据类型和redis底层数据结构的 阅读全文
posted @ 2022-12-10 17:31 junffzhou 阅读(140) 评论(0) 推荐(0) 编辑
摘要:一、缓存穿透 1 什么是缓存穿透 缓存穿透是指查询一个在redis和DB中都不存在的数据,redis中查不到去DB查,DB查不到则不写入redis,导致每次查询这个数据都要穿过redis穿透到DB 2 缓存穿透产生的情况 1) 业务不合理的设计 2) 误操作: 误删除了redis和DB中的数据 3) 阅读全文
posted @ 2022-12-04 18:05 junffzhou 阅读(109) 评论(0) 推荐(0) 编辑

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