Redis基础了解
Redis 基础一、什么是 Redis总的来说Redis 是一种基于键值对的 NoSQL数据库这时候你可能会问什么是 NoSQL这个和 我们了解的 MySQL有什么区别想要知道这些问题我们要知道数据库有很多种类型而这里主要体现了关系型数据库和非关系型数据库。关系型数据库像 Excel 表格一种二维表结构一条数据由多个字段组成每条数据都包含固定的字段可以内容为空idnameage1lisi18表与表之间可以进行关联像MySQL、PostgreSQL、Oracle、SQLServer这样的数据库就是关系型数据库非关系型数据库像JSON文件或者字典每条数据可以有不同的字段不固定可以进行嵌套形成复杂的结构比如 { user: { name: Alice, age: 30, hobbies: [reading, coding] } } 或者{ user_123: { name: 张三, age: 28, hobbies: [读书, 跑步], address: { city: 北京, } } }像Redis、MongoDB、HBase都是非关系型数据库关系型数据库和非关系型数据库的主要区别就是数据的存储方式和对事务的支持通过上面的简单了解你就能区分出SQL和NoSQL的的区别以及大致的特征所以Redis和MySQL的区别很大这也就说明这两种数据库的使用场景也有很大区别我们下面来揭开Redis的神秘面纱。二、Redis的特性1. 速度快Redis把数据存储到内存中操作内存比操作硬盘更快Redis是C语言实现的一般来说C语言实现的程序距离操作系统更近执行速度更快Redis使用了单线程预防了多线程的竞争问题注意Redis 在 6.0 版本引入了多线程机制但主要也是在处理网络和 IO不涉及到数据命令即命令的执行仍然采用了单线程模式同时这个单线程不是说整个Redis就只有一个线程而是处理指令的就这么一个线程Redis的操作指令比较简单2. 基于键值对的数据结构几乎所有编程语言都提供了类似字典的数据结构例如C的mapJava的mapPython的dict等Redis的键值对中的值不仅可以是字符串还可以是具体的数据结构支持更多的开发场景5种经常使用的数据结构string, list, hash, set, zset (指令和底层后续讲解)3. 丰富的功能键过期机制可以实现缓存发布订阅功能可以实现消息队列 ----- 你可能会吃惊Redis开发的目的是用作消息队列的支持Lua脚本可以使用Lua创造新的Redis指令简单的事务功能在一定程度上保证事务的特性和 MySQL相比差远了流水线功能客户端可以将一批指令一次性传到Redis减少网络开销指令中可以提现4. 简单稳定Redis的源码很少相较于其他NoSQL易于了解它单线程模型不需要依赖操作系统中的类库5. 客户端语言多Redis 提供了简单的 TCP 通信协议很多编程语言可以很方便地接入到 RedisRedis 受到社区和各大公司的广泛认可支持Redis的客户端也就非常多6. 持久化RDB定期生成内存快照适合备份AOF记录每条写命令重启时重放数据更完整7. 主从复制8. 高可用和分布式哨兵监控主节点故障并自动切换集群将数据分片到多个节点突破单机容量三、Redis的适用场景1. 缓存缓存机制几乎在所有大型网站都有使用合理的使用缓存不仅可以加速访问速度而且能够有效的降低后端数据源的压力。2. 排行榜排行榜系统几乎存在于所有的网站例如按照热度排名的排行榜按照发布时间的排行榜按照各种复杂维度计算出的排行榜Redis提供了列表和有序集合的结构合理地使用这些数据结构可以很方便地构建各种排行榜系统。3. 计数器计数器在网站中的作用至关重要例如视频网站有播放数、电商网站有浏览数为了保证数据的实时性每一次播放和浏览都要做加1的操作如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好可以说是计数器系统的重要选择。4. 社交网络赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能由于社交网站访问量通常比较大而且传统的关系型数据不太合适保存这种类型的数据Redis提供的数据结构可以相对比较容易地实现这些功能。5. 消息队列消息队列系统可以说是一个大型网站的必备基础组件因为其具有业务解耦、非实时业务削峰等 特性。Redis 提供了发布订阅功能和阻塞队列的功能虽然和专业的消息队列比还不够足够强大但是 对于一般的消息队列功能基本可以满足。四、Redis 和 MySQL 的主要区别对比RedisMySQL数据存储位置内存硬盘存储结构键值对二维表事务支持支持简单的事务不支持回滚完整的ACID事务支持回滚隔离级别持久化可选RDB 快照 / AOF 日志主要用于重启恢复不保证强持久强制持久化数据写入磁盘安全性高扩展方式主要是水平分片主从复制用于读写分离和高可用支持垂直扩展更强的主机和水平扩展分库分表、中间件典型使用场景缓存、计数器、排行榜、会话存储、消息队列高速读写对持久性要求不高核心业务数据存储、复杂查询、报表、交易系统需要数据一致性和持久性