Redis | 青训营笔记

74 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第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进行一次查询的流程如下:

  1. 客户端发送一个查询请求,并监听套接字返回,等待服务器响应
  2. 服务端处理命令,将结果返回给客户端

每次查询信息时,都会进行这样一个循环,单次查询时还没什么,但是批量查询时,每一次的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