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

简介: 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随机删除
  • 加入键的时候如果过期,从过期键从随机删除
  • 过期之后马上删除
  • 删除过期键中最少使用频率的
相关文章
|
5月前
|
NoSQL 安全 关系型数据库
Redis:持久化的两种方式
Redis持久化机制主要包括RDB和AOF两种方式。RDB通过生成数据快照进行持久化,支持手动或自动触发,具有加载速度快、文件紧凑等特点,但无法实时保存数据。AOF则记录每个操作命令,保障数据更安全,支持多种写入策略,并可通过重写机制优化文件大小。两者各有优劣,常结合使用以兼顾性能与数据安全。
|
5月前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
8月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
322 9
|
9月前
|
缓存 NoSQL 算法
Redis数据库的键值过期和删除机制
我们需要注意的是,虽然Redis提供了这么多高级的缓存机制,但在使用过程中,必须理解应用的特性,选择合适的缓存策略,才能最大化Redis的性能。因此,在设计和实施应用程序时,理解应用的数据访问模式,以及这些模式如何与Redis的缓存机制相互作用,尤为重要。
301 24
|
存储 NoSQL 安全
Redis的两种持久化方式---RDB、AOF
通过本文的介绍,我们详细讲解了Redis的两种主要持久化方式:RDB和AOF。每种方式都有其独特的优缺点和适用场景。在实际应用中,可以根据具体需求选择合适的持久化方式,或者同时启用RDB和AOF,以达到最佳效果。希望本文能帮助您更好地理解和应用Redis的持久化机制,构建高效、可靠的数据存储解决方案。
1140 79
|
11月前
|
NoSQL Redis
Redis的数据持久化策略有哪些 ?
Redis 提供了两种方式,实现数据的持久化到硬盘。 1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作 RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )
|
存储 NoSQL Redis
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
808 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
224 7
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
266 5
|
NoSQL Redis
03- Redis的数据持久化策略有哪些 ?
Redis的数据持久化包括两种策略:RDB(全量快照)和AOF(增量日志)。RDB在指定时间间隔将内存数据集保存到磁盘,而AOF记录所有写操作形成日志。从Redis 4.0开始,支持RDB和AOF的混合持久化,通过设置`aof-use-rdb-preamble yes`。
191 1