一、为什么要使用Redis
- 内存数据库,速度很快
- 工作单线程worker,串行化,原子操作,IO线程是多线程的。避免上下文切换
- 使用 IO模型,天生支撑高并发
- kv模型,v具有类型结构
- 具有本地方法,计算数据移动
- 二进制安全,value值最大为512MB
二、Redis是多线程还是单线程
Redis在6.0版本之前是单线程的,到了6.0版本后,IO流是一个线程池,是多线程的,但工作线程依旧是单线程。
三、Redis持久化方法
有两种方法可以实现:
- RDB:存储数据结果,关注点在数据
- AOF:存储操作过程,关注点在数据的操作过程
3.1、Redis持久化的两个方法
3.1.1 RDB
在指定的时间间隔内将内存中的数据集中写进磁盘中,也就是快照文件,数据恢复就是将快照文件读到内存中。
RDB的优缺点
缺点:
- 快照时间有间隔,不能实时备份,丢失数据可能会很多
- 在数据集比较庞大时,开启子线程备份数据,fork()运行会非常耗时,服务器会在一定时间内停止处理客户端。
优点:
- 恢复数据的速度快
- 备份的文件就是原始文件的内存大小,不会额外占用内存空间
RDB的触发方式
- 手动触发:通过书写命令触发
- 自动触发:通过配置参数设置自动触发
3.1.2 AOF
会将客户端的写操作以日志的形式追加到appendonly.aof文件末尾,在Redis服务器重启后,加载aof文件中的所有命令,用来恢复数据。
AOF的优缺点
缺点:
- 生成的文件体积较大
- 数据恢复速度较RDB更慢
优点:
- 数据安全性较高,不容易丢失数据
- AOF文件有序保存所有写操作,可读性较高
AOF的触发方式
- 手动触发:通过bgrewriteaof命令:重写AOF持久化生成aof文件
- 自动触发:redis默认没有开启AOF。需要通过配置文件开启
四、Redis结构体
安装docker
docker run -d -p 6379:6379 --name redis01 redis:7.2.4
以上命令,每次启动新的Redis容器,数据会丢失。
我们需要挂载数据文件,在宿主机上面,这样就可以持久化数据.
docker run -p 6379:6379 -d --name redis01 --restart=always
-v /opt/redis/redis.conf:/etc/redis.conf
-v /opt/redis/data:/data
redis:7.4.0 redis-server /etc/redis.conf
//如果拉不下来请使用m.daocloud.io/docker.io/redis:7.4.0
五、在百万keys的Redis中,如何模糊查询某一个key?
典型回答
查找key有两种方法,第一种是用keys,第二种是scan。keys在数据量比较多的时候,会阻塞服务器,浪费服务器资源,所以通常情况下用scan,scan是一个基于游标的迭代器,它会在用户每次调用时,返回一个包含两个元素的数组,一个是下次迭代的游标,一个是所有迭代的元素,当返回的游标为0时,表示迭代结束。