Redis是什么?
Redis(Remote Dictionary Server)是一个使用 C 语言编写的键值对数据库,也是非关系型数据库
Redis 的数据是存在内存中的。所以读写速度非常快
Redis的单条命令是原子性的。
Redis优缺点?
优点:
- 基于内存操作,内存读写速度快。
- 支持多种数据类型,包括String、Hash、List、Set、ZSet等。
- 支持持久化。Redis支持RDB和AOF两种持久化机制,持久化功能可以有效地避免数据丢失问题
缺点: - 对结构化查询的支持比较差。
- 单线程模型:Redis采用单线程模型来处理客户端请求,这意味着在高并发场景下,性能可能受到限制
Redis为什么这么快?
基于内存:Redis是使用内存存储,没有磁盘上的开销
IO多路复用模型:Redis 采用 IO 多路复用技术。实现高吞吐的网络IO
单线程模型:避免了多线程频繁上下文切换带来的开销
Redis应用场景有哪些?
- 缓存热点数据,缓解数据库的压力。
- 利用 Redis 原子性的自增操作,可以实现计数器的功能,比如统计用户点赞数
- 好友关系,利用集合的一些命令交集、差集,实现共同好友、共同爱好之类的功能
Redis事务的原理
Redis事务的原理是将一个事务范围内的若干命令发送给Redis,然后再让Redis依次执行这些命令。
Redis事务支持隔离性吗,保证原子性吗,支持回滚吗??
Redis 是单线程程序,并且它保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令为止。因此,Redis 的事务是总是带有隔离性的。
Redis单条命令是原子性执行的,但事务不保证原子性。事务中任意命令执行失败,其余的命令仍会被执行。
持久化机制(双写一致性)
持久化就是把内存的数据存储起来,防止服务突然中止导致内存数据丢失。
RDB会根据指定的规则定时将内存中的数据存储在硬盘上,
AOF在每次执行完写命令后将写命令记录下来。
一般将两者结合使用。
RDB 是 Redis 默认的持久化方案。
优点:
- Redis 加载 RDB 恢复数据远远快于AOF 的方式。
缺点: - RDB方式频繁执行成本比较高。
AOF方式
AOF:记录每次写命令,Redis重启后会重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,AOF 是Redis持久化的主流方式。
优点: - AOF可以更好的保护数据不丢失,
缺点: - 对于同一份文件AOF比RDB需要更大得存储空间。
- 数据恢复比较慢。
RDB和AOF如何选择?
通常来说,应该同时使用两种持久化方案,以保证数据安全。
如果数据能够承受一定时间的数据丢失,只使用RDB也可行。
当RDB与AOF两种方式都开启时,Redis会优先使用AOF恢复数据,因为AOF保存的文件比RDB文件更完整