redis概述
Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
Redis 的优点
- 1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
- 2.支持丰富数据类型,支持string,list,set,sorted set,hash
- 3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
Redis 常见性能问题
常见问题 | 描述 | 建议 |
---|---|---|
Master写内存快照 | save会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务 | 建议Master不要做任何持久化工作,包括内存快照和AOF日志文件 |
Master AOF持久化 | AOF文件不断增大会影响Master重启的恢复速度 | 若数据关键,建议Slave开启AOF备份数据,策略为每秒同步一次 |
Master调用BGREWRITEAOF重写AOF文件 | AOF在重写的时候会占大量的CPU和内存资源,可能会出现短暂服务暂停现象 | 建议Master不要做任何持久化工作,包括内存快照和AOF日志文件 |
主从复制不要用级联结构 | 不推荐使用级联结构 | 单向链表结构更稳定,即:Master <- Slave1 <- Slave2 若Master故障了启用Slave1做Master |
主从复制的性能问题 | 为了提高主从复制的速度和连接的稳定性 | 建议Master和Slave在同一个网段 |
Redis 最适合的场景
- 1.会话缓存(Session Cache)
- 2.全页缓存(FPC)
- 3.队列
- 4.在主页中显示最新的项目列表。因为Redis使用的是常驻内存的缓存,速度非常快。
- 5.按照用户投票和时间排序
- 6.排行榜/计数器。Redis在内存中对数字进行递增或递减的操作实现的非常好。假定你是根据你用户的分数做递增的排序,如果你想返回用户及用户的分数,可以执行:
ZRANGE user_scores 0 10 WITHSCORES