您的位置:首页 > 科技 > 能源 > 说说你对redis的理解

说说你对redis的理解

2024/10/6 16:22:09 来源:https://blog.csdn.net/m0_63803244/article/details/140741450  浏览:    关键词:说说你对redis的理解

数据结构

String:缓存对象、常规计数、分布式锁、共享session信息

hash:(包含键值对的无序散列表)

list:消息队列

set:聚合计算、点赞、公共关注、抽奖活动

zset:(格式key、value、score根据score进行排序)排名,排序

 @Overridepublic Boolean zAdd(String key, Object value, long score) {return redisTemplate.opsForZSet().add(key,value,score);}

在这里插入图片描述

zset是使用跳表实现的:实现了一种「多层」的有序链表

在这里插入图片描述

第一层有五个节点、第二层有三个节点、第三层有1个节点

比如当查找4节点时,先跳到3节点,然后再跳到4节点。时间复杂度O(logn)

线程模型

1.为什么redis快(10w/s)?

  • 操作都是在内存中进行的。

  • 单线程,没有线程的切换。

  • redis的io多路复用

2.redis的单线程

单线程:接收客户端请求–》解析请求—》进行数据读写操作—》发送数据给客户

redis为耗时的操作单独开辟线程,比如关闭文件、AOF刷盘、删除大key值

Redis 6.0 版本之后,也采用了多个 I/O 线程来处理网络请求

事务

lua脚本

日志

1.AOF日志

每次对数据的操作都把命令写入日志。当redis重启时,会读取文件中的命令,重新执行。

写回策略:always、everysec(秒)、no

AOF日志记录的是全量的操作命令,恢复的时候需要全部执行,恢复缓慢。

优点:数据安全性更好、有多种重写策略、可以通过aof文件重写机制优化

缺点:消耗磁盘空间大,当aof文件大且没开启aof重写机制时,恢复慢

2.RDB快照

将某一时刻的内存数据以二进制的形式写入磁盘

rdb比aof效率高,因为rdb是快照的形式恢复。

生成rdb文件的命令:save(阻塞主线程)、bgsave(创建子线程生成rdb文件)

优点::备份速度快,文件体积小。fork子进程,不会阻塞主进程

**缺点:**两次快照之间如果故障就会数据丢失

缓存淘汰和过期删除

1.内存淘汰策略:在内存快满的时候,触发内存淘汰策略。
在这里插入图片描述
策略:

–不进行数据淘汰,当满了之后再插入就通知禁止写入。

–进行淘汰:

-----淘汰设置了过期时间:随机淘汰、淘汰更早的、淘汰最久没使用

​ 淘汰最少使用

------在所有范围内淘汰:随机、最久没使用、最少使用

2.过期删除策略:删除过期的key,采用的是惰性删除+定期删除。

每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com