Redis相关常见问题?
1. 什么是Redis?
Redis本质上是一个Key-Value类型的内存数据库,英文名:Remote Dictionary Server
2.Redis有哪些优缺点?
优点:
- 纯内存操作,Redis的性能非常出色。
- 支持的数据类型非常多。
- 附加功能很强大,什么事务,过期时间等等。
缺点: - 缓存和数据库双写一致性问题,缓存雪崩问题,缓存击穿问题
- 受物理硬件影响比较大
3. Redis相比memcached有哪些优势?
- redis支持持久化
- 数据类型丰富
- 存储容量更大,比方说redis能达到一个g,memcache只能到一个m
4、Redis的持久化是什么?
RDB持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
AOF持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数
据集。AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以
在后台对AOF文件进行重写(rewrite),使得AOF文件的体积不会超出保存数据集状态所需的实际大
小。
AOF和RDB的同时应用:当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数
据集通常比RDB文件所保存的数据集更完整
5. 为什么不推荐window系统用redis
windows只能支持io多路复用里面的select模型,之支持1024连接,远远不如liunx下面的epoll模型。
6. csredis和serviceStack一样啊
封装的代码不一样,但是最终的指令实现效果是一样的
7. redis数据一致性问题,什么事redis雪崩,怎么处理?
redis雪崩:在一段时间内,用户量比较多,正好redis的数据都集体失效,到时所有的访问都去数据库,导致数据库压力非常大。
解决: 1.缓存的时间可以错开,不要都设置一样
2.可以memcache和redis一起用。
3.搞redis集群。
8. redis数据一致性问题,什么事redis穿透,怎么处理?
穿透:当redis里面的key不存在,导致大量的访问量访问数据库
解决:1.如果数据库的数据为空,可以把空值也缓存。
2.采用布隆过滤器
9. redis持久化问题
aof,rdb,以及混合模式
rdb:备份慢,恢复快,两种指令操作,save(阻塞),bgsave(不阻塞),类似快照一样,满足相应的要求会进行全文备份,可在config文件配置,rdb文件可读性太差直接看不懂
aof:备份快,恢复慢,是以日志追加的方式写入aof文件。开启aof的指令 appendonly yes ,aof有三种模式,推荐使用Everysec,周期是1秒钟,aof文件可读性好,
aof涉及到重写问题,什么是重写,仔细看aof的文件就知道,包含着大量的指令操作,重复的指令语法会占用空间,将相同的指令可以使用一条指令替换,就是重写。重写机制:在config文件可配置,当aof文件大小达到多少,或者文件是之前文件的一倍时,会执行重写
混合模式:结合两种模式的优缺点,当开启aof的时候呢,混合模式默认开启,
混合模式的机制是,备份的时候呢,用aof去备份,恢复的时候用rdb恢复
9. redis的事务以及lua脚本
10. redis的的淘汰机制
config get maxmemory 0的话默认没有限制
默认测策略:noeviction:当内存达到限制的时候,直接报错,导致服务不可用,数据不会丢失
LRU:
volatile-lru:删除设置了过期时间的key 并且是最近使用少的key
allkeys-lru:删除在所有key当中最近使用少的key
LFU:
volatile-lfu:删除设置了过期时间的key 并且是频率最低的key
allkeys-lfu:删除在所有key当中最近频率最低的key
volatile-random:随机删除设置了过期时间的key
allkeys-random:在所有key当中随机删除
allkeys-ttl:在设置了过期时间key当中,根据过期时间淘汰,越早过期越淘汰
11. redis常见五种数据的应用
string:一般就是一个key,一个value
hash:通常来存储对象
list :列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
set:无序集合
zset :不允许出现重复成员