这是我参与「第五届青训营 」笔记创作活动的第8天
预先了解的内容
什么是 Redis?
Redis (Remote Dictionary Server)即远程字典服务,是一个基于内存可选持久化的NoSQL数据库。和Memcached类似,是键值对存储的数据库。它支持字符串、链表、集合、有序集合、哈希等类型,支持push/pop、add、remove、取交集和并集等多种操作,并且这些操作都是原子的。Redis的数据都是缓存在内存中,提高了读写效率,Redis还可选将数据定期写入到记录文件中,并可实现主从同步。
Redis 基本操作
Redis使用各种各样的命令来实现对数据的操作。下面简单介绍几个命令:
-
set key value
将value的值赋值给key
-
get key
获取key的value
-
incr key
将key存储的数字加一
- decr key
将key存储的数字减一
- append key value
将value的值追加到key的末尾
……
Redis Pipelining原理
Redis是一种基于C/S模型的TCP服务,Redis进行一次查询的流程如下:
- 客户端发送一个查询请求,并监听套接字返回,等待服务器响应
- 服务端处理命令,将结果返回给客户端
每次查询信息时,都会进行这样一个循环,单次查询时还没什么,但是批量查询时,每一次的RTT加起来就会导致整体查询耗时大大增加。这时就可以引入管道技术。管道技术允许客户端先后发送多个请求,并在最后一次请求中批量查询请求结果。
课中
Redis持久化——RDB和AOF
Redis是一个基于内存的键值数据库,如果我们想将这些数据写入到磁盘中,Redis提供两种方式来持久化数据:RDB和AOF。
RDB持久化
RDB持久化的原理是,定期备份内存中的数据,将数据写入磁盘。当 Redis 服务下次启动时,可以从RDB文件中直接恢复数据。RDB适合大规模的数据恢复,但是它不保证数据的完整性和一致性,并且在备份的过程中占用较多内存。
AOF持久化
AOF持久化的原理是,每次Redis服务器执行一个修改数据的操作时,都将这次操作和所操作的数据记录成日志保存在磁盘中。Redis服务器重启后,再重新执行一遍AOF日志中的操作即可恢复全部数据。AOF持久化的优点是能保证更好的数据完整性和一致性,缺点是随着操作的增多,日志文件也会越来越大,影响数据恢复的速度。
Redis 单线程命令处理
Redis服务器处理命令的过程中是单线程的。每个命令都由同一个线程处理,这样可以保证操作的原子性。但是Redis服务端却不只运行一个线程,一些异步操作还是要分配给后台线程处理的。
Redis 单线程并非常快的原因:
- 数据存储在内存中,读写速度快,不受磁盘IO限制
- 数据结构设计简单而高效,很多操作的速度很快
- 单线程,没有竞争和死锁
- 采用IO多路复用架构,异步IO