Redis-持久化-淘汰机制-IO策略

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis-持久化-淘汰机制-IO策略

六、Redis

1. redis为什么快

完全基于内存操作

数据结构简单,对数据操作简单

redis是单线程避免了上下文切换带来的性能问题,也不用考虑锁的问题

采用非阻塞的IO多路复用机制

edis不是完全多线程的,在核心的网络模型中是多线程的用来处理并发连接,但是数据的操作都是单线程。Redis坚持单线程是因为Redis的性能瓶颈是网络延迟而不是CPU,多线程对数据读取不会带来性能提升。

2. redis持久化机制

快照持久化RDB

bgsave 调用之后保存快照

save 根据配置保存 save 600 1 如果600秒执行了一条命令就持久化

redis的默认持久化机制,通过父进程fork一个子进程,子进程将redis的数据快照写入一个临时文件,等待持久化完毕后替换上一次的rdb文件。整个过程主进程不进行任何的io操作。持久化策略可以通过save配置单位时间内执行多少次操作触发持久化。所以RDB的优点是保证redis性能最大化,恢复速度数据较快,缺点是可能会丢失两次持久化之间的数据

追加文件持久化AOF

通过appendfsync配置

always 每个命令追加

everysec 每秒追加

no 丢给操作系统

只能使用everysec,always一次只能写入条指令,会引发严重的写入方法,导致固态硬盘寿命降低,no 很吃性能,redis会变慢,everysec基本和不开一样,几乎不影响性能

AOF一直追加会占用大量空间,需要做重写操作,压缩空间,但是重写依旧需要fork子线程,那么RDB持久化的问题在AOF中同样会出现

以日志形式记录每一次的写入和删除操作,策略有每秒同步、每次操作同步、不同步,优点是数据完整性高,缺点是运行效率低,恢复时间长

3. Redis如何实现key的过期删除?

定期删除 :Redis 每隔一段时间从设置过期时间的 key 集合中,随机抽取一些 key ,检查是否过期,如果已经过期做删除处理。

惰性删除 :Redis 在 key 被访问的时候检查 key 是否过期,如果过期则删除。

4. Redis数据类型应用场景

String:可以用来缓存json信息,可以用incr命令实现自增或自减的计数器

Hash:与String一样可以保存json信息

List:可以用来做消息队列,list的pop是原子性操作能一定程度保证线程安全

Set:可以做去重,比如一个用户只能参加一次活动 ;可以做交集求共友

SortSet :有序的。可以实现排行榜

5. Redis并发缓存三大问题

详解缓存雪崩、缓存击穿、缓存穿透问题,一文掌握,干货不断

6. Redis实现发布文章、点赞排序

仅一周内可以点赞,如果长期点赞,取消一个zset即可

需要的数据结构

一个hash存储文章信息 包括点赞

两个zset 一个存储文章发布时间 一个存储分数(每次点赞给一个分数,自定义,利于排序)

一个set存储投票过的用户 保证只能投票一次

发布流程

使用incr计数器创建文章id

sadd将文章发布者id添加到点赞集合,使用expire设置过期时间,一周后自动删除

HMSET存储文章信息到hash中

执行ZADD将文章放到两个zset中

点赞流程

点赞的时候,使用ZSCORE从zset获取发布时间

在一周内就使用SADD将用户添加到set

使用ZINVRBY对文章加分

使用HINCRBY对文章点赞更新+1

取出最高评分和最新发布文章

使用ZREVRANGE可以按照分值大小取出文章id

对每个id执行HGETALL,获取全部信息

分组功能

为每个分组添加一个set,在分组里面的文章id添加到set里面

扩展

ZINTERSTORE可以对两个集合取交集,获取最多点赞和最新发布的文章

如果要实现反对投票可以参考投票减少分值和点赞即可

暂时没有考虑事务问题

7. Redis的扩展数据类型

  • Bitmap:主要用来做二进制数据的统计(数据内容只有0/1状态);
  • HyperLogLog:主要用来统计海量的不重复数据数量;
  • GEO:主要用来保存经纬度数据。

8. 五种基本数据类型的底层实现

String 简单动态字符串

9. Redis事务

redis事务是将多个命令缓存起来,当发送exec命令时,依次执行缓存中的所有命令。redis的事务没有隔离级别,也不保证原子性,更不支持回滚操作。redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

10. Redis淘汰策略与过期策略

过期策略

定时删除:将设置了TTL的key单独存放到一个字典,通过过期时间去访问是否达到删除时间,这里采用贪心算法,每次随机访问一些key,如果过期就删除,假设每次都遍历全部,那么很吃性能

惰性删除:当我访问key之前先判断是否应该删除。

定时删除会导致有些key应该删了但是没有删,所以使用惰性删除规避。不管是定期采样删除还是惰性删除都不是一种完全精准的删除,就还是会存在key没有被删除掉的场景,所以就需要内存淘汰策略进行补充。

淘汰策略

仅仅列举一些常见的策略

  • 加入键的时候如果过期,从所有key随机删除
  • 加入键的时候如果过期,从过期键从随机删除
  • 过期之后马上删除
  • 删除过期键中最少使用频率的
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5天前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
34 16
|
5天前
|
存储 NoSQL Redis
Redis的数据过期策略有哪些 ?
Redis 采用两种过期键删除策略:惰性删除和定期删除。惰性删除在读取键时检查是否过期并删除,对 CPU 友好但可能积压大量过期键。定期删除则定时抽样检查并删除过期键,对内存更友好。默认每秒扫描 10 次,每次检查 20 个键,若超过 25% 过期则继续检查,单次最大执行时间 25ms。两者结合使用以平衡性能和资源占用。
28 11
|
5天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
5天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
17天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
51 10
|
17天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
39 4
|
1月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
35 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
1月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
36 2
|
1月前
|
缓存 分布式计算 NoSQL
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
61 2
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
25 2