一、为什么要使用Redis
- 内存数据库,速度很快
- 工作单线程worker,串行化,原子操作,IO线程是多线程的。避免上下文切换
- 使用 IO模型,天生支撑高并发
- kv模型,v具有类型结构
- 具有本地方法,计算数据移动
- 二进制安全,value值最大为512MB
二、Redis是多线程还是单线程
Redis在6.0版本之前是单线程的,到了6.0版本后,IO流是一个线程池,是多线程的,但工作线程依旧是单线程。
三、Redis持久化方法
Redis是一个内存数据库,当遇到突然断电或者服务器崩溃时,里面的数据就会全部丢失,这时就需要Redis持久化。
Redis持久化的工作机制就是将数据保存到磁盘中,利用永久性存储介质来保存数据,在特定时间将保存的数据进行恢复
有两种方法可以实现:
- AOF:存储操作过程,关注点在数据的操作过程
- RDB:存储数据结果,关注点在数据
四、Redis持久化的两个方法
3.1 RDB
在指定的时间间隔内将内存中的数据集中写进磁盘中,也就是快照文件,数据恢复就是将快照文件读到内存中。
Redis会利用fork函数创建一个子线程进行持久化,会先将数据写入到一个临时文件中,等持久化过程结束后,将临时文件替换上次持久化的文件。
fork函数的作用就是复制一个当前线程作为当前线程的子线程,子线程与当前线程的所有数据数值一致。
RDB的优缺点
缺点:
- 快照时间有间隔,不能实时备份,丢失数据可能会很多
- 在数据集比较庞大时,开启子线程备份数据,fork()运行会非常耗时,服务器会在一定时间内停止处理客户端。
优点:
- 恢复数据的速度快
- 备份的文件就是原始文件的内存大小,不会额外占用内存空间
RDB的触发方式
- 手动触发:通过书写命令触发
- 自动触发:通过配置参数设置自动触发
3.2 AOF
会将客户端的写操作以日志的形式追加到appendonly.aof文件末尾,在Redis服务器重启后,加载aof文件中的所有命令,用来恢复数据。
AOF的优缺点
缺点:
- 生成的文件体积较大
- 数据恢复速度较RDB更慢
优点:
- 数据安全性较高,不容易丢失数据
- AOF文件有序保存所有写操作,可读性较高
AOF的触发方式
- 手动触发:通过bgrewriteaof命令:重写AOF持久化生成aof文件
- 自动触发:redis默认没有开启AOF。需要通过配置文件开启
4 Redis结构体
四、安装
1.启动server
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?
典型回答
通常是使用 KEYS 命令或 SCAN命令配合模式匹配,但是KEYS命令在数据量较大时,可能会导致性能问题,因为它会阻塞服务器并消耗大量资源,因此在生产环境中,推荐使用SCAN命令使用类似的功能。
SCAN是一个基于游标的迭代器,SCAN在每次被调用之后,都会向用户返回一个新的游标,用户在下一次迭代时需要使用这个游标作为SCAN命令的游标参数,来延续迭代过程。当游标设置为0时,开始第一次迭代,当返回的游标为0时,表示迭代结束。SCAN返回的是一个包含两个元素的数组,第一个元素是用于下次迭代的游标,第二个元素是一个包含所有被迭代的元素,元素的数量由迭代器决定。