Redis基础知识

115 阅读2分钟

Redis是一个高性能的非关系型key-value库, 常用来做分布式锁, 缓存.

Redis的键为String类型, 值的类型可以是:

string, list, hash(内部还有域值两个字段), set, zset

Redis特点

  1. 读写速度快. 达到读11w/s, 写8.1w/s. 是直接对内存读写, 时间复杂度可视为O(1); 采用单线程避免线程切换的开销; 采用多路复用的NIO; 有自己的VM, 调用系统调用更快

  2. 支持事务操作, 基本操作都是事务, 且支持将几个操作组合成事务

  3. 支持事务持久化

  4. 支持主从复制, 主机自动将数据复制到从机, 可以读写分离

  5. 容量受到物理内存大小限制

  6. 不具备自动容错和恢复功能

  7. 较难支持在线扩容, 需要准备足够内存, 可能利用率低

为什么要使用Redis缓存

缓存的优势

  1. 高性能

    从内存中读缓存更快, 但需要在数据库更新时同步更新缓存

  2. 高并发

    数据库和缓存分别服务, 可以支持更多并发操作

Redis相比map/guava的优势

map/guava是本地缓存, 是java程序内部的, 由JVM负责销毁. 如果创建在实例内部, 则仅该实例可见, 其他实例无法共享

Redis是分布式缓存, 位于程序外部, 可以在多实例间共享

Redis使用场景

计数器

Redis可以直接对String自增自减

会话缓存

可以作为多台应用服务器的统一会话服务器, 存储所有会话信息

分布式锁

Redis 自带的SETNX(set not exist, 若存在则set失败)命令可实现分布式锁,还可以使用官方提供的RedLock(安全, 避免死锁, 可容错)分布式锁实现

Redis持久化

RDB

Redis DataBase缩写快照

Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb.

缺点: 可能丢失数据

AOF

AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。