简单介绍
- 概述
- redis 是一个典型的高性能 key-value数库库
- redis 的性能十分优越,以支持每秒十几万的读/写操作,其性能超数据库,并且支持集群、分布式、主从同步等配置,还支持一定事务能力
- 特点
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份
操作以及应用场景
- Key
- 常见命令
- DEL
- EXIST
- EXPIRE
- EXPIREAT
- 常见命令
- string类型
- 常见的命令
- incr
- decr
- incrby
- decrby
- setbit、setbit、bitcount
- SETNX
- 应用场景
- 分布式id生成器
- 限流
- 秒杀
- 签到、是否在线
- 分布式事务锁
- 常见的命令
- Hash 类型
- 常见的命令
- 应用场景
- 购物车
- 基本信息存储
- 常见的命令
- List
- 应用场景
- 简单消息队列
- 最新列表
- 应用场景
- SET
- 应用场景
- 元素去重
- 应用场景
- Sorted Set
- 应用场景
- 排行榜
- 我的关注
- 我的粉丝
- 应用场景
- HyperLogLog
- 常见命令
- PFADD
- PFCount
- 应用场景
- 大数据量的UV PV
- 常见命令
- GEO
- 常用命令
- GEOADD
- GEODIST
- GEORADIUS
- GEORADIUSBYMEMBER
- 应用场景
- LBS 地图应用。附近外卖
- 常用命令
- 发布订阅(PUB/SUB Stream 5.0)
功能
- 持久化
- RDB(DUMP)
- 优点:文件小、恢复快、适用于灾备
- 缺点:dump到磁盘有大量IO
- AOF(log)
- 优点:每修改同步、秒级同步
- 缺点:文件大
- 混合持久化
- RDB+AOF
- RDB(DUMP)
- 主从复制
- Master可以拥有多个slave
- 多个slave可以连接同一个Master外,还可以连接到其他的slave
- 主从复制不会阻塞Master,在主从复制时,Master可以处理client请求。
- 提供系统的伸缩性。
- 支持slave只读模式
- 异步的
- redis集群
- 高可用
- 主从复制+哨兵机制(监控、提醒、自动故障迁移)+keepalived(自动重启)
- 事务
- MULTI | EXEC
- 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
- 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做
- Lua脚本
- Lua脚本在Redis中是原子执行的, 执行过程中间不会插入其他命令。
- Lua脚本可以帮助开发和运维人员创造出自己定制的命令, 并可以将这些命令常驻在Redis内存中
- 实现复用的效果
- Lua脚本可以将多条命令一次性打包, 有效地减少网络开销
- script load script | script exists | script flush
- MULTI | EXEC
注意事项
- 缓存穿透(透过redis)
- 缓存击穿(瞬间)
- 缓存雪崩(大量)
如何提升redis的性能
- 瓶颈在哪里?网络IO
- M系列的命令(原子)
- LUA
- PipLine
- redis6.0 多线程模型
- 以前:多路复用 select、poll、epoll(单个线程)
- 多线程任务分摊 Redis 同步 IO 读写负荷
- 可以充分利用服务器 CPU 资源,目前主线程只能利用一个核
- IO