「黑马 Redis」二、最佳实践
多级缓存跳过 键值设计 优雅的 key 结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符 例如:我们的登录业务,保存用户信息,其key是这样的: login:user:10 优点: 可读性强 避免key冲突 方便管理 更节省内存:key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小 set num 123 如果 type num 得到...
「黑马 Redis」一、分布式缓存
引入 单点 Redis 问题: 数据丢失问题 实现 Redis 数据持久化 并发能力问题 搭建主从集群,实现读写分离 存储能力问题 学习 es,搭建分片集群,利用插槽机制实现动态扩容 故障恢复问题 Redis 哨兵,实现健康监测以及自动恢复 Redis 数据持久化 - 数据丢失问题 RDB 持久化 RDB:Redis Database Backup file,也称 Redis 数据快照,将内存中所有数据记录到磁盘,一旦 Redis 故障重启,就从磁盘中读取快照文件,恢复数据 快照文件称为 RDB 文件,默认保存在当前运行目录...
「黑马点评」十二、UV 统计
HyperLogLog 用法 UV:Unique Visitor,独立访客量,一天内同一用户多次访问也只记 1 次 PV:Page View,页面点击量,一个用户每访问一次页面就记 1 次 PV UV 统计需要判断该用户是否已经统计过,需要保存统计过的用户信息,如果存到 Redis,数据量非常大 HyperLogLog 是从 LogLog 算法派生出的概率算法,用于确定非常大的集合的基数,而不需要存储其所有的值,小于 0.81% 的误差  public Result uploadImage(@RequestParam("file") MultipartFile image) { t...
「黑马点评」七、Redis 消息队列优化异步秒杀下单
异步秒杀下单优化之 Redis Stream 消息队列 需求: 创建一个 Stream 类型的消息队列,名为 stream.orders 修改之前的秒杀下单 Lua 脚本,在认定有抢购资格后,直接向 stream.orders 中添加消息,内容包含 voucherId、userId、orderId 项目启动时,开启一个线程任务,尝试获取 stream.orders 中的消息,完成下单 创建消息队列 消息队列名为 stream.orders,消费者组名为 g1,无则创建 xgroup create stream.orders g1 0 MKSTR...
「黑马点评」七、Redis 消息队列介绍
消息队列入门 消息队列:确保消息至少被消费一次,也意味着持久化 image.png|500 主流的消息队列:Kafka、RabbitMQ、rocketMQ Redis 提供的消息队列 List:基于 List 结构模拟消息队列 PubSub:基本的点对点消息模型 Stream:比较完善的消息队列模型 基于 List 结构模拟消息队列 Redis 的 List 结构是双向链表,利用 LPUSH、RPOP 或 RPUSH、LPO...
「黑马点评」六、秒杀优化
异步秒杀优化 正常的执行需要执行六步,且涉及数据库,非常耗时,如果将判断库存和校验一人一单抽离出来,并将相关订单放到一个阻塞队列中,异步处理下单操作,可以优化更快的订单返回,以及下单速度 image.png|500 也就是说当前只需要确认能否执行,真正的执行可以慢慢做 将耗时的判断库存和校验一人一单的流程放入 Redis 中操作,并利用 Lua 脚本确保原子性 库存判断可以使用 String,一人一单直接使用 Set 即可 ![image.p...