1,Redis 介绍
Redis 即远程字典服务,是一个开源的,使用c语言编写,支持网络,可基于内存亦可以持久化的日志型,key-value 的数据库,并提供多种语言的API
2,特性
面试题:为什么要用Redis
1,内存数据库,快 ,很快
2,工作单线程woeker (Redis 6.0之前是单线程的),串行化,原子操作,(IO线程是多线程的 )可以避免上下文切换
3,IO模型,(epoll ),支持高并发
4,kv模型,v具有类型结构
5,具有本地方法,计算向数据移动,(a,b)=> 交集
6,二进制安全,Value 最大就是512M
提问:(面试题) Redis 到底是多线程的还是单线程的?
答:工作线程是单线程的,IO线程是多线程的,多线程请求,单线程工作(在6.0之前是单线程的,之后是工作线程是单线程的,IO线程是多线程的)
3,Docker安装Rrdis
1.启动server
docker run -d -p 6379:6379 --name redis01 redis:7.2.4
上面的命令在我们再次启动新的Redis容器的时候,其中的数据就会消失
所以我们要挂载数据文件来解决这个问题(其实这就是持久化的一种表现,这样的话我们的数据大概率不会丢失,至于现在为什么说是大概,其实不然后面会学到RDB,和AOF,我们在开发的时候会同时使用这两种机制来保证数据不会丢失)
以上的命令 ,在我们每一次重新启动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.2.4 redis-server /etc/redis.conf
并且我们要配置一个redis.conf文件
每个版本不一样,可以上官网查询
复制过来之后 ,我们需要更改三处地方
启动客户端
docker run -it --rm redis:7.0.0 redis-cli -h 192.168.13.45 -p 6379 --raw ##注意要提前关闭防火墙,不然外部访问不了 systemctl stop firewalld
客户端工具
RedisInsight(瑞迪斯洞察) |最好的 Redis GUI
https://redis.com/redis-enterprise/redis-insight/#insight-form
官网连接:Releases · RedisInsight/RedisInsight · GitHubhttps://github.com/RedisInsight/RedisInsight/releases
3,Reids 数据持久化(掌握,面试题)
我们为什么要实现数据持久化?
因为Redis是一个内存数据库,一旦断电,或者服务器程序退出,内存数据库中的数据就会全部丢失,所以需要数据持久化
Redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制
Redis 提供了两种方式
1,RDB:存储数据的结果,关注点在数据上(类似于相机的快照)
2,AOF:存储操作过程,关注点在数据的操作过程(也就是说关注的是命令)
3.1,RDB(Redis DataBase)
在指定的时间间隔内将内存中的数据集中写入磁盘,也就是快照(Snapshot),数据恢复是将快照文件直接读到内存中。
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入一个到一个临时文件(dump.rdb)中,待持久化过程结束后,再用本次的临时文件替换上次持久化后的文件。
fork函数的作用是复制一个与当前进程一样的进程,新进程的所有数据数值都和原进程一致,但是一个全新的进程,并作为原进程的子进程。
RDB的触发方式:
-
手动触发:通过命令手动生成快照 (save,bgsave)
-
自动触发:通过配置参数的设置触发自动生成快照
缺点:
-
快照时间有间隔,不能实时备份,丢失数据可能会比较多
-
开启子进程备份数据,在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端。
优点:
1.恢复数据比较快
2.备份的文件就是原始内存数据的大小,不会额外增加数据占用,
5.2 AOF(Append Only File)
将客户端的每一个写操作命令以日志的形式记录下来,追加到appendonly.aof的文件末尾,在redis服务器重启时,会加载aof文件中的所有命令,来达到数据恢复的目的
当有写命令请求时,会追加到AOF缓冲区内,AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作同步到磁盘的AOF文件中,当AOF文件大小超过重写策略或手动重写时,会对AOF文件进行重写来压缩AOF文件容量,redis服务重启时,会重新加载AOF文件中的写操作来进行数据恢复
AOF的触发方式
1.手动触发
通过bgrewriteaof
命令:重新AOF持久化生成aof文件(触发重写)
2.自动触发
默认情况,redis是没有开启AOF(默认使用RDB持久化),需要通过配置文件开启
AOF的优缺点
优点:
-
数据安全性高,不易丢数据
-
AOF文件有序保存了所有写操作,可读性强
缺点:
-
AOF方式生成文件体积变大
-
数据恢复速度比RDB慢
Reids 统一命令
Redis 命令参考 — Redis 命令参考 (redisfans.com)
http://doc.redisfans.com/
官网