002 Redis 简介
Redis是什么?一款开源的高性能键值对存储数据库。
特点:支持数据类型丰富,支持数据结构,支持内存外持久化等。
SQL与NoSQL
数据模型
关系模型,第三范式
非关系型,键值对,文档,图形数据库等
查询方式
结构化查询语言SQL
各种自定查询语言或方式
并发处理能力
基于锁机制,写操作容易成为瓶颈
性能通常较SQL数据库强,支持高并发读写
事务支持能力
支持ACID事务
部分支持事务,但不如关系数据库
适用场景
OLTP(在线交易)、结构化数据
大数据量、高并发、半结构化或非结构化数据
作用范围
在线事务处理
联机数据分析
优化目标
高并发写性能
大量复杂查询与统计
数据模型
关系模型
事先汇总的模型
查询方式
小规模插入更新选择
大量记录分组统计
系统需求
高可用性、并发性
查询响应速度
基本特性
支持多种数据类型
支持多种编程语言
功能丰富:事务、lua、pub/sub、pipeline
事务:
multi(开启事务)
exec(执行事务)
discard (取消事务)
watch(监视)
lua 脚本 (原子性、实现命令组复用)
格式:eavalsha
script load
script kill
脚本超时
单线程模型
为什么单线程这么快
纯内存访问: Redis将所有数据存储在内存中,内存的访问速度非常快,大约在100纳秒左右。这使得Redis能够达到每秒万级别的访问速度。
非阻塞I/O: Redis采用了epoll作为I/O多路复用技术的实现,在配合自身的事件处理模型下,将epoll中的连接、读写、关闭等操作都转换为事件。这样可以最大程度地减少在网络I/O上的时间消耗,提高了系统的响应速度。
单线程避免了线程切换和竞态产生的消耗: Redis的单线程模型避免了多线程中因线程切换和竞态条件而产生的性能损耗。单线程模型使得数据结构和算法的实现更加简单,同时也避免了锁和线程切换带来的性能开销。
避免上下文的切换 -> Synchronized 锁的升级 【重量级锁】
单线程模型的优势:
简化数据结构和算法实现: 单线程模型使得开发人员能够更轻松地实现复杂的数据结构和算法,相比多线程模型更加简单直观。
避免了线程切换和竞态条件的性能损耗: 在高并发场景下,线程切换和竞态条件是常见的性能瓶颈,而单线程模型避免了这些问题,提高了系统的稳定性和性能表现。
单线程模型的限制:
命令执行时间要求: 单线程模型要求每个命令的执行时间不能过长,否则会造成其他命令的阻塞。这对于高性能的Redis服务来说是致命的限制,因此Redis更适用于快速执行的场景。
bigKey
Last updated