Redis问题

什么是Redis

        Redis 是一种基于内存的数据库。对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景

Redis的数据类型

        常见五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。后续增加的:BitMap,HyperLogLog,GEO,Stream。

Redis的应用有哪些

        缓存、分布式锁、限流、消息队列、延时队列、分布式Session、复杂的业务场景(Bitmap 统计活跃用户、通过 Sorted Set 维护排行榜)。

Redis的持久化

        三种:AOF日志、RDB快照、混合持久化。

        AOF日志:在执行完一条写操作后,将该命令以追加的方式写到一个文件(磁盘);当Redis重启时,读取该文件,逐一执行命令恢复数据。

        RDB快照:记录某一个瞬间的内存数据。

        混合持久化:混合持久化工作在 AOF 日志重写过程。AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据。

Redis的线程模型

        Redis不是单线程的。        

Redis集群

        主从复制:一主多从模式,将主服务器上的数据同步到多台从Redis服务器上。读写分离:主服务器进行读写操作,写操作时同步到从服务器;从服务器一般只读(或接受主服务器同步过来的写操作)。同步写命令是异步的,无法实现数据的强一致性。

        哨兵模式:实现主从节点故障转移。三步:监控、选主节点、通知。

        切片集群模式:一个切片集群有16384个哈希槽,数据根据key被映射到哈希槽中,哈希槽被分配到各个节点(平均分配和手动分配)。

        脑裂:在主从模式中,网络问题导致主节点断联并持续写入,从节点中选出新的主节点;恢复联系后,原主节点降级并清空本地数据(为了同步新主节点的数据)导致数据丢失。解决办法:断联后拒绝写入。

Redis过期删除

        用过期字典保存过期时间。删除策略:惰性删除+定期删除。

        惰性删除:不主动删除数据,每次访问key时,查询是否过期,若过期则删除。

        定期删除:每个一段时间随机从数据库中取出一定数量的key进行检查,删除其中过期的key。若删除的key超过一定比例(25%)则再来一次(但总操作时长不超过上限)。

        持久化时:RDB不保存也不载入过期键;AOF写入时对过期键追加删除命令,AOF重写时不保存过期键。

        

Redis内存淘汰

        不进行数据淘汰:写入报错,其它操作正常。

        进行数据淘汰:淘汰设置了过期时间数据:随机、剩余时间最少、LRU(时间)、LFU(次数);从所有数据中淘汰:随机、LRU、LFU。

Redis缓存设计

        缓存击穿:热点数据过期了。不过期、提前预热(合理的过期时间)、缓存失效后加锁。

        缓存穿透:数据不在缓存也不在数据库中。缓存空值、接口限流、布隆过滤器。

        缓存雪崩:大量缓存数据同一时间过期。缓存过期时间打乱、缓存不过期。

Redis实战

        延时队列:Zset

        大key(value很大):

        事务回滚:

        分布式锁:setnx命令

        共享session:

        消息队列:List、Stream(专门为此设计)

        点赞、共同关注:Set

        排行榜、电话姓名排序:Zset(Sorted Set)

        签到打卡、登录状态:Bitmap

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值