前言
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。
传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。
实操
list相关操作
工作中相关应用
多实例场景中, 有时候需要保持对一个数据的统一读取和写入, 这时候redis就是一个很好的组件, 可以通过redisclient.eval通过lua脚本的方式对redis进行原子性操作,多实例情况下, 也不会对redis数据进行脏读脏写。
在实际应用中,需要注意的一点就是, redis本身的操作,是原子性操作,但是在服务实际的处理中, 业务场景场景复杂, 往往一个业务场景需要很多个原子操作组合在一起, 这种情况下, 本服务的业务就容易被其他的redis操作,打断, 所以需要设计好业务使用redis的技术方案,上述说的redisclient.eval就是一个方式,通过redis的lua脚本将全部原子操作封装在一次成为一个新的原子操作。
关键知识点
redis持久化就是把内存的数据写到磁盘中,防止服务宕机导致内存数据丢失
redis通过两种持久化方式:RDB(默认)和AOF
RDB: redis DataBase
功能核心函数rdbsave(生成RDB文件)和rdbload(从磁盘中加载文件到内存)两个函数
RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。
AOF:Append-only file
每当执行服务器任务或者函数时flushAppendOnlyFile函数都会被调用,这个函数执行以下两个工作:
write:根据条件,将aof_buf的缓存写入到AOF文件
save:将aof文件保存到磁盘
从这力可以看出,RDB类似于快照,而AOF类似于日志文件,一个是保存原来数据,一个是将操作记录成日志保存下来