说说你对redis的理解

数据结构

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

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

list:消息队列

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

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

 @Override
    public 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。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值