一、redis特性(为什么那么快)
1、内存数据库 内存的读取是磁盘的1000倍
基于内存存储实现
2、工作线程(worker)是单线程,串行化执行,原子操作-避免了线程上下文的切换,IO线程是多线程的
3、网络IO模型(epoll),天生支持高并发
4、kv模型,v 具有数据结构 多种数据结构类型
5、具有本地方法,计算向数据移动
6、二进制安全(value最大512M)
二、redis是单线程还是多线程?
redis6.0之前不论是IO线程还是工作线程都是是单线程
之后是IO线程是多线程 但是工作线程还是单线程
redis使用多线程并非是完全摒弃单线程,redis还是使用单线程模型来处理客户端的请求,只是使用多线程来处理数据的读写和协议解析,执行命令还是使用单线程。
这样做的目的是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程能提升IO读写的效率,从而整体提高redis的性能。
三、redis数据持久化
第一种方式RDB(redis database):存储数据结果 关注点在数据(快照)
指定的时间间隔内将内存的数据存储到磁盘里,恢复的时候将文件直接读到内存里
优缺点:
优点:数据恢复的比较快
备份的文件是源文件的大小,不会增加数据占用
缺点:备份时间存在间隔,不能实时备份,会存在数据的丢失
一般开启子进程进行数据备份,数据集非常庞大的时候,服务器可能在一定时间内停止处理客户端
第二种方式AOF(append only file):存储操作过程 关注点在数据的操作过程(命令)
将客户端的每一个写操作命令以日志的形式记录下来,追加到appendonly.aof的文件末尾,在恢复数据的时候,会加载aof中所有的命令,将数据进行恢复
优缺点:
优点:数据安全性高,不易丢失数据
AOF文件有序的保存了所有写操作,可读性高
缺点:AOF方式生成文件体积变大(里面存放了一些命令)
数据恢复速度比RBD慢
四、如何在百万级keys的Redis里面,如何模糊查找某个(某几个)key.
在 Redis 中,直接进行模糊匹配查找 key 的操作并不高效,因为 Redis 并没有为 keys 命令提供模糊匹配功能,而使用 KEYS pattern 命令在大数据量下会导致阻塞,影响 Redis 的性能,
使用scan命令可以避免一次加载所有 keys 到内存中,从而减少阻塞风险。SCAN 命令允许你迭代 Redis 数据库中的 key,但是它不支持模糊匹配。你可以结合 SCAN 和 MATCH 参数来实现模糊查找,但是效率仍然受限于模式匹配的复杂度。