一、Redis快速入门
此 Redis服务 采用 5.0+版本
redis简介
redis是一个使用ANSI C语言编写的开源的基于内存的key-value高性能非关系型缓存数据库,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询,stream。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis5.0版本新特性
- 新增Streams数据类型,可以把 Streams 当做消息队列
- 新的模块 API 、定时器、集群集资点
- RDB 中持久化存储 LFU 和 LRU 的信息
- 将集群管理功能完全用C语言集成到 redis-cli 中
- 有序集合新增命令 zpopmin/zpopmax
- 改进HyperLogLogs实现
- 新增 client unblock 和 client id
- 新增 lolwut 命令
- Redis主从复制中的从 不在成为Slaves,改称 Replicas
- 引入动态哈希,一平衡 CPU 的利用率和相应性能,可以通过配置文件进行配置
- Redis 核心代码新型了部分重构和优化
Redis 可执行文件介绍
| 名称 | 描述 |
|---|---|
| redis-server | 启动redis |
| redis-cli | redis命令行客户端 |
| redis-benchmark | 基准测试工具 |
| redis-check-aof | AOF持久化文件检测和修复工具 |
| redis-check-rdb | RDB持久化文件检测和修复工具 |
| redis-sentinel | 启动哨兵 |
| redis-trib | cluster集群构建工具 |
为什么使用 Redis
- 读写速度快
数据存放在内存中,官方给出的读写性能可达到 10w/s
- 数据存放在内存中是速度快的主要原因
- C语言实现,与操作系统的距离近
- Redis 数据结构是专门设计的,增删改查等操作相对简单
- 使用了单线程架构
- 避免多线程可能产生的线程切换和竞争产生的资源消耗;
- 采用多路复用IO模型(select、poll、epoll)可以高效的处理大量并发连接; Redis 命令的执行过程: 发送指令 --> 执行指令 --> 返回结果; 执行指令: 单线程执行,所有的指令进入队列,按顺序执行,使用I/O多路复用技术解决一个线程处理多个连接的问题。
- 键值对的value不仅可以是字符串,还可以是复杂的数据类型,如链表、集合、散列表等
- 丰富的功能 发布订阅、主从复制、持久化、脚本、事务等功能
- 支持数据持久化,可以采用RDB、AOF、RDB&AOF三种方案。计算机重启后可以在磁盘中进行数据恢复。 发生断电或机器故障,数据可能会丢失,持久化到磁盘
- 支持主从结构,可以利用从库进行数据备份 实现了多个相同数据的Redis副本,提高了系统的健壮性
- 高可用和分布式 哨兵机制实现高可用,保证redis节点故障发现和自动转移
- 有多种语言的客户端
Redis与其他数据库之间的比较
| 名称 | 类型 | 存储数据类型 | 查询类型 | 附加功能 |
|---|---|---|---|---|
| redis | 使用内存存储的非关系型数据库 | 字符串、列表、散列表、集合、有序集合 | 每种数据类型都有自己专属命令,另外还有批量操作和不完全的事务支持 | 发布订阅、主从复制、持久化、脚本(存储过程) |
| memcached | 使用内存存储的键值缓存 | 键值之间的映射 | 创建、读取、更新、删除以及其他几个命令 | 为提升性能而设计的多线程服务器 |
| MySql | 关系型数据库 | 每个数据库可以包含多个表,每个表可以包含多行,可以处理多表视图,支持空间和第三方支持 | insert、select、update、delete、函数、存储过程 | 支持ACID性质、主从复制、多主复制 |
| MongoDB | 使用硬盘存储的非关系的文档存储 | 每个数据库可以包含多个表,每个表可以包含无schema的BSON文档 | 创建、读取、更新、删除、条件查询命令 | 支持map-reduce操作、主从复制、分片、空间索引 |
Redis的使用场景
redis的应用场景可以肆意的发挥想象力,以下是Redis 较为适用的一些场景
- 缓存 例如session缓存、全页缓存、合理使用缓存加快数据访问速度,降低后端数据源压力
- 排行榜 按照热度、发布时间排行,主要用到列表和有序集合
- 计数器 网站的浏览数等
- 社交网络
- 消息队列 发布订阅