1.什么是redis?
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
字符串类型 (String)
散列类型 (Hash) ----类似jdk1.8之前的HashMap(数组+链表)
列表类型 (List)
集合类型 (Set)
有序集合类型 (Zset)
2.redis的应用场景
String应用场景
- 缓存
Mysql作为存储层,Redis作为缓存层,绝大部分数据从Redis获取,降低数据库压力- 计数、限速
比如防止恶意刷短信验证码,某段时间内可以操作的次数等等- 共享session
分布式服务中用户session信息(比如登录信息)保存在服务器中,负载均衡用户的请求会被均衡到各个服务器造成用户需要重新登陆,可以将用户的登录信息存到Redis中进行统一管理
List应用场景
- 消息队列
- 缓存列表 ---- 有序可重复
- 实现其他数据结构
Hash应用场景
- 缓存对象
(key -(key - value))
Set应用场景
- 缓存集合 ---- 无序不可重复(去重数据)
Zset应用场景
- 缓存集合 ----有序不可重复
常用经典场景排行榜
除此之外,Redis还可以实现分布式锁,在分布式场景下,无法使用单机环境的锁对多个节点的进程进行同步,可以使用Redis自带的SETNX命令实现分布式锁,除此之外还可以使用官方提供的RedLock分布式锁实现。
3.Redis的优缺点
优点
- 对数据高并发读写(基于内存)
对海量数据的高效率存储和访问(基于内存)
对数据的可扩展性和高可用性
垂直扩展:提升硬件
水平扩展:集群- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis支持数据的备份,即master-slave模式的数据备份。
缺点
- redis(ACID处理非常简单)无法做到太复杂的关系数据库模型
4.Redis的持久化机制
redis是一个内存数据库,当Redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
- RDB持久化(默认方式)
在某个时间节点将Redis的数据保存到一个RDB文件中,该RDB文件是一个二进制文件,可以还原成Redis数据。
Redis提供了两个命令来创建RDB文件SAVE和BGSAVE(推荐,不阻塞Redis服务器的情况下执行),如果没有启用AOF持久化,Redis会自动将RDB文件还原数据- AOF持久化
将Redis的所有写命令保存到AOF日志文件中,读取AOF文件中的写命令就可以还原服务关闭前的数据了
AOF安全性要比RDB持久化的安全性高(丢失数据)
优先使用AOF,需要开启AOF持久化,开启后默认使用AOF