- Redis为什么快
- (内存操作)完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
- (单线程,省去线程切换、锁竞争的开销)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
- (NIO的IO多路复用模型)使用多路I/O复用模型,非阻塞IO;这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程
最简回答:Redis之所以快是因为它采用了内存存储和非阻塞的I/O模型,避免了磁盘IO的延迟;同时,Redis使用了IO多路复用技术,通过一个线程同时处理多个客户端请求,减少了线程切换的开销,提高了并发处理能力。
- Redis可以用来做什么
- 缓存
- 排行榜
- 分布式计数器
- 分布式锁
- 消息队列
- 分布式token
- 限流
最简回答:RDB是Redis的快照持久化方式,通过周期性的快照将数据保存到硬盘,占用更少的磁盘空间和CPU资源,适用于数据备份和恢复,但可能存在数据丢失的风险。AOF是追加日志持久化方式,将每个写操作以追加的方式记录到日志文件中,确保了更高的数据完整性和持久性,但相对于RDB消耗更多的磁盘空间和写入性能,适用于数据持久化和灾难恢复,且可以通过配置实现不同的同步频率。
- Redis的持久化机制
-
在Redis 4.0之后提供了混合持久化的方式,顾名思义就是把RDB持久化和AOF持久化结合起来的一种方式。混合持久化就是快照以一定的频率执行,而在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。
选择RDB还是AOF?
- 如果你的业务场景需要很高的性能,或者宕机之后能够尽快的恢复,而对数据完整性的要求不是那么高,那么可以采用RDB持久化的方式。
- 如果你的业务场景对数据完整性的要求很高,那么可以采用AOF的持久化方式,而至于采用那种回写策略,则取决于你对数据完整性的要求程度。
- 如果你的业务场景既要兼顾性能,又注重数据完整性,那么可以采用混合持久化的方式。
- 如果你对数据丢失无所谓,追求性能最大化的情况下,甚至可以禁用持久化。
- Redis常用的数据类型
- String:存储单个值,适用于缓存和键值存储,常用命令:SET用于设置值,GET用于获取值。
- List:有序、可重复的字符串集合,适用于消息队列和发布/订阅系统,常用命令:LPUSH用于从列表左侧添加元素,LRANGE用于获取指定范围的元素。
- Set:无序、不可重复的字符串集合,适用于标签系统和好友关系等,常用命令:SADD用于向集合添加成员,SMEMBERS用于获取集合所有成员。
- Hash:字段-值对的无序散列,适用于存储对象、缓存和计数器,常用命令:HSET用于设置字段值,HGETALL用于获取散列的所有字段和值。
- Sorted Set:有序的字符串集合,每个成员关联一个分数,适用于排行榜和按分数范围获取成员,常用命令:ZADD用于添加成员及其分数,ZRANGE用于获取指定范围的成员。