为啥快?
1.基于内存
2.优秀的数据结构,大多数O(1) 时间复杂度的命令
3.自定义redis协议
4.多路I/O复用模型
5.单线程,避免线程切换影响
持久化方式 区别?
AOF(保存的是命令)
优点:最多丢失一秒数据
缺点:体积大,恢复慢(重新再让命令)
RDB(保存的是快照)
优点:最大化redis性能,恢复更快
缺点:丢失数据,耗时效率低
官方推荐两个都启用,如果对数据安全没有要求可以只启用RDB,但是不建议单独使用AOF。如果只是用Redis作为纯内存缓存,则可以都不启用。
同时开启两种缓存的话,恢复数据时会优先采用AOF,因为AOF的数据更加完整。
什么场景用到过,什么数据类型?
String 分布式锁
list 不要求一致性的消息队列
set 用户昵称不可重复
zset 延迟队列 有序集合
hash Java对象类存储
过期删除策略?
定时删除 优先内存 妥协:删除一些 一点点来
惰性删除 优先CPU
内存淘汰策略,淘汰算法?
了解最大内存
volatile-lru:利用 LRU 算法移除设置过过期时间的 key (LRU:最近使用 Least Recently Used );
allkeys-lru:利用 LRU 算法移除任何key (和上一个相比,删除的 key 包括设置过期时间和不设置过期时间的),通常使用该方式;
volatile-random:移除设置过过期时间的随机key ;
allkeys-random:无差别的随机移除;
volatile-ttl:移除即将过期的 key (minor TTL);
noeviction:不移除任何 key,只是返回一个写错误 ,默认选项。当前项目使用;
数据并发竞争,造成啥问题,怎么解决
多机器更新同一key问题,数据版本号比较,时间戳比较来解决。使之保存为最新数据。
标签:AOF,面试题,删除,过期,Redis,内存,key,移除
From: https://www.cnblogs.com/li-xiaotian/p/16620794.html