序言
虽然 Redis 的性能非常优秀,能快速处理请求,但它有时也会衰老为步履蹒跚的老人,比如面对以下情况:
试问谁不想拥有青春永驻,充满活力呢?
Redis 也妄想如此,但可惜的是它只是一项技术工具,无法自适应极端场景。不过没关系,程序员作为投骰子的那个人,完全可以将其扩展,为这头猛虎安上翅膀。
面对情况 ①,可能是业务场景数据结构使用的不合理,可视具体代码考虑优化,本文不做详细讨论。
面对情况 ②,是否可以将单台 Redis 实例增加为多台,将第一台 Redis 实例中的数据复制到其他实例中呢?
Redis 本身考虑到了第 ② 点,因此实现了一个功能——主从复制。
由于 Redis 是内存数据库,因此会将自己的数据库状态存储在内存当中,但是,一旦服务器进程出现意外退出了,若不想办法将存储在内存中的数据库状态保存到磁盘中,则服务器中的数据库状态也会消失不见。
为了避免数据的意外丢失,需要将内存中的数据库状态保存到磁盘中。
为此,Redis 提供了持久化技术以达到该目的。
在 Redis 中,持久化拥有以下三种方式:
Redis DataBase):快照方式,将某一个时刻的内存数据,以二进制的方式写入磁盘;Append Only File):文件追加方式,记录所有的操作命令,并以文本的形式追加到文件中; 下面,就跟随本文来了解一下这三种方式吧!
对于数据库事务而言,通常包含了一个序列的对数据库的读/写操作,其主要作用有两个:
当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,若事务中有的操作没有成功完成,则事务中的所有操作都需要回滚),回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
数据库的事务是通过 DBMS 完成处理的,那么,对于 Redis 而言,又是如何保证事务的呢?