《Redis深度历险核心原理与应用实践》读书笔记

前言

  • 《Redis深度历险核心原理与应用实践》是掌阅服务端技术专家钱文品所著,看完后感觉有点东西。书马上要还了,避免忘记,在此与自己所学结合做个笔记。不涉及源码篇(因为这块没怎么看懂)。

基础和应用篇

Redis可以做什么

  • 1、缓存最近热帖内容(hash)。
  • 2、分布式锁(hash、string)。
  • 3、记录帖子的点赞数,评论数和点击数(hash)。
  • 4、记录用户帖子ID列表(zset)
  • 5、记录帖子点赞用户id,评论id列表,用于显示和去重(zset)
  • 6、记录帖子相关文章ID,根据内容推荐相关帖子(list)
  • 7、帖子id自增,可以使用redis来分配帖子ID(计数器)
  • 8、收藏集和帖子之间关系(zset)
  • 9、记录热帖列表,总热榜和分类热榜(zset)
  • 10、缓存用户历史行为,过滤恶意行为(zset、hash)
  • 11、消息队列(zset、list、set),延迟队列(zset)
  • 12、限流(hash)
    …省略…

5种基础数据结构

  • string:字符数组
  • list:相当于java里LinkedList,支持栈、队列。
  • hash:相当于java的HashMap
  • set:相当于java里HashSet
  • zset:类似于java的SortedSet和HashMap结合体,是set保证唯一,另外有score字段,代表排序权重。

位图

  • 存放bool型数据,比如用户一年的签到记录,签了是1,没签是0,记录365天。

HyperLogLog

  • 存储PV和UV(有极小的误差)

布隆过滤器

  • 可以理解为一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,可能误判(误判率预计约0.1%,调参后实际情况会低很多)。

限流

  • 漏斗,漏桶限流
  • 令牌桶算法
  • 滑动窗口算法

这几个算法基本实现可以移步 https://gitee.com/apple_1030907690/spring-boot-kubernetes/tree/v1.0.6/

附件的人或物(GEO)

  • 用数据库来算附近的人或物(GeoHash)

scan

  • 可以条件查询redis中数据

原理篇

  • Redis是单线程程序
  • 通信协议RESP
  • 持久化,AOF(指令增量)和RDB(快照方式)
  • 管道:操作合并。
  • 事务:Redis事务不具备原子性,仅仅满足事务隔离性的串行化—当前执行的事务有着不被其他事务打断的权利。
  • PubSub:消息多播,缺点,不支持持久化。

集群篇

  • Sentinel:监控主节点健康,使用哨兵查询主节点地址,客户端来连接集群。
  • Codis(代理方式)、Redis Cluster:数据分片方案。

拓展篇

  • Stream:新的强大的支持多播的可持久化消息队列(需要Redis5.0及以上)
  • info指令:查询Redis信息
  • 过期策略:定时扫描,惰性策略删除过期key(当用户访问时,如果过期了再删除)。

保护Redis

  • 指令安全:慎重使用可能会导致Redis卡顿的指令(如keys)
  • 端口安全:尽量不对外暴露redis端口
  • lua脚本安全:应该让Redis以普通用户身份启动,这样即使存在恶意代码,黑客也没拿到root权限。
  • SSL代理:redis不支持ssl链接,如果要在公网传输,可以考虑SSL代理,常见的有ssh,官方推荐spiped工具。

posted on 2022-04-23 15:52  愤怒的苹果ext  阅读(69)  评论(0编辑  收藏  举报

导航