
Redis
文章平均质量分 77
杰深入学习计算机
莫道桑榆晚,为霞尚满天。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Redis】Redis 典型应⽤ - 分布式锁
在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要通过 锁 来做互斥控制, 避免出现类似于 “线程安全” 的问题.原创 2024-08-31 19:58:12 · 1170 阅读 · 0 评论 -
【Redis】Redis 典型应⽤ - 缓存 (cache)
缓存 (cache) 是计算机中的⼀个经典的概念. 在很多场景中都会涉及到.核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅, ⽅便随时读取.对于计算机硬件来说, 往往访问速度越快的设备, 成本越⾼, 存储空间越⼩.缓存是更快, 但是空间上往往是不⾜的. 因此⼤部分的时候, 缓存只放⼀些 热点数据 (访问频繁的数据),就⾮常有⽤了.原创 2024-08-31 19:44:45 · 1795 阅读 · 0 评论 -
【redis】集群 (cluster)
节点之间通过⼼跳包通信. ⼼跳包中包含了该节点持有哪些 slots. 这个是使⽤位图这样的数据结构表⽰的. 表⽰ 16384 (16k) 个 slots, 需要的位图⼤⼩是 2KB. 如果给定的 slots 数更多了, ⽐如 65536个了, 此时就需要消耗更多的空间, 8 KB 位图表⽰了. 8 KB, 对于内存来说不算什么, 但是在频繁的⽹。当引⼊⼀个新的分⽚, N 从 3 => 4 时, ⼤量的 key 都需要重新映射. (某个key % 3 和 % 4 的结果不⼀样,就映射到不同机器上了).原创 2024-08-31 19:05:12 · 735 阅读 · 0 评论 -
【Redis】哨兵(Sentinel)
Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的,于是 Redis 从 2.8 开始提供了 Redis Sentinel(哨兵)加个来解决这个问题。原创 2024-08-31 14:10:44 · 1606 阅读 · 0 评论 -
【Redis】主从复制
主从复制解决的问题:单点问题.单个 redis 节点, 可⽤性不⾼.单个 redis 节点, 性能有限.Redis 通过复制功能实现主节点的多个副本。主节点⽤来写, 从节点⽤来读. 这样做可以降低主节点的访问压⼒.复制⽀持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。复制分为全量复制, 部分复制和实时复制。主从节点之间通过⼼跳机制保证主从节点通信正常和数据⼀致性。主节点配置不需要改动.从节点在配置⽂件中加⼊ slaveof 主节点ip 主节点端⼝ 的形式即可.原创 2024-08-29 17:16:16 · 1183 阅读 · 0 评论 -
【Redis】Redis 事务
Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执⾏.弱化的原子性: Redis 没有 “回滚机制”, 只能做到这些操作 “批量执行”, 不能做到 “一个失败就恢复到初始状态”.不保证一致性: 不涉及 “约束”, 也没有回滚, MySQL 的一致性体现的是运行事务前和运行后, 结果都是合理有效的, 不会出现中间非法状态.不需要隔离性: 也没有隔离级别, 因为不会并发执行事务(Redis单线程处理请求)原创 2024-08-28 15:01:21 · 757 阅读 · 0 评论 -
【Redis】持久化——AOF机制
AOF(Append Only File)持久化:以独⽴⽇志的⽅式记录每次写命令,重启时再重新执⾏ AOF⽂件中的命令达到恢复数据的⽬的。AOF 的主要作⽤是解决了数据持久化的实时性,⽬前已经是Redis 持久化的主流⽅式。理解掌握好 AOF 持久化机制对我们兼顾数据安全性和性能⾮常有帮助。原创 2024-08-26 15:27:49 · 1218 阅读 · 0 评论 -
【Redis】持久化——rdb机制
Redis ⽀持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。原创 2024-08-26 14:19:41 · 1141 阅读 · 0 评论 -
【Redis】Redis客户端——Jedis(Java)
要想让本地主机能访问 Redis, 需要把Redis的端口通过云服务器后台页面的 “防火墙” / “安全组” 放开端口到公网上. 但是这个操作非常危险(黑客会顺着Redis端口进来).因此我们可以使用端口转发的方式, 直接把服务器的Redis端口映射到本地。注意, xshell 和服务器必须处在连接状态, 这样的映射才是有效的.Redis 服务器按照在云服务器上, 而我们编写的代码则是在本地主机.此时, 访问本地的 8888, 就相当于访问对应服务器的 6379。3) 使⽤该会话连接服务器.原创 2024-08-24 20:23:51 · 493 阅读 · 0 评论 -
【Redis】渐进式遍历和数据库管理
许多关系型数据库,例如 MySQL ⽀持在⼀个实例下有多个数据库存在的,但是与关系型数据库⽤字符来区分不同数据库名不同,Redis 只是⽤数字作为多个数据库的实现。每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执⾏多次 scan。Redis 提供了⼏个⾯向 Redis 数据库的操作,分别是 dbsize、select、flushdb、flushall 命令,本机将通过具体的使⽤常⻅介绍这些命令。返回值:下⼀次 scan 的游标(cursor)以及本次得到的键。原创 2024-08-24 15:43:17 · 517 阅读 · 0 评论 -
【Redis】Redis数据结构——zset 有序集合
有序集合相对于字符串、列表、哈希、集合来说会有⼀些陌⽣。它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是⽤下标作为排序依据⽽是⽤这个分数。有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利⽤有序集合,可以帮助我们在实际开发中解决很多问题。有序集合中的元素是不能重复的,但分数允许重复。类⽐于⼀次考试之后,每个⼈⼀定有⼀个唯⼀的分数,但分数允许相同。原创 2024-08-24 01:15:43 · 787 阅读 · 0 评论 -
【Redis】Redis数据结构——Set 集合
集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中 1)元素之间是⽆序的 2)元素不允许重复,如图 2-24 所⽰。⼀个集合中最多可以存储 个元素。Redis 除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题。原创 2024-08-23 18:55:01 · 672 阅读 · 0 评论 -
【Redis】Redis数据结构——List列表
列表类型是⽤来存储多个有序的字符串,如图 2-19 所⽰,a、b、c、d、e 五个元素从左到右组成了⼀个有序的列表,列表中的每个字符串称为元素(element),⼀个列表最多可以存储 个元素。在 Redis 中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等(如图 2-19 和图 2-20 所⽰)。列表是⼀种⽐较灵活的数据结构,它可以充当栈和队列的⻆⾊,在实际开发上有很多应⽤场景。原创 2024-08-23 13:20:56 · 1250 阅读 · 0 评论 -
【Redis】Redis数据结构——Hash 哈希
⼏乎所有的主流编程语⾔都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key = “key”,value = { {field1, value1 }, …, {fieldN, valueN } },Redis 键值对和哈希类型⼆者的关系可以⽤图 2-15 来表⽰。原创 2024-08-23 12:37:01 · 1063 阅读 · 0 评论 -
【Redis】Redis数据结构——String 字符串
如图 2-12 所⽰,⼀个分布式 Web 服务将⽤⼾的 Session 信息(例如⽤⼾登录信息)保存在各⾃的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的。学会使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致 Redis 阻塞。原创 2024-08-22 21:37:09 · 1137 阅读 · 0 评论 -
【Redis】单线程架构
Redis 使⽤了单线程架构来实现⾼性能的内存数据库服务。原创 2024-08-22 18:49:09 · 529 阅读 · 0 评论 -
【Redis】数据结构和内部编码
可以改进内部编码, 而对外的数据结构和命令没有任何影响, 这样一旦开发出更优秀的内部编码, 无需改动外部数据结构和命令, 例如Redis 3.2 提供了 quicklist, 结合了 ziplist 和linkedlist 两者的优势, 为列表类型提供了一种更为优秀的内部编码实现, 而对用户来说基本无感知.实际上Redis内部针对每个数据结构都有自己的内部编码, 而且是多种实现, 这样Redis会在合适的场景选择合适的内部编码。原创 2024-08-22 18:32:36 · 323 阅读 · 0 评论 -
【Redis】基本全局命令
Redis 有 5 种数据结构,但它们都是键值对种的值,对于键来说有⼀些通⽤的命令。原创 2024-08-22 17:29:38 · 484 阅读 · 0 评论 -
【Redis & 知识储备】容器编排架构 -- 分布系统的演进(8)
借助容器技术(如docker) 将应用/服务可以打包为镜像, 通过容器编排工具(如k8s) 来动态分发和部署镜像。原创 2024-04-07 23:59:52 · 401 阅读 · 0 评论 -
【Redis & 知识储备】微服务架构 -- 分布系统的演进(7)
微服务是一种架构风格, 按照业务板块来划分应用代码, 使单个应用的职责更清晰, 相互之间可以做到独立升级迭代。原创 2024-04-07 23:50:37 · 413 阅读 · 0 评论 -
【Redis & 知识储备】垂直分库架构 -- 分布系统的演进(6)
数据库的数据被拆分, 数据库分布式存储, 分布式处理, 分布式查询, 也可以理解为分布式数据库框架。原创 2024-04-07 23:35:03 · 426 阅读 · 0 评论 -
【Redis & 知识储备】冷热分离架构 -- 分布系统的演进(5)
引入缓存, 实行冷热分离, 将热点数据放到缓存中快速响应 (如存储到Redis中)原创 2024-04-07 23:26:25 · 555 阅读 · 0 评论 -
【Redis & 知识储备】读写分离/主从分离架构 -- 分布系统的演进(4)
将数据库读写操作分散到不同的节点上, 数据库服务器搭建主从集群, 一主一从, 一主多从都可以, 数据库主机负责写操作, 从机只负责读操作。原创 2024-04-07 22:05:38 · 470 阅读 · 0 评论 -
【Redis & 知识储备】应⽤服务集群架构 -- 分布系统的演进(3)
这需要引⼊⼀个新的组件⸺负载均衡:为了解决⽤⼾流量向哪台应⽤服务器分发的问题,需要⼀个专⻔的系统组件做流量分发。服务再次升级, 客户访问的流量增大, 单台应用服务器不能满足需求。选择了⽔平扩展的⽅案,来解决该问题。原创 2024-04-02 13:43:37 · 289 阅读 · 0 评论 -
【Redis & 知识储备】应⽤数据分离架构 -- 分布系统的演进(2)
随着系统的上线,我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的⽤⼾,使得系统的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的⼀批经验。⾯对当前的性能压⼒,我们需要未⾬绸缪去进⾏系统重构、架构挑战,以提升系统的承载能⼒。但由于预算仍然很紧张,我们选择了将应⽤和数据分离的做法,可以最⼩代价的提升系统的承载能⼒。和之前架构的主要区别在于将数据库服务独⽴部署在同⼀个数据中⼼的其他服务器上,原创 2024-04-02 13:33:53 · 441 阅读 · 0 评论 -
【Redis & 知识储备】单机架构 -- 分布系统的演进(1)
投⼊市场进⾏检验,并且可以迅速响应变化要求。但好在前期⽤⼾访问量很少,没有对我们的性能、安全等提出很⾼的要求,⽽且。各凭本事, 通过性能测试, 分析出哪个环节出现了问题, 在依据该问题找到解决方案, 该过程是需要工作经验积累的。初期,我们需要利⽤我们精⼲的技术团队,,⽆需专业的运维团队,所以选择。节流 – 软件上的优化。开源 – 增加硬件资源。原创 2024-04-02 13:11:45 · 492 阅读 · 0 评论 -
【Redis】初识 Redis
Redis 提供了简单的 TCP 通信协议,很多编程语⾔可以很⽅便地接⼊到 Redis,并且由于 Redis 受到社区和各⼤公司的⼴泛认可,所以⽀持 Redis 的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语⾔,例如 C、C++、Java、PHP、Python、NodeJS 等,后续我们会对 Redis 的客⼾端使⽤做详细说明。计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加 1 的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。原创 2024-04-02 12:42:24 · 800 阅读 · 0 评论