![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis开发与运维
文章平均质量分 90
Redis开发与运维
陈彬_smile
待到山花烂漫时,她在丛中笑。
展开
-
Redis-缓存设计
缓存能够有效地加速应用的读写速度, 同时也可以降低后端负载, 对日常应用的开发至关重要。 但是将缓存加入应用架构后也会带来一些问题, 本章将针对这些问题介绍缓存使用技巧和设计方案, 包含如下内容:·缓存的收益和成本分析。·缓存更新策略的选择和使用场景。·缓存粒度控制方法。·穿透问题优化。·无底洞问题优化。·雪崩问题优化。·热点key重建优化。1 缓存的收益和成本收益如下:·加速读写: 因为缓存通常都是全内存的(例如Redis、 Memcache) , 而存储层通常读写性能不够强悍.原创 2021-01-10 12:00:28 · 297 阅读 · 0 评论 -
Redis Cluster-集群
Redis Cluster是Redis的分布式解决方案, 在3.0版本正式推出, 有效地解决了Redis分布式方面的需求。 当遇到单机内存、 并发、 流量等瓶颈时, 可以采用Cluster架构方案达到负载均衡的目的。 之前, Redis分布式方案一般有两种:·客户端分区方案, 优点是分区逻辑可控, 缺点是需要自己处理数据路由、 高可用、 故障转移等问题。·代理方案, 优点是简化客户端分布式逻辑和升级维护便利, 缺点是加重架构部署复杂度和性能损耗。现在官方为我们提供了专有的集群方案: Redis Cl原创 2021-01-09 17:50:09 · 316 阅读 · 4 评论 -
Redis Sentinel(哨兵) 架构
Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。可喜的是Redis从2.8开始正式提供了Redis Sentinel(哨兵) 架构来解决这个问题。Redis Sentinel是Redis的高可用实现方案, 在实际的生产环境中, 对提高整个系统的高可用性是非常有帮助的。Redis Sentinel的高可用性当主节点出现故障时, Redis Sentinel能自动完成故障原创 2021-01-09 16:08:38 · 120 阅读 · 0 评论 -
Redis-理解内存
·内存消耗分析。·管理内存的原理与方法。·内存优化技巧。1 内存消耗理解Redis内存, 首先需要掌握Redis内存消耗在哪些方面。 有些内存消耗是必不可少的, 而有些可以通过参数调整和合理使用来规避内存浪费。 内存消耗可以分为进程自身消耗和子进程消耗。需要重点关注的指标有: used_memory_rss和used_memory以及它们的比值mem_fragmentation_ratio。当mem_fragmentation_ratio>1时, 说明used_memory_rs原创 2021-01-06 20:50:45 · 114 阅读 · 0 评论 -
Redis-阻塞分析
Redis是典型的单线程架构, 所有的读写操作都是在一条主线程中完成的。当Redis用于高并发场景时, 这条线程就变成了它的生命线。 如果出现阻塞, 哪怕是很短时间, 对于我们的应用来说都是噩梦。·内在原因包括: 不合理地使用API或数据结构、 CPU饱和、 持久化阻塞等。·外在原因包括: CPU竞争、 内存交换、 网络问题等。1 发现阻塞当Redis阻塞时, 线上应用服务应该最先感知到, 这时应用方会收到大量Redis超时异常,, 比如Jedis客户端会抛出JedisConnectionEx原创 2021-01-06 15:51:47 · 306 阅读 · 0 评论 -
Redis-复制
在分布式系统中为了解决单点问题, 通常会把数据复制多个副本部署到其他机器, 满足故障恢复和负载均衡等需求。 Redis也是如此, 它为我们提供了复制功能, 实现了相同数据的多个Redis副本。 复制功能是高可用Redis的基础, 哨兵和集群都是在复制的基础上实现高可用的。·介绍复制的使用方式: 如何建立或断开复制、 安全性、 只读等。·说明复制可支持的拓扑结构, 以及每个拓扑结构的适用场景。·分析复制的原理, 包括: 建立复制、 全量复制、 部分复制、 心跳等。·介绍复制过程中常见的开发和运维问题原创 2020-12-31 15:35:27 · 356 阅读 · 0 评论 -
Redis-持久化
Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。1.RDBRDB持久化就是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。1.1触发机制·bgsave命令: Redis进程执行fork操作创建子进程, RDB持久化过程由子进程负责, 完成后自动结束。 阻塞只发生在fork阶段, 一般时间很短。 运行bgsave命令对应的Redis日志如下:* Back.原创 2020-12-28 17:36:53 · 2484 阅读 · 0 评论 -
Redis-客户端
本章内容如下:·客户端通信协议·Java客户端Jedis·客户端管理·客户端常见异常·客户端案例分析1 客户端通信协议一, 客户端与服务端之间的通信协议是在TCP协议之上构建的。第二,Redis制定了RESP(REdis Serialization Protocol, Redis序列化协议) 实现客户端与服务端的正常交互, 这种协议简单高效, 既能够被机器解析, 又容易被人类识别。1.发送命令格式RESP的规定一条命令的格式如下, CRLF代表"\r\n"。以set hell w原创 2020-12-24 14:50:06 · 334 阅读 · 0 评论 -
Redis-发布订阅,GEO
1.发布订阅Redis提供了基于“发布/订阅”模式的消息机制, 此种模式下, 消息发布者和订阅者不进行直接通信, 发布者客户端向指定的频道(channel) 发布消息, 订阅该频道的每个客户端都可以收到该消息, 如图3-16所示。 Redis提供了若干命令支持该功能, 在实际应用开发时, 能够为此类问题提供实现方法。1 命令Redis主要提供了发布消息、 订阅频道、 取消订阅以及按照模式订阅和取消订阅等命令。1.发布消息publish channel message下面操作会向channel原创 2020-12-18 15:01:49 · 117 阅读 · 0 评论 -
Redis-Bitmaps,HyperLogLog
Bitmaps1.数据结构模型原创 2020-12-17 17:32:34 · 115 阅读 · 0 评论 -
Redis-慢查询、Pipeline、事务
1 慢查询分析慢查询分析: 通过慢查询分析, 找到有问题的命令进行优化。如图3-1所示, Redis客户端执行一条命令分为如下4个部分:1) 发送命令2) 命令排队3) 命令执行4) 返回结果需要注意, 慢查询只统计步骤3) 的时间, 所以没有慢查询并不代表客户端没有超时问题。1.1 慢查询的两个配置参数对于慢查询功能, 需要明确两件事:·预设阀值怎么设置?·慢查询记录存放在哪?Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解原创 2020-12-14 17:23:51 · 210 阅读 · 0 评论 -
Redis-键管理
本节将按照单个键、 遍历键、 数据库管理三个维度对一些通用命令进行介绍。1 单个键管理1.键重命名rename key newkey下面操作将键python重命名为java:127.0.0.1:6379> set python jedisOK127.0.0.1:6379> rename python javaOK127.0.0.1:6379> get python(nil)127.0.0.1:6379> get java"jedis"如果在rena原创 2020-11-26 11:34:55 · 104 阅读 · 0 评论 -
Redis-API理解和使用-有序集合(zset)
有序集合相对于哈希、 列表、 集合来说会有一点点陌生, 但既然叫有序集合, 那么它和集合必然有着联系, 它保留了集合不能有重复成员的特性,但不同的是, 有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是, 它给每个元素设置一个分数(score) 作为排序的依据。1 命令1.集合内(1) 添加成员zadd key score member [score member ...]下面操作向有序集合user: ranking添加用户tom和他的分数251:127原创 2020-11-20 09:45:57 · 1171 阅读 · 0 评论 -
Redis-API理解和使用-集合(set)
集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中不允许有重复元素, 并且集合中的元素是无序的, 不能通过索引下标获取元素。Redis除了支持集合内的增删改查, 同时还支持多个集合取交集、 并集、 差集, 合理地使用好集合类型, 能在实际开发中解决很多实际问题。1 命令1.集合内操作(1) 添加元素sadd key element [element ...]127.0.0.1:6379> exists myset(integer) 0127.原创 2020-11-19 09:57:39 · 265 阅读 · 0 评论 -
Redis-API理解和使用-列表(list)
列表(list) 类型是用来存储多个有序的字符串, 如图2-18所示, a、b、 c、 d、 e五个元素从左到右组成了一个有序的列表, 列表中的每个字符串称为元素(element) , 一个列表最多可以存储232-1个元素。 在Redis中, 可以对列表两端插入(push) 和弹出(pop) , 还可以获取指定范围的元素列表、 获取指定索引下标的元素等(如图2-18和图2-19所示) 。 列表是一种比较灵活的数据结构, 它可以充当栈和队列的角色, 在实际开发上有很多应用场景。列表类型有两个特点:第一原创 2020-11-18 10:48:04 · 631 阅读 · 0 评论 -
Redis-API理解和使用-哈希(hash)
几乎所有的编程语言都提供了哈希(hash) 类型, 它们的叫法可能是哈希、 字典、 关联数组。 在Redis中, 哈希类型是指键值本身又是一个键值对结构, 形如value={{field1, value1}, ...{fieldN, valueN}}, Redis键值对和哈希类型二者的关系可以用图2-14来表示。1.命令(1) 设置值hset key field value下面为user: 1添加一对field-value:127.0.0.1:6379> hset user:.原创 2020-11-17 15:42:48 · 162 阅读 · 0 评论 -
Redis-API理解和使用-字符串(String)
字符串类型是Redis最基础的数据结构。 首先键都是字符串类型, 而且其他几种数据结构都是在字符串类型基础上构建的, 所以字符串类型能为其他四种数据结构的学习奠定基础。 如图2-7所示, 字符串类型的值实际可以是字符串(简单的字符串、 复杂的字符串(例如JSON、 XML) ) 、 数字(整数、 浮点数) , 甚至是二进制(图片、 音频、 视频) , 但是值最大不能超过512MB。1.常用命令(1) 设置值set key value [ex seconds] [px milliseccond原创 2020-11-17 09:56:24 · 123 阅读 · 0 评论 -
Redis,API的理解和使用-全局命令
1.全局命令1.1查看所有键keys *下面插入了3对字符串类型的键值对:127.0.0.1:6379> set hello worldOK127.0.0.1:6379> set java jedisOK127.0.0.1:6379> set python redis-pyOKkeys*命令会将所有的键输出:127.0.0.1:6379> keys *1) "python"2) "java"3) "hello"1.2键总数dbsize下原创 2020-11-16 11:13:14 · 91 阅读 · 0 评论 -
初识Redis
1.Redis特性1.1速度快正常情况下, Redis执行命令的速度非常快, 官方给出的数字是读写性能可以达到10万/秒, 当然这也取决于机器的性能, 但这里先不讨论机器性能上的差异, 只分析一下是什么造就了Redis除此之快的速度, 可以大致归纳为以下四点:Redis的所有数据都是存放在内存中的Redis是用C语言实现的, 一般来说C语言实现的程序“距离”操作系统更近, 执行速度相对会更快。Redis使用了单线程架构, 预防了多线程可能产生的竞争问题作者对于Redis源代码可以说是精打细原创 2020-09-29 20:53:23 · 122 阅读 · 0 评论