Redis
文章平均质量分 92
迷途码界
一些原理解读,经验分享
segmentfault:迷途码界(https://segmentfault.com/u/cclovel/articles)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis的RDB持久化和AOF持久化的对比总结
Redis 的RDB和AOF的对比总结RDB持久化(Redis DataBase)Redis是内存数据库,一旦服务器进程退出,服务器中的数据库状态也会消失不见。重点在于save和bgsave命令。RDB文件的创建与载入save命令:阻塞Redis服务器进程,直到知道RDB文件创建为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。bsave命令:派生出子线程,由子线程创建RDB文件...原创 2020-02-18 17:06:03 · 429 阅读 · 0 评论
-
基于Linux 的 Redis集群搭建、出现的问题解决与使用
1.下载并解压cd /home/john/rediswget http://download.redis.io/releases/redis-3.2.11.tar.gztar -zxvf redis-3.2.11.tar.gz 2.编译安装cd redis-3.2.11make && make install3. 将 redis-trib.rb 复制到...原创 2018-06-05 11:21:14 · 233 阅读 · 0 评论
-
Redis 缓存穿透、缓存雪崩原理及解决方案
Redis缓存的场景客户端请求在缓存层命中就直接返回,如果miss就去读取存储层,存储层读取到就写入缓存层,然后再返回到客户端 Redis的优缺点优点:加速读写,降低后端负载、减少DB压力缺点:数据不能保证一致性,代码维护成本和运维成本缓存穿透引发原因在查询一个一定不存在的数据,由于缓存是不命中时被动写入,并且处于容错考虑,如果从存储层查不到数据则不写入缓存...原创 2018-09-06 22:58:55 · 5191 阅读 · 0 评论
-
企业级Redis开发运维从入门到实践 (21)— 全量复制和部分复制
全量复制对于一个存储了很多数据的 master(主节点),slave(从节点)去做一个复制,想要的想过是把 master 的数据全部同步过来,在同步过程中 master 写入的新数据也需要同步过来,这样才可以达到数据完整同步的效果。全量复制可以完成上述功能,首先将当前的 RDB 文件同步给 slave,写入命令单独记录;当 RDB 文件加载完后,通过偏移量的对比将这期间产生写入的值同步给 sl...原创 2018-10-15 11:30:53 · 279 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (20)— Redis复制的原理与优化
什么是主从复制单机有什么问题?单机存在机器故障、容量瓶颈、QPS(每秒查询率)瓶颈的问题。主从复制的作用数据副本扩展读性能;一对一的主从结构一对多的主从结构(主从备份、读写分离)简单示例主节点 set 数据后,从节点可以 get 到主节点中写入的数据。总结一个 master 可以有多个 salve。一个 salve 只能有一个 master。数据流向是单向的,...原创 2018-10-08 18:09:44 · 273 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (22)— 全量、部分复制的故障处理
故障处理无自动故障转移当Server1故障无法向Client提供服务时,无法将服务转移到Server2继续为Client提供个服务。自动故障转移当Server1故障无法向Client提供服务时,将服务转移到Server2继续为Client提供个服务。主从结构 — 故障转移slave 故障当一个 Slave 出现故障,对于 Master 来说没有太大的问题,除非 Master 的压...原创 2018-10-15 15:55:38 · 288 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (27)— Redis Sentinel(哨兵)的实现原理分析
三个定时任务每10秒每个sentinel对master和slave执行info发现slave节点确认主从关系每2秒每个sentinel通过master节点的channel(频道)交换信息(pub/sub)通过_sentinel_:hello频道交互交互对节点的“看法”和自身信息每1秒每个sentinel对其他sentinel和redis执行ping心跳检测,失败判断...原创 2018-10-18 16:51:32 · 500 阅读 · 1 评论 -
企业级Redis开发运维从入门到实践 (23)— Redis Sentinel(哨兵)的架构说明
主从复制高可用?手动故障转移写能力和存储能力受限主从复制 — master故障对于 Master 出现的故障,左边的 Client 是无法在做读写操作;右边的只读客户端是正常的,对应的 Client 服务是正常使用的;此时需要对这个故障进行处理,比较简单的方法是 向一个Slave 执行 slaveof no one 命令,将其设为新的 Master ,对另外的 Slave 执行 sla...原创 2018-10-15 17:12:39 · 265 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (17)— AOF
RDB存在的问题耗时、耗性能Redis将数据dump到硬盘当中,形成一个RDB文件。首先是计较耗时的,它会将所有数据进行一个dump,是一个耗时为 O(n) 的过程,它的写会消耗很多CPU。其次是内存的消耗,bgsave要做一个 fork() 的过程,fork() 会生成一个Redis的子进程,虽然不会进行一个完整的内存拷贝,而是类似于copy-on-write 的策略,假如写的量非常...原创 2018-09-30 17:18:51 · 397 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (20)— runid和偏移量
数据同步Redis在2.8及以上版本使用psync命令完成主从数据同步,同步过程分为:全量复制和部分复制全量复制:一般用于初次复制场景,Redis早期支持的复制功能只有全量复制,它会把主节点全部数据一次性发送给从节点,当数据量较大时,会对主从节点和网络造成很大的开销。部分复制:用于处理在主从复制中因网络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发丢失数...原创 2018-10-09 17:56:09 · 2402 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (28)— Redis Sentinel(哨兵)的开发与运维中的问题、总结
节点运维节点上线和下线的对象主节点从节点Sentinel节点节点下线原因机器下线:节点所在的机器出现了不稳定或者即将过保被回收。机器性能不足:节点所在的机器性能比较差或者内存比较小,无法支撑应用方的需求。例如CPU、内存、硬盘、网络等。节点自身故障:节点自身出现服务不正常情况。例如机器或系统导致。主节点下线如果需要对主节点进行下线,比较合理的做法是选出一个“合适”(例如...原创 2018-10-19 15:29:24 · 490 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (24)— Redis Sentinel(哨兵)的安装配置
Redis Sentinel(哨兵)的安装配置配置开启主从节点。配置开启 sentinel 监控节点。(sentinel 是特殊的 redis,默认端口26379)实际应该多台机器。详细配置节点。Redis主节点启动:redis-server redis-7000.conf配置:port 7000daemonize yespidfile /var/run/redis-...原创 2018-10-17 12:02:57 · 322 阅读 · 1 评论 -
企业级Redis开发运维从入门到实践 (25)— Redis Sentinel(哨兵)的客户端连接
客户端连接请求响应流程既然已经实现高可用为什么不直接直连?高可用涉及的是服务高可用、完成自动的故障转移;故障转移后客户端无法感知将无法保证正常的使用。需要保证的是服务高可用 和 客户端高可用。客户端实现基本原理客户端实现基本原理 - step1:获取所有的Sentinel的节点和MasterName,遍历Sentinel集合得到一个可用(即可以ping通)的Sentinel节点。...原创 2018-10-17 12:09:29 · 7865 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (26)— Redis Sentinel(哨兵)的实现原理
故障转移演练客户端高可用观察故障转移演练(客户端)故障演练(日志分析)原创 2018-10-17 17:23:05 · 362 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (29)— Redis Cluster(集群)的介绍
Redis Cluster的介绍Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前,Redis分布式方案一般有两种:客户端分区方案,优点是分区逻辑可控,缺点是需要自己处理数据路由、高可用、故障转移等问题。代理方案,优点是简化客户端分布...原创 2018-10-22 15:05:26 · 355 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (30)— Redis Cluster(集群)的数据分布
数据分布理论分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。...原创 2018-10-24 16:22:06 · 389 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (31)— Redis Cluster(集群)的搭建集群、基本架构、原生命令安装、官方工具安装
单机架构和分布式架构对比单机架构分布式架构Redis Cluster架构节点:每个节点需要开启配置cluster-enabled yes,让Redis运行在集 群模式下,节点数量至少为6个才能保证组成完整 高可用的集群。meet(节点握手):节点通过Gossip协议彼此通信,达到感知对方的过程,即所有节点共享消息。指派槽:每个key会映射为一个固定的槽,只有当节点分配了...原创 2018-10-30 15:53:35 · 635 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (32)— Redis Cluster(集群)的节点通信 —— 通讯流程、Gossip消息、节点选择
通讯流程元数据信息机制在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据;是否出现故障等状态信息。常见的元数据维护方式常见的元数据维护方式分为:集中式P2P方式Redis集群采用的元数据维护方式Redis集群采用P2P的Gossip(流言)协议, Gossip协议工作原理就是节点彼此不断通信交换信息,一段时间后所有的节点都会知道集群完整的信...原创 2018-11-05 17:18:56 · 971 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (33)— Redis Cluster(集群)的集群伸缩 —— 伸缩原理、扩容集群、收缩集群
伸缩原理Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容,如下图所示。从图中看出,Redis 集群可以实现对节点的灵活上下线控制。其中原理可抽象为槽和对应数据在不同节点之间灵活移动。首先来看我们之前搭建的集群槽和数据与节点的对应关系,如下图所示。三个主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节...原创 2018-11-28 14:01:11 · 724 阅读 · 1 评论 -
企业级Redis开发运维从入门到实践 (5)— hash数据结构的内部编码及相关命令详解
哈希的内部编码哈希类型的内部编码有两种:ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个), 同时所有值都小于hash-max-ziplist-value配置(默认64个字节)时,Redis会使用ziplist作为哈希的内部实现 ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比ha...原创 2018-09-17 11:16:44 · 257 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (19)— 开发运维常见问题(fork操作、子进程开销和优化、AOF追加阻塞、单机多实例部署持久化优化)
forkfork操作同步操作:执行 bgsave、bgrewriteaof都是首先执行一个fork操作,fork只是做一个内存页的拷贝,大部分情况下速度都是很快的;但是本次的 fork 操作卡在某个地方将会阻塞Redis的主线程。与内存量息息相关:实例内存越大,fork 耗时越长(与机器类型有关)。info:latest_fork_usec(上次执行 fork 的微秒数),这个数值比较大...原创 2018-10-08 17:07:32 · 534 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (16)— RDB
什么是RDBRedis通过一条命令将内存中的数据完整的保存一个创建的二进制的RDB文件(快照)。当需要对Redis进行恢复,将加载RDB文件,恢复某时某刻的数据。RDB文件还是一个复制媒介,可以使用RDB实现主从复制。触发机制 — 主要三种方式save(同步)客户端发送save命令;redis将创建一个RDB文件。redis> saveOK由于save是一个...原创 2018-09-26 20:27:33 · 323 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (6)— list数据结构的内部编码及相关命令详解
列表的内部编码列表类型的内部编码有两种:ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个) 同时所有值都小于hash-max-ziplist-value配置(默认64个字节)时,Redis会使用ziplist作为哈希的内部实现。linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使...原创 2018-09-17 14:56:29 · 295 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (7)— set数据结构的内部编码及相关命令详解
集合的内部编码集合类型的内部编码有两种:intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选用intset来作为集合内部实现,从而减少内存的使用。hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现。下面用示例来说明:...原创 2018-09-17 16:14:41 · 277 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (1)—Redis 初识
Redis是什么Redis是一个开源、基于键值的存储服务系统,具有多种数据结构,同时具有高性能、功能丰富(即高性能Key-Value、多种数据结构、丰富的功能、高可用分布式支持的数据存储服务)的特性。Redis使用公司下面等公司都在使用Redis Redis的特性八大特性:速度快、持久化、 多种数据结构、支持多种变成语言、功能丰富、简单、主从复制、高可用、分布式。...原创 2018-09-13 20:32:12 · 502 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (2)—Redis 安装
Redis安装(Linux)1、下载并解压cd /home/john/rediswget http://download.redis.io/releases/redis-3.2.11.tar.gztar -zxvf redis-3.2.11.tar.gz 2、建立软连接方便版本后续的版本升级ln -s redis-3.2.11 redis3、编译安装cd redis...原创 2018-09-14 11:24:59 · 279 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (3)—Redis API的使用和理解
Redis API的使用和理解通用命令这里只简单介绍六个常用针对key(键值)的通用命令keys:KEYS [pattern] 查找所有符合给定模式 pattern 的 key ,keys命令一般不再生产环境使用,数据量大时处理速度慢,会照成阻塞。可以做热备从节点,scan。//KEYS * 匹配数据库中所有 key 。127.0.0.1:6379> set hel...原创 2018-09-14 14:23:09 · 417 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (8)— zset数据结构的内部编码及相关命令详解
有序集合的内部编码有序集合类型的内部编码有两种ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素的值小于zset-max-ziplist-value配置(默认64个字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存使用。skiplist(跳跃表):当ziplist...原创 2018-09-25 11:32:16 · 354 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (4)— String数据结构的内部编码及相关命令详解
字符串的内部编码字符串类型的内部编码有3种:int:8个字节的长整型embstr:小于等于39个字节的字符串raw:大于39个字节的字符串Redis会根据当前值的类型和长度决定使用内部编码实现。整数类型示例如下:127.0.0.1:6379> set str 1234567 OK127.0.0.1:6379> object原创 2018-09-14 15:55:19 · 295 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (9)— Java客户端Jedis
Jedis是什么Jedis就是一个基于Java的redis-cli,遵循Redis提供的协议请求Redis实现对其操作。Maven依赖Jedis的Maven依赖:<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <v...原创 2018-09-25 16:51:53 · 313 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (10)— 慢查询
客户端请求Redis的生命周期慢查询发生在第3阶段。客户端超时不一定是慢查询,但是慢查询是客户端超时的一个可能的原因。慢查询的两个配置slowlog-max-len它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log。先...原创 2018-09-25 17:41:14 · 276 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (11)— pipeline(流水线)
1次网络命令通讯模型批量网络命令通讯模型什么是流水线将单条命令进行打包,将多条命令进行打包,一次pipeline将以一次网络执行,执行n次命令执行以减少多次网络开销。流水线的作用命令N个命令操作一次pipeline(n个命令)时间n次网络 + n次命令1次网络 + n次命令数据量1条命令n条命令两点注意Redis的命令时间是微秒级别,网...原创 2018-09-25 19:36:51 · 531 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (12)— 发布订阅
发布订阅角色发布者(publisher)订阅者(subscriber)频道(channel)通讯模型对于发布者(publisher)来说其实是一个客户端,对于订阅者(subscriber)来说也是一个客户端,在Redis server里面是有一个频道;发布者发布一条hello的消息,订阅者订阅了频道,每个订阅了该频道的订阅者都能收到这条消息。其实类似于下面这种生产\消费模型,生...原创 2018-09-25 20:24:46 · 268 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (12)— Bitmap(位图)
位图结构以位图的形式写入,取出数据进行查看redis> set hello bigOKredis> getbit hello 0(integer) 0reids> getbit hello 1(integer) 1所以得出下图的结构,其实Redis是可以直接操作位的,这就是Redis的位图功能。位图相关命令setbitsetbit key offset...原创 2018-09-26 11:46:32 · 225 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (13)— HyperLogLog
HyperLogLog是做什么的基于HyperLogLog算法:极小空间完成独立数量统计,1亿条数据的存储只需要不到1K内存就能做到;redis中实现的HyperLogLog,只需要12K内存,在标准误差0.81%的前提下,能够统计2^{64}个数据。本质还是字符串。...原创 2018-09-26 16:39:28 · 307 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (14)— GEO
GEO是什么GEO(地理信息定位):存储经纬度,计算两地距离,范围计算等。应用场景类似微信中摇一摇,找出范围内的用户。类似美团中酒店查询,找出范围内的酒店。5个城市经纬度城市纬度经度简称北京116.2839.55beijing天津117.1239.08tianjin石家庄114.2938.02shijiazhuang唐山...原创 2018-09-26 18:18:54 · 265 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (15)— 持久化的作用
持久化的作用什么是持久化Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上。防止在服务器或服务宕机而引起的数据丢失。持久化的实现方式快照:某时某点数据的一个备份。写日志:数据库做了任何数据的更新,就记录在日志当中。...原创 2018-09-26 18:27:53 · 203 阅读 · 0 评论 -
企业级Redis开发运维从入门到实践 (18)— RDB和AOF的抉择
RDB和AOF比较命令RDBAOF启动优先级低高体积小大恢复速度快慢数据安全性丢数据根据策略决定轻重重轻RDB最佳策略“关”:关掉RDB(无论主从),除了主从复制中的全量复制需要主节点执行一次bgsave,把 RDB 文件传给从节点来实现一个复制的效果。集中管理:虽然 RDB 是一个很重的操作,但是对于数据备份是很好的...原创 2018-10-08 11:59:05 · 220 阅读 · 0 评论
分享