作者文章

fwq

FWQ
服务器教程
详解redis集群的三种方式
详解redis集群的三种方式 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《详解redis集群的三种方式》,聊聊redis集群,我们一起来看看吧! Redis三种集群方式:主从复制,哨兵模式,Cluster集群。 主从复制 基本原理 当新建立一个从服务器时,从服务器将向主服务器发送SYNC命令,接收到SYNC命令后的主服务器会进行一次BGSAVE命令,在执行期间,会将所有命令写入缓冲区中,当BGSAVE命令执行完毕之后会将生成的RDB文件发送给从服务器,从服务器使用这个文件加载数据到内存中,之后主服务器会以Redis命令协议的格式将缓冲区的命令发送给从服务器。此后每次主服务执行命令都会同步给从服务器。即使有多个从服务器向主服务器发送SYNC命令,主服务器也只会执行一个BGSAVE命令,就可以处理接下来的同步请求。一个主服务器可以拥有多个从服务器,而从服务器也可拥有从服务器,从而形成一个图状结构,复制功能不会阻塞主服务器,即使有一个或多个同步请求,主服务器依然能处理命令请求。 持久化开关 当配置了主从复制模式时需要开启主服务器的持久化功能,如果将主服务器的持久化功能关闭,主服务器一旦重启,所有从服务器的数据将会丢失,即使配置了Sentinel模式,如果主服务器自动拉起进程比较快,以至于在Sentinel模式下还未选举出新的主服务器,主服务的启动也会造成子服务器的数据丢失。 配置 配置一个主从复制模式,只需要使用Slaveof命令即可,在conf配置文件中添加或者是在redis中执行命令。 SLAVEOF host port 哨兵模式 基本原理 Redis的Sentinel系统用于管理多个Redis,主要执行以下三件事: 监控:Sentinel会不断的检查主从服务器运行状态 提醒:当某个Redis服务器出现故障,可通过API或者其他应用程序发送通知 自动故障迁移:当一个主服务器不能正常工作时,Sentinel会进行一次故障自动迁移,会将失效主服务器的从服务器选举出一个新的主服务器,剩下的从服务器将会自动连接复制选举出来的新服务器的数据。 Redis的Sentinel系统是一个分布式的系统,可以在系统中配置一个或多个Sentinel。 启动 使用redis-sentinel启动 redis-sentinel sentinel.confy 也可以使用redis-server来启动 redis-server sentinel.conf…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现持久化的方式汇总
Redis实现持久化的方式汇总 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis实现持久化的方式汇总》,介绍一下Redis持久化,希望对大家的知识积累有所帮助,助力实战开发! Redis有3种实现持久化的方式:AOF日志、RDB快照、混合持久化 Redis写入AOF日志的过程 Redis执行完写操作命令后,将命令追加到server.aof_buf缓冲区通过write()系统调用,将aof_buf缓冲区的数据写入到AOF文件数据被拷贝到了内核缓冲区page cache由内核决定何时将数据写入硬盘 Redis实现RDB快照 生成 RDB 文件的两个命令:save 和 bgsave 执行save命令会在主线程生成RDB文件,执行bgsave命令会创建一个子进程来生成RDB文件 执行bgsave命令时,会通过fork()创建子进程,子进程和父进程共享同一片内存数据。因为创建子进程的时候,子进程复制父进程的页表,但页表指向的物理内存还是一个。如果主线程执行读操作,则主线程和 bgsave 进程互不影响;如果主线程执行写操作,则被修改的数据会复制一份副本,然后 bgsave 子进程会把该副本数据写入 RDB 文件,在这个过程中,主线程仍然可以直接修改原来的数据 混合持久化 在AOF日志重写过程,当开启了混合持久化时,在AOF重写日志时,fork出来的重写子进程会先将与主线程共享的内存数据以RDB方式写到AOF文件,然后主线程处理的操作命令会被记录在重写缓冲区,重写缓冲区里的增量命令会以AOF方式写入到AOF文件,写入完成后通知主进程将含有的RDB格式和AOF格式的AOF文件替换旧版。
2025-05-10 阅读全文 →
FWQ
服务器教程
redis3.2配置文件redis.conf详细说明
redis3.2配置文件redis.conf详细说明 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《redis3.2配置文件redis.conf详细说明》,聊聊redis配置详解,希望可以帮助到正在努力赚钱的你。 Redis启动的时候,可以指定配置文件,如下: /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf Redis.conf文件内容详细说明: # 默认redis不是以后台进程的方式启动,如果需要在后台运行,需要将这个值设置成yes # 以后台方式启动的时候,redis会写入默认的进程文件/var/run/redis.pid daemonize yes # redis启动的进程路径 pidfile/var/run/redis.pid # 启动进程端口号,这里最好不要使用默认的6379,容易被攻击 port 7179 tcp-backlog 511 # 配置redis监听到的ip地址,可以是一个也可以多个 bind 127.0.0.110.254.3.42 # redis的sock路径…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis安装教程图解
Redis安装教程图解 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis安装教程图解》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ redis是比较流行的NOSQL数据库之一,下面来记录下redis的安装过程: 1. 安装环境介绍:Redis版本:redis-3.0.1Linux版本:Red Hat Enterprise Linux Workstation release 7.0 (Maipo) 2. 下载所需Redis文件 在下载最新的稳定版本。这里下载的是redis-3.0.1.tar.gz 3. 将所下载文件放入Linux系统中 通过Xmanager中Xftp工具连接到对应机器,将redis-3.0.1.tar.gz放到/redis文件夹下,如下图: 4. 将压缩文件解压并编译 解压:tar zxvf redis-3.0.1.tar.gz 编译:make 5. 启动redis服务器 切换到src目录下,并通过./redis-server…
2025-05-10 阅读全文 →
FWQ
服务器教程
redis集群搭建_动力节点Java学院整理
redis集群搭建_动力节点Java学院整理 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《redis集群搭建_动力节点Java学院整理》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下搭建、redis集群,希望所有认真读完的童鞋们,都有实质性的提高。 现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这些都是我们及其不能容忍的,第一个必须要做到高可靠,其次才是高性能,好了,下面我来逐一搭建一下。 一:Redis集群搭建 1. 下载 首先去官网下载较新的3.2.0版本,下载方式还是非常简单的,比如官网介绍的这样。 $ wget http://download.redis.io/releases/redis-3.2.0.tar.gz $ tar xzf redis-3.2.0.tar.gz $ cd redis-3.2.0 $ make 2. redis配置 由于我们要做集群,而且还要redis自带的redis-trib.rb 能正常运行,我们需要在集群中开启三台master,三台slave,所以这里我需要建立6个文件夹,而且文件夹的名称就使用端口地址的名字,比如:6389. 6380….6384。 3. config配置。 现在directory的分布情况大致如上图,接下来要做的事情就是配置redis.conf了,在这里需要配置四个选项。。。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis:高效处理实时日志分析的秘密工具
Redis:高效处理实时日志分析的秘密工具 “纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《Redis:高效处理实时日志分析的秘密工具》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! Redis:高效处理实时日志分析的秘密工具 随着互联网的不断发展,日志分析已成为了许多企业和网站运营商必备的一项技术。通过对日志的分析,我们可以了解用户的行为习惯、优化系统性能和改善用户体验等。而实时日志分析更是在这个大数据时代中扮演着至关重要的角色。 然而,实时日志分析面临着许多挑战,如大数据量、高并发读写、快速响应等。为了解决这些问题,Redis(Remote Dictionary Server)成为了一个极其有帮助的工具,它是一个开源的、内存中的数据结构存储系统。 Redis提供了丰富的数据结构,如字符串、哈希、列表、集合和有序集合等,这使得它非常适合用于实时日志分析。而且,Redis还支持原子性操作,保证了在多线程和多进程环境下的数据一致性。 下面我们将通过具体的代码示例,介绍Redis在实时日志分析中的高效处理方式。 首先,我们需要先安装Redis,并在操作系统中启动Redis服务器。 # 安装Redis sudo apt-get install redis-server # 启动Redis服务器 redis-server 接下来,我们创建一个Python脚本来将实时日志添加到Redis中。 import redis import time # 连接Redis服务器 r =…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis的配置、启动、操作和关闭方法
Redis的配置、启动、操作和关闭方法 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Redis的配置、启动、操作和关闭方法》,聊聊关闭、启动、Redis配置,我们一起来看看吧! 一、启动Redis 1.默认配置启动 执行redis-server命令,按照默认的redis.conf配置文件中的配置启动Redis,如下: 因为默认配置无法自定义配置。所以该方式不会再生产环境中使用 2.运行配置启动 在命令redis-server后加上要修改的配置名和值(可以设置多对),没有设置的将使用默认配置。 如:redis-server –port 6389 –timeout 3000 虽然可以自定义配置。但是如果修改的配置较多则应该保存在配置文件中,不建议使用这种方式。 (配置文件启动 将配置文件写到指定的redis.conf文件里,启动时在redis-server命令后,指定配置文件的路径,则redis会按照配置文件redis.conf的配置进行启动。例如:redis-server redis.conf 二、 Redis命令行客户端redis-cli 1 redis-cli连接服务器的方式 (1)集群交互式 redis-cli -c -h 10.3.34.101 -p…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis Bitmaps怎么用
Redis Bitmaps怎么用 收藏 一分耕耘,一分收获!既然都打开这篇《Redis Bitmaps怎么用》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新数据库相关的内容,希望对大家都有所帮助! Redis版本:6.2.6 一、简单介绍 Bitmaps 位图不是实际的数据类型,而是在 String 类型上定义的一组面向位的操作。由于字符串是二进制安全的 blob,并且它们的最大长度为 512 MB,因此它们适合设置多达 2^32 个不同的位。       上述是Redis官网对 Bitmaps 的介绍,简单理解 Bitmaps 就是 Redis 提供的一系列直接操作 String 的位的指令,比如我们现在有一个字符串…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现分布式锁的几种方法总结
Redis实现分布式锁的几种方法总结 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis实现分布式锁的几种方法总结》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ Redis实现分布式锁的几种方法总结 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 我们来假设一个最简单的秒杀场景:数据库里有一张表,column分别是商品ID,和商品ID对应的库存量,秒杀成功就将此商品库存量-1。现在假设有1000个线程来秒杀两件商品,500个线程秒杀第一个商品,500个线程秒杀第二个商品。我们来根据这个简单的业务场景来解释一下分布式锁。 通常具有秒杀场景的业务系统都比较复杂,承载的业务量非常巨大,并发量也很高。这样的系统往往采用分布式的架构来均衡负载。那么这1000个并发就会是从不同的地方过来,商品库存就是共享的资源,也是这1000个并发争抢的资源,这个时候我们需要将并发互斥管理起来。这就是分布式锁的应用。 1.实现分布式锁的几种方案     1.Redis实现   (推荐)     2.Zookeeper实现     3.数据库实现 Redis实现分布式锁 * * 在集群等多服务器中经常使用到同步处理一下业务,这是普通的事务是满足不了业务需求,需要分布式锁 * * 分布式锁的常用3种实现: * 0.数据库乐观锁实现 * 1.Redis实现 --- 使用redis的setnx()、get()、getset()方法,用于分布式锁,解决死锁问题…
2025-05-10 阅读全文 →
FWQ
服务器教程
详解RedisStream做消息队列
详解RedisStream做消息队列 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《详解RedisStream做消息队列》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下队列、消息、RedisStream,希望所有认真读完的童鞋们,都有实质性的提高。 List 众所周知redis数据结构中的list的lpush与rpop可以用于常规消息队列,从集合的最左端写入,最右端弹出消费。并且支持多个生产者与多个消费者并发拿数据,数据只能由一个消费者拿到。 但这个方案并不能保证消费者消费消息后是否成功处理的问题(服务挂掉或处理异常等),机制属于点对点模式不能做广播模式(发布/订阅模式) Pub/sub 于是redis提供了相应的发布订阅功能,为了解除点对点的强绑定模式引入了Channel管道。 当生产者向管道中发布消息,订阅了该管道的消费者能够同时接收到该消息,而且为了简化订阅多个管道需要显式关注多个名称提供了pattern能力。 通过名称匹配如果接收消息的频道wmyskxz.chat,consumer3也会收到消息。 但这个方案也有很大的诟病就是不会持久化,如果服务挂掉重启数据就全丢弃了,也没有提供ack机制,不保证数据可靠性,不管有没有消费成功发后既忘。 Stream stream的话结构很像kafka的设计思想,提供了consumer group和offset机制,结构上感觉跟kafka的topic差不多,只是没有对应partation副本机制,而是一个追加消息的链表结构。客户端调用XADD时候自动创建stream。每个消息都会持久化并存在唯一的id标识 Consumer Group 消费者组的概念跟kafka的消费者概念如出一辙,消费者既可以用XREAD命令进行独立消费,也可以多个消费者同时加入一个消费者组。一条消息只能由一个消费者组中的一个消费者消费。这样可以在分布式系统中保证消息的唯一性。 其实这个特性我后来仔细琢磨了一下当时自认为无懈可击的流式图表为了保证分布式系统消息唯一做了redis分布式锁。有点鸡肋,明明消费者组已经保证了数据的唯一性。只能说加锁可以压缩资源成本 last_delivered_id 用于标识消费者组消费在stream上消费位置的游标,每个消费者组都有一个stream内唯一的名称,消费者组不会自动创建,需要用XGROUP CREATE显式创建。 pending_ids 每个消费者内部都有一个状态变量。用来表示已经被客户端消费但没有ack的消费。目的是为了保证客户端至少消费了消息一次(atleastonce)。如果消费者收到了消息处理完了但是没有回复ack,就会导致列表不断增长,如果有很多消费组的话,那么这个列表占用的内存就会放大 curd xadd 追加消息 xdel 删除消息,这里的删除仅仅是设置了标志位,不影响消息总长度 xrange 获取消息列表,会自动过滤已经删除的消息 xlen 消息长度 del 删除Stream pending_ids如何避免消息丢失 在客户端消费者读取Stream消息时,Redis服务器将消息回复给客户端的过程中,客户端突然断开了连接,消息就丢失了。…
2025-05-10 阅读全文 →