Redis

首先感谢掘金@敖丙的《吊打面试官》系列的启发

what

redis是一个缓存,基于内存操作数据,算是数据库的小弟,帮助数据库挡掉一些经常查询的内容,避免扫描库(你要知道有些查询要关联很多表,虽然你可能只查一条数据,但可能要要执行2-3秒,在高并发下是致命的),主要用的Redis以及Java的Memcached,两者各有特点,但市场倾向于Redis

知识点罗列

Redis

  • 数据结构:
类型 作用 示例
String 保存字符串 session
Hash key-value 计数器
List 数组 数组类型数据
Set 去重数组 自动去重
SortedSet 去重排序数组 微博热搜榜单
HyperLog
Geo
Pub/Sub
Redis modules 暴露接口自定义redis模块,自定义数据结构(json支持,对图数据库支持,匹配添加正则功等),访问redis数据空间,实现阻塞命令,动态链接加载模块,编写神经网络模块等 * 官方有文档,待学习,应用如:BloomFilter,redisSearch,redis-ML
  • 内存清理
    待补充

  • 分布式锁

    目的:redis cluster时候保证一个数据同时只有一个实例在读/写

    实现:zookeeper或者setnx争抢锁,expire释放,类似进程锁

  • 持久化

持久方式 实现原理 应用场景
RDB() 全量 冷备份,耗时
AOF 增量 实时增量(sync属性配置同步时间)
混合使用 全量启动,AOF恢复近期数据
  • 寻找key

    1.keys-会阻塞-无重复项

    2.scan-不阻塞-会有重复项

  • 异步队列实现

    1.rpush生产,lpop消费

    2.sleep稍后重试,blpop休息直到消息来

    3.应用场景:曾经调用仓库系统发货,仓库系统库存1一分钟更新一次,所以将发货数据推入队列中

    4.pub/sub可以实现一次生产多次消费,高级的MQ解决意外情况

    5.延时队列,sortedset,时间戳做score,内容做key调用zadd生产,zrangebysccore获取N秒前消息轮询消费

  • pipeline

    1.多次IO一次返回

    2.压测

  • 同步机制

    1.主从同步

    2.从从同步

  • 集群

    redis sentinal高可用,master宕机选新头儿

    redis cluster 扩展性,多个实例

  • BloomFilter

    布隆过滤器,常用用于避免缓存击穿

    实现原理:二进制向量和随机映射函数

    作用:检查元素是否在合集中

    工作流程:布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。