Redis 问题总结
Redis特性有哪些
- Redis使用标准C编写实现,并且所有数据加载到内存,所以速度特别快
- 可以将Redis看做”数据结构服务器“。目前Redis支持五种数据结构(String,Hash,List,Set,Sorted Set)
- 持久化,由于所有数据保存在内存中,所以对数据的更新将异步的保存到磁盘上,Redis使用一些策略保存数据,比如更新时间或者更新次数,数据超过内存,使用swap保证数据。
- 自动操作。Redis对不同的数据类型操作都是自动的,因此,设置或者增加Key值,从一个集合中增加或者删除一个元素都能安全的操作。
- 支持多种语言
- 主-从复制。当主节点出现故障时,可以迅速从从节点进行恢复。读写分离,主节点负责写,从节点负责读,多个从节点分开读。
Redis的单进程和单线程模型
*多路I/O非阻塞模型,select/poll/epoll模型
Redis大量数据插入
- 使用pipe mode,创建一个包含Redis命令集的文本文件。
提取固定前缀的Key
- 使用keys指令可以提取指定模式的key列表,但是由于Redis是单线程的,会造成阻塞。可以使用scan命令,但是会有一定的重复,可以提取之后,再进行一次去重。
大量key同时过期
- 同时过期会有一定的卡顿,所以需要给时间加上一个随机,分散一点
Redis如何做持久化
bgsave全镜持久化,因为save会阻塞进程,使用bgsave可以避免这个问题,bgsave通过fork一个子进程来进行bgsave操作
aof做增量持久化,由于bgsave耗费的时间比较长,不够实时。如果突然停机的话会造成数据丢失。所以需要AOF进行必要的补充。