自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Redis 缓存穿透 + 缓存雪崩 + 缓存击穿的原因和解决方案

在访问缓存层和存储层之前,将存在的key用布隆过滤器提前保存起来,做第一层拦截,当收到一个对key请求时先用布隆过滤器验证是key否存在,如果存在在进入缓存层、存储层。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去了缓存保护后端持久的意义。造成缓存穿透的基本原因有两个。2.采用多级缓存,本地进程作为一级缓存,redis作为二级缓存,不同级别的缓存设置的超时时间不同,即使某级缓存过期了,也有其他级别缓存兜底。

2024-04-30 10:27:45 348

原创 Redis内存淘汰策略

一、Redis有8种内存淘汰策略不会淘汰任何数据,当使用的内存空间超过maxmemory值时,返回错误。筛选设置了过期时间的键值对,越早过期越早被删除。筛选设置了过期时间的键值对,随机删除。使用算法筛选设置了过期时间的键值对LRU:使用时间最早的数据使用算法选择设置了过期时间的键值对。LFU:使用次数最少,使用时间最早的数据在所有键值对中,随机选择并删除数据。用lru在所有数据中筛选。使用lfu算法在所有数据中筛选。二、策略解释。

2024-04-29 14:23:42 199

原创 Redis数据类型Stream及应用场景

基于以上问题,Redis 5.0 便推出了 Stream 类型也是此版本最重要的功能,用于完美地实现消息队列,它支持消息的持久化、支持自动生成全局唯一 ID、支持 ack 确认消息的模式、支持消费组模式等,让消息队列更加的稳定和可靠。Redis Stream 是 Redis 5.0 版本新增加的数据类型,Redis 专门为消息队列设计的数据类型。

2024-04-29 11:34:52 108

原创 Redis数据类型GEO及应用场景

一组经纬度落在某个区间后,就用区间的编码值来表示,并把编码值作为 Sorted Set 元素的权重分数。这样一来,我们就可以把经纬度保存到 Sorted Set 中,利用 Sorted Set 提供的“按权重进行有序范围查找”的特性,实现 LBS 服务中频繁使用的“搜索附近”的需求。LBS(基于位置信息服务Location-Based Service,LBS) 应用访问的数据是和人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就非常适合应用在 LBS 服务的场景中。

2024-04-29 11:26:57 90

原创 Redis数据类型HyperLogLog及应用场景

但要注意,HyperLogLog 是统计规则是基于概率完成的,不是非常准确,标准误算率是 0.81%。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数,和元素越多就越耗费内存的 Set 和 Hash 类型相比,HyperLogLog 就非常节省空间。HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的内存空间总是固定的、并且是很小的。所以,简单来说 HyperLogLog 提供不精确的去重计数。

2024-04-29 11:20:29 199

原创 Redis数据类型BitMap及应用场景

BitMap通过最小的单位bit来进行0|1的设置,表示某个元素的值或者状态,时间复杂度为O(1)。String 类型是会保存为二进制的字节数组,所以,Redis 就把字节数组的每个 bit 位利用起来,用来表示一个元素的二值状态,你可以把 Bitmap 看作是一个 bit 数组。Bitmap 类型非常适合二值状态统计的场景,这里的二值状态就是指集合元素的取值就只有 0 和 1 两种,在记录海量数据时,Bitmap 能够有效地节省内存空间。3.连续签到用户总数。

2024-04-29 11:07:20 187

原创 Redis基本数据类型Zset及应用场景

Zset 类型(有序集合类型)相比于 Set 类型多了一个排序属性 score(分值),对于有序集合 Zset 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合保留了集合不能有重复成员的特性(分值可以重复),但不同的是,有序集合中的元素可以排序。

2024-04-29 10:55:26 219

原创 Redis基本数据类型Set及应用场景

Set 类型比较适合用来数据去重和保障数据的唯一性,还可以用来统计多个集合的交集、错集和并集等,当我们存储的数据是无序并且需要去重的情况下,比较适合使用集合类型进行存储。Set 类型除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。存储某活动中中奖的用户名 ,Set 类型因为有去重功能,可以保证同一个用户不会中奖两次。Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。Set 类型支持交集运算,所以可以用来计算共同关注的好友、公众号等。

2024-04-29 10:45:18 103

原创 Redis基本数据类型Hash及使用场景

Hash 是一个键值对(key - value)集合,其中 value 的形式如: value=[{field1,value1},...{fieldN,valueN}]。Hash 特别适合用于存储对象。Hash类型的结构和对象类型的结构类型,一般用String+Json存储对象信息,对于频繁变动的对象用Hash类型保存对象信息。以用户 id 为 key,商品 id 为 field,商品数量为 value,恰好构成了购物车的3个要素。1.添加商品:HSET cart:{用户id} {商品id} 1。

2024-04-29 10:39:08 204

原创 redis基本数据类型List及应用场景

List 类型的底层数据结构是由双向链表或压缩列表实现的,在 Redis 3.2 版本之后,List 数据类型底层数据结构就只由 quicklist 实现了,替代了双向链表和压缩列表。List 列表是简单的字符串列表,按照插入顺序排序,可以从头部或尾部向 List 列表添加元素。列表的最大长度为 2^32 - 1,也即每个列表支持超过 40 亿个元素。

2024-04-29 10:28:44 105

原创 redis基本数据结构String及应用场景

如果字符串对象保存的是一个字符串,并且这个字符申的长度小于等于 32 字节(redis 2.+版本),那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串,并将对象的编码设置为embstr, embstr编码是专门用于保存短字符串的一种优化编码方式。如果字符串对象保存的是一个字符串,并且这个字符串的长度大于 32 字节(redis 2.+版本),那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串,并将对象的编码设置为raw。4.共享session信息。二、Redis应用场景。

2024-04-29 10:21:04 187

原创 算法基础一

因为不同常数时间的操作,虽然都是固定时间,但还是有快慢之分的。比如,位运算的常数时间原小于算术运算的常数时间,这两个运算的常数时间又远小于数组寻址的时间。如果两个时间复杂度一样的算法,你还要去在时间上拼优劣,就进入到拼常数时间的阶段,简称拼常数项。这就是时间复杂度的意义,它是衡量算法流程的复杂程度的一种指标,该指标只与数据量有关,与过程之外的优化无关。,每一步常数操作的数量,依然如等差数列一般,所以,总的常数操作数量 =,每一步常数操作的数量,如等差数列一般,所以,总的常数操作数量 =

2024-04-28 17:24:16 495

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除