redis常见的基本类型:
字符串,list,set,sortset,hash
redis里面数据结构
sds(字符串的实现,定义字符数组,等长扩展),双端链表(list的内部实现),字典(为每个key分配一个空间),压缩表,跳跃表
redis常见异常
缓存穿透:查询不存在的值(可以做程序过滤)
缓存雪崩:大量的key同时过期(加时间的随机因子,热度大的因子,热度小的数据因子小)
缓存预热:上线前的工作
缓存降级:缓存失效或者缓存服务挂掉直接访问内存中的默认数据
分布式锁
解决重复下单和超售的情况
分布式自增id:increment方法
redis集群方式
主从模式:多份数据,主节点容易出现单点故障
哨兵模式:心跳检测和选举机制,不支持在线扩容,管理复杂
cluster集群模式:无中心结构,每个redis都映射到不同的slot上,彼此互联,共享数据,半数检测节点故障则判断节点失效。在线删除节点和扩展节点非常容易
redis的持久化
RDB持久化:定时做快照保存在磁盘中。恢复快,但是实时性不好,适合全量复制和备份
AOF持久化:redis操作日志追加方式写入文件。文件很大读取恢复慢,但是及时性很好
redis的缓存失效策略
定时删除策略:在设置key的过期时间时,为该key创建一个定时器,让定时器在key的过期时间来临,对key删除。内存能快速释放,但是key过多执行定时器会占用很多cpu时间
惰性删除策略:key过期不删除,每次获取key去检查是否过期,若过期则删除,返回null。cpu占用少,但是key长时间不获取容易造成内存泄漏
定期删除策略:每隔一段时间执行一次检查去删除过期的key。综合前两者,适中