啤酒理论

Buffer机制,减少没必要的来回调用

前置知识

只要和redis建立了连接,发送字符串,就能交互

管道

发布 / 订阅

help @pubsub

发送者

订阅者

  PSUBSCRIBE pattern [pattern ...]summary: Listen for messages published to channels matching the given patternssince: 2.0.0PUBLISH channel messagesummary: Post a message to a channelsince: 2.0.0PUBSUB subcommand [argument [argument ...]]summary: Inspect the state of the Pub/Sub subsystemsince: 2.8.0PUNSUBSCRIBE [pattern [pattern ...]]summary: Stop listening for messages posted to channels matching the given patternssince: 2.0.0SUBSCRIBE channel [channel ...]summary: Listen for messages published to the given channelssince: 2.0.0UNSUBSCRIBE [channel [channel ...]]summary: Stop listening for messages posted to the given channelssince: 2.0.0

聊天室架构模型

  • 每个人能够收到实时消息
  • 上滑加载最近3天消息
  • 再上滑加载历史消息,所有消息都应该被存在数据库中

可以启动不同的redis去接收订阅的消息,有的用来推送给用户,有的用来发给kafka,继而存储到数据库中

Redis事务

假设是client1绿色先开启的事务multi,client2黄色后开启的事务,
并且假设client2黄色的exec先到达,client1绿色的exec后到达:
是先发送exec的客户端先执行命令

在事务中 watch 监控某个 key,如果发生改变,就不执行事务

为什么 Redis 不支持回滚(roll back)

如果你有使用关系式数据库的经验, 那么 “Redis 在事务失败时不进行回滚,而是继续执行余下的命令”这种做法可能会让你觉得有点奇怪。

以下是这种做法的优点:

  • Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。
  • 因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速。

有种观点认为 Redis 处理事务的做法会产生 bug , 然而需要注意的是, 在通常情况下, 回滚并不能解决编程错误带来的问题。 举个例子, 如果你本来想通过 INCR 命令将键的值加上 1 , 却不小心加上了 2 , 又或者对错误类型的键执行了 INCR , 回滚是没有办法处理这些情况的。

RedisBloom模块 - 布隆过滤器

解决缓存穿透问题

布隆过滤器:用小空间解决大量数据匹配的问题
三种架构情况:

更新完数据库,需要同步刷缓存 -> 双写问题

缓存淘汰策略

下节课预习

缓存常见问题:

  • 击穿
  • 雪崩
  • 穿透
  • 一致性

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU相关推荐

  1. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  2. redis(二)redis实战 使用redis进行文章的排序

    2019独角兽企业重金招聘Python工程师标准>>> http://www.beckbi.cn/?p=172 redis实战使用redis进行文章的排序 转载于:https://m ...

  3. Redis实战 - 09 Redis BitMaps 实现用户签到,统计签到次数,统计签到情况等功能

    文章目录 1. 需求分析 2. 设计思路 3. 用户签到和统计连续签到的次数 1. 签到控制层 SignController 2. 签到业务逻辑层 SignService 3. 测试 4. 按月统计用 ...

  4. Redis第二话 -- Redis的高端操作(发布订阅、事务、LUA脚本)

    在Redis中还有一些用法是我们在工作中用的比较少的,本文统一整理一下. 1.发布订阅 在Redis里面除了List的阻塞队列可以实现消息队列以外,还有一种消息通信模式:发送者 (pub) 发送消息, ...

  5. 【Redis系列】消息订阅、pipeline . 事务、modulesmd、缓存

    文章目录 pipeline 发布订阅 事务 **Redis事务使用案例:** modules 缓存 Redis如何淘汰过期的keys **缓存穿透** 缓存雪崩 **缓存击穿** Redis配置文件 ...

  6. Redis实战 - 04 Redis 分布式锁应用之抢购代金券

    文章目录 1. 数据库表结构 1. 代金券表 2. 抢购活动表 3. 订单表 2. 秒杀场景的解决方案 3. 创建秒杀服务 ms-seckill 4. 代金券抢购功能开发 - 关系型数据库实现 1. ...

  7. redis实战:使用redis实现自动补全

    转载:http://blog.csdn.net/u011250882/article/details/48632379 如果我想输入"雄英"来找到游戏库中的所有带有这两个字的游戏, ...

  8. 深入剖析Redis系列(四) - Redis数据结构与全局命令概述

    前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. ...

  9. Redis实战 - 11 Redis GEO 实现附近的人功能

    各种社交软件里面都有附件的人的需求,在该应用中,我们查询附近1公里的食客,同时只需查询出20个即可. 文章目录 1. Redis GEO常用命令 2. 上传用户地理位置 1. RedisKeyCons ...

  10. Redis实战 - 15 Redis事务机制和乐观锁实现

    文章目录 1. Redis事务简介 2. Redis事务的操作命令 3. Redis的事务回滚 4. Redis监控事务 1. Redis事务简介 在 Redis 中,也存在多个客户端同时向 Redi ...

最新文章

  1. 3、将对象存储到zookeeper中,然后再拿下来还原
  2. linux RPM-GPG-KEY 包签名机制 简介
  3. python工作-Python自动化运维|Python语言工作岗位待遇如何?
  4. 不同分辨率的LCM进行兼容
  5. mybatis多条件查询
  6. 用Python实现优先级队列
  7. java word 饼图_[Java教程]echarts标准饼图解读(一)——基本配置demo
  8. Foxmail 绑定企业邮箱
  9. Access日期、时间函数
  10. 图形的认识(curve,surface,hypersurface)
  11. 谷歌浏览器如何在不登录的情况下保存书签
  12. 计算机图形学---纹理及纹理隐射
  13. 勾股数规律(任意三个数能够满足勾股定理需要满足的条件)
  14. java script中extends,JavaScript继承之ES6的extends
  15. 学习-Java继承和多态之方法重载
  16. Android 微光闪烁效果
  17. nuxt.js实战asyncdata服务端渲染
  18. 原来开车和写博客是很相似的心理变化过程
  19. 需求文档 | 产品需求文档(PRD)
  20. JOSH智能物联网操作系统正式发布

热门文章

  1. 如何产生高斯带限白噪声数据_车间噪声对我们的身体产生巨大影响,我们该如何解决?...
  2. 广度优先遍历算法-02合法的括号问题
  3. 【数据结构】队列-顺序队列、循环队列、链队、双端队列
  4. 并查集求欧拉回路/通路
  5. 【Boost】boost库中function和bind一起使用的技巧(二)
  6. STL vector的erase操作问题
  7. mediasoup-client 和 libmediasoupclient 指南
  8. 实操笔记:为 NSQ 配置监控服务的心路历程
  9. MongoDB入门教程(1)
  10. 《深入理解Kafka:核心设计与实践原理》笔误及改进记录