Redis入门
Redis之父安特雷兹:
Redis之父Salvatore Sanfilippo,一名意大利程序员,大家更习惯称呼他Antirez
Github:http://github.com/antirezhttp://github.com/antirez
个人博客(Antirez):List of posts - http://antirez.com/latest/0
Redis官网(英文网):http://redis.iohttp://redis.io/
Redis官网(英中文网):http://www.redis.com.cnhttp://www.redis.com.cn/
Redis文档:redis中文文档http://www.redis.com.cn/documentation.html
简介:[Redis](Remote Dictionary Server 远程字典服务器)是一个开源的、使用[ANSI C]语言编写的[Key-Value]数据库,支持网络、可基于内存亦可持久化,并提供多种语言的API。Redis是一个高性能的内存存储系统,主要用于缓存,但也支持作为数据库、消息队列和分布式锁等功能
Redis与Mysql数据库的关系
分布式缓存,挡在mysql之前的带刀侍卫
①Redsi是Key-value数据库(NoSQL一种),mysql是关系数据库
②Redis数据库操作主要在内存,而mysql主要存储在磁盘
③Redis在某些场景中要明显优于mysql,比如说计数器,排行榜等方面
④Redis通常用于一些特定的场景,需要与mysql配合使用
Redis与mysql并不是相互替换和竞争关系,而是共用和配合使用
数据模型与用途:
- MySQL:是一种关系型数据库管理系统(RDBMS),基于SQL语言进行数据的增删改查操作。它适合存储结构化数据,如用户信息、订单详情等,并提供了事务支持、ACID属性(原子性、一致性、隔离性、持久性)以及复杂查询的能力。
- Redis:是一个高性能的键值对数据库,支持多种数据结构(如字符串、列表、集合、有序集合、哈希表等)。它通常用于缓存、会话存储、消息队列、排行榜等场景,以提供快速的数据访问和低延迟的响应。
性能与扩展性:
- MySQL:在处理大量数据和复杂查询时表现出色,但性能可能受到磁盘I/O和锁机制的影响。MySQL支持水平扩展(通过分片或复制)和垂直扩展(通过升级硬件)。
- Redis:以其极快的读写速度和低延迟著称,适合处理高并发场景。Redis的数据存储在内存中,因此访问速度非常快。它支持主从复制和集群模式来实现高可用性和扩展性。
持久化机制:
- MySQL:提供了多种持久化机制(如InnoDB存储引擎的崩溃恢复、日志文件等),确保数据在系统故障后能够恢复。
- Redis:虽然数据主要存储在内存中,但也提供了两种持久化机制:RDB(快照)和AOF(追加文件),以便在系统重启后恢复数据。
事务支持:
- MySQL:提供了完整的事务支持,确保数据的一致性和完整性。
- Redis:虽然Redis从2.2版本开始支持简单的事务,但它的事务模型与MySQL等关系型数据库的事务模型有所不同。Redis的事务主要用于保证一系列操作的原子性,但并不支持回滚操作。
使用场景:
- MySQL:适用于需要复杂查询、事务支持、数据持久化和完整性约束的场景,如企业应用、电子商务平台等。
- Redis:适用于需要高速读写、低延迟响应、缓存和会话存储的场景,如社交媒体、实时分析、游戏服务器等。
集成与协作:
- 在实际应用中,Redis和MySQL经常一起使用,形成所谓的“缓存+数据库”架构。在这种架构中,Redis作为缓存层,存储频繁访问的数据,以减少对MySQL数据库的访问压力,提高系统性能。当Redis中的数据过期或被删除时,可以从MySQL中重新加载。
Redis的基本特性
高性能:Redis的数据存储在内存中,访问速度远快于硬盘存储,每秒可以处理超过10万次读写操作。
数据类型丰富:Redis支持多种数据结构,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希表(hashes)和位图(bitmaps)等。这些数据结构使得Redis能够灵活地处理各种类型的数据。
持久化机制:尽管Redis是基于内存的,但它也提供了两种持久化机制来确保数据的可靠性:RDB(Redis Database)快照和AOF(Append Only File)日志。RDB定期将内存中的数据快照保存到磁盘上,而AOF则记录每个写操作命令,以便在系统重启时重新执行这些命令来恢复数据。
单线程模型:Redis内部使用单线程模型来处理命令请求。这避免了多线程环境下的竞争条件和锁开销,使得Redis在单个CPU核心上能够高效地处理大量并发请求。当然,随着Redis的发展,它也支持了I/O多路复用技术,以利用多核CPU的优势。
事务支持:Redis支持简单的事务,通过
MULTI
、EXEC
、DISCARD
等命令可以将多个操作打包成一个事务来执行。事务中的所有命令要么全部成功,要么全部失败,从而保证了数据的一致性。但需要注意的是,Redis的事务不支持回滚操作。主从复制:支持主从同步,可以进行读写分离。
Redis的应用场景
缓存:Redis常用于缓存用户请求的数据,减少对数据库的访问,提高应用性能。
会话管理:用于存储用户的会话信息,实现用户的快速登录和状态管理。
消息队列:作为消息中间件,实现生产者消费者模型。
分布式锁:在分布式系统中实现线程安全和并发控制
排行榜:Redis的有序集合数据结构非常适合用于实现排行榜功能。通过为每个用户或项目维护一个分数,Redis可以快速地查询、更新和展示排名信息。这种特性在游戏、电商等需要展示用户排名或商品销量的场景中非常有用。
计数器:Redis的原子操作特性使其非常适合用于实现计数器功能。无论是网站访问量、用户点赞数还是商品库存量,Redis都能提供高性能的读写操作,确保计数的准确性和实时性。
地理位置服务:Redis的Geo数据结构提供了对地理位置信息的支持。通过存储经纬度坐标和相关的地理位置信息,Redis可以实现基于位置的查询、距离计算和范围搜索等功能。这种特性在LBS(基于位置的服务)应用中非常有用。
Redis 架构
Redis 主要由有两个程序组成:
- Redis 客户端 redis-cli
- Redis 服务器 redis-server
客户端、服务器可以位于同一台计算机或两台不同的计算机中。
Redis知识体系浏览
①Redis数据类型
基本数据类型:字符串(String),列表(List),哈希(Hash),集合(Set),有序集合(Sorted Set/ZSet
特殊数据类型:Geo,HyperLogLo等...
②Redis持久化机制
RDB(快照):定期将内存中的数据生成快照保存到磁盘上。
AOF(追加文件):记录每条写操作命令,以追加的方式写入文件。
③Redis事务
开启事务后,要么全部成功,要么全部失败
④Redis高可用策略
主从复制:实现数据副本的一致性,支持读写分离。
哨兵模式:自动监控主从节点的运行状态,实现主从切换和故障转移。
集群模式:通过分片技术实现数据的分布式存储,提高系统的扩展性和可用性。
总结
为什么Redis的端口号是6379?
Redis端口号6379的来源与意大利女演员Alessia Merz有关。Redis的开发者Antirez及其朋友曾将Alessia Merz视为愚蠢的代名词,因此他们用Merz在手机键盘上对应的数字6379作为Redis的默认端口号。