作者文章

fwq

FWQ
服务器教程
Redis几个重要的健康指标
Redis几个重要的健康指标 收藏 怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Redis几个重要的健康指标》,涉及到命令、内存、Redis、客户端,有需要的可以收藏一下 存活情况 所有指标中最重要的当然是检查redis是否还活着,可以通过命令PING的响应是否是PONG来判断。 连接数 连接的客户端数量,可通过命令src/redis-cli info Clients | grep connected_clients得到,这个值跟使用redis的服务的连接池配置关系比较大,所以在监控这个字段的值时需要注意。另外这个值也不能太大,建议不要超过5000,如果太大可能是redis处理太慢,那么需要排除问题找出原因。 另外还有一个拒绝连接数(rejected_connections)也需要关注,这个值理想状态是0。如果大于0,说明创建的连接数超过了maxclients,需要排查原因。是redis连接池配置不合理还是连接这个redis实例的服务过多等。 阻塞客户端数量 blocked_clients,一般是执行了list数据类型的BLPOP或者BRPOP命令引起的,可通过命令src/redis-cli info Clients | grep blocked_clients得到,很明显,这个值***应该为0。 使用内存峰值 监控redis使用内存的峰值,我们都知道Redis可以通过命令config set maxmemory 10737418240设置允许使用的***内存(强烈建议不要超过20G),为了防止发生swap导致Redis性能骤降,甚至由于使用内存超标导致被系统kill,建议used_memory_peak的值与maxmemory的值有个安全区间,例如1G,那么used_memory_peak的值不能超过9663676416(9G)。另外,我们还可以监控maxmemory不能少于多少G,比如5G。因为我们以前生产环境出过这样的问题,运维不小心把10G配置成了1G,从而导致服务器有足够内存却不能使用的悲剧。 内存碎片率 mem_fragmentation_ratio=used_memory_rss/used_memory,这也是一个非常需要关心的指标。如果是redis4.0之前的版本,这个问题除了重启也没什么很好的优化办法。而redis4.0有一个主要特性就是优化内存碎片率问题(Memory de-fragmentation)。在redis.conf配置文件中有介绍即ACTIVE…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis 的默认端口为啥是 6379 ?
Redis 的默认端口为啥是 6379 ? 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《Redis 的默认端口为啥是 6379 ?》,聊聊Redis、端口,希望可以帮助到正在努力赚钱的你。  今天来聊一个有意思的话题:Redis 的默认端口为什么是 6379 呢? 我之前也没有想过为什么Redis的默认端口是6379,估计是随便选的吧。然而今天偶然看到一篇帖子,原来不是随便选的,是有含义的。 先介绍下redis的作者Salvatore Sanfilippo(Antirez),意大利人,就是下图这位。 Antirez现在已经40多岁了,依然奋斗在代码一线,为开源社区做贡献。Antirez出生在非英语系国家,所以英语一直是他的短板。他曾经写过一篇博文,《英语伤痛 15 年》,以自己的实际经历鼓励非英语系国家的程序员突破英语障碍。或说回来,在他的另一篇博文《Redis as an LRU cache 》中,写到了为什么选用6379端口: Appendix: how to remember…
2025-05-10 阅读全文 →
FWQ
服务器教程
使用redis生成唯一编号及原理示例详解
使用redis生成唯一编号及原理示例详解 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《使用redis生成唯一编号及原理示例详解》,聊聊原理、redis唯一编号,希望可以帮助到正在努力赚钱的你。 在系统开发中,保证数据的唯一性是至关重要的一件事,目前开发中常用的方式有使用数据库的自增序列、UUID生成唯一编号、时间戳或者时间戳+随机数等。 在某些特定业务场景中,可能会要求我们使用特定格式的唯一编号,比如我有一张订单表(t_order),我需要生成“yewu(ORDER)+日期(yyyyMMdd)+序列号(00000000)”格式的订单编号,比如今天的日期是20200716,那我今天第一个订单号就是ORDER2020071600000001、第二个订单号就是ORDER2020071600000002,明天的日期是20200717,那么明天的第一个订单号就是ORDER2020071700000001、第二个订单号就是ORDER2020071700000002,以此类推。 今天介绍下如何使用redis生成唯一的序列号,其实主要思想还是利用redis单线程的特性,可以保证操作的原子性,使读写同一个key时不会出现不同的数据。以SpringBoot项目为例,添加以下依赖。 org.apache.commons commons-lang3 3.1 org.springframework.boot spring-boot-starter-data-redis ${spring.boot.version} application.properties中配置redis,我本地redis没有设置密码,所以注释了密码这一行 server.port=9091 server.servlet.context-path=/ spring.redis.host=127.0.0.1 spring.redis.port=6379 #spring.redis.password=1234 spring.redis.database=0 创建SequenceService类用于生成特定业务编号 package com.xiaochun.service; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;…
2025-05-10 阅读全文 →
FWQ
服务器教程
怎么用Redis实现分布式锁
怎么用Redis实现分布式锁 收藏 偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《怎么用Redis实现分布式锁》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步! 单机上的锁和分布式锁的联系与区别 我们先来看下单机上的锁。 对于在单机上运行的多线程程序来说,锁本身可以用一个变量表示。 变量值为 0 时,表示没有线程获取锁; 变量值为 1 时,表示已经有线程获取到锁了。 我们通常说的线程调用加锁和释放锁的操作,实际上,一个线程调用加锁操作,其实就是检查锁变量值是否为 0。如果是 0,就把锁的变量值设置为 1,表示获取到锁,如果不是 0,就返回错误信息,表示加锁失败,已经有别的线程获取到锁了。而一个线程调用释放锁操作,其实就是将锁变量的值置为 0,以便其它线程可以来获取锁。 我用一段代码来展示下加锁和释放锁的操作,其中,lock 为锁变量。 acquire_lock(){   if lock == 0      lock = 1      return 1   else      return 0 }  release_lock(){…
2025-05-10 阅读全文 →
FWQ
服务器教程
如何利用Redis和Perl 6开发分布式任务调度功能
如何利用Redis和Perl 6开发分布式任务调度功能 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何利用Redis和Perl 6开发分布式任务调度功能》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了! 如何利用Redis和Perl 6开发分布式任务调度功能 随着分布式系统的广泛应用,分布式任务调度成为了许多企业和开发者面临的一项重要挑战。Redis作为一款高性能的缓存数据库,以其快速的响应和持久化特性成为了分布式任务调度的理想选择。而Perl 6作为一门强大、灵活且容易上手的编程语言,能够很好地与Redis进行集成,为我们提供了丰富的功能和灵活的操作方式。 本文将介绍如何使用Redis和Perl 6来开发一个简单的分布式任务调度系统。我们将关注以下几个方面: Redis的安装和配置 Perl 6的安装和配置 Redis与Perl 6的连接 分布式任务调度的实现 Redis的安装和配置首先,我们需要在本地或者远程服务器上安装Redis。可以从Redis官方网站(https://redis.io/)下载Redis的源代码,并按照官方文档进行安装和配置。确保Redis成功运行并监听默认端口6379。 Perl 6的安装和配置接下来,我们需要在本地或者远程服务器上安装Perl 6。可以从Perl 6官方网站(https://perl6.org/)下载Perl 6的安装包,并按照官方文档进行安装和配置。确保Perl 6成功安装并可以执行。 Redis与Perl 6的连接在Perl 6中,我们可以使用Redis模块来连接和操作Redis数据库。首先,我们需要通过Perl 6包管理器zef来安装Redis模块: zef…
2025-05-10 阅读全文 →
FWQ
服务器教程
教你在Kubernetes上部署Redis高可用集群
教你在Kubernetes上部署Redis高可用集群 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《教你在Kubernetes上部署Redis高可用集群》,主要介绍了Redis、数据库、kubernetes,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!  Redis 介绍 Redis 代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。由于Redis接受多种格式的密钥,因此可以在服务器上执行操作,从而减少了客户端的工作量。它仅将磁盘用于持久性,而将数据库完全保存在内存中。Redis是一种流行的数据存储解决方案,并被GitHub,Pinterest,Snapchat,Twitter,StackOverflow,Flickr等技术巨头所使用。 为什么使用 Redis  它的速度非常快。它是用 ANSI C 编写的,并且可以在 POSIX 系统上运行,例如 Linux,Mac OS X 和 Solaris。  Redis 通常被排名为最流行的键/值数据库和最流行的与容器一起使用的 NoSQL 数据库。  其缓存解决方案减少了对云数据库后端的调用次数。  应用程序可以通过其客户端…
2025-05-10 阅读全文 →
FWQ
服务器教程
缓存数据丢了,原来是Redis持久化没玩明白
缓存数据丢了,原来是Redis持久化没玩明白 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《缓存数据丢了,原来是Redis持久化没玩明白》,主要介绍了Redis、缓存数据,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了! 我们都知道Redis是微服务架构中重要的基础数据库中间件,通过Redis可以将数据库中的数据缓存到内存中,当服务端有数据查询请求的时候,可以直接从内存中获取数据。如此,一方面服务端可以获得比较快的数据请求响应,另一方面降低了后端关系数据库的业务请求压力。但是正所谓尺有所短,寸有所长,Redis最大的优势就是内存数据也是最大的劣势,因为一旦服务器宕机或者服务器重启,内存中缓存的数据也会丢失。针对这样的场景,Redis提供了三种数据持久化机制,分别是AOF、RDB以及混合持久化来应对这种异常情况。本文主要从Redis实现持久化遇到的问题出发,站在设计者的角度思考相关问题的解决思路。 ​ AOF持久化 AOF持久化方式,即Append Only File,Redis通过记录执行修改操作命令这种记小本本的方式进行内存数据持久化。当需要通过AOF日志进行恢复数据时,Redis服务端启动后可以从日志文件中回放执行命令来实现内存数据恢复。当然了,AOF日志中记录的都是修改的命令,查询命令不会修改数据所以不需要进行记录。 可能大家都比较熟悉WAL(Write Ahead Log),即日志预写机制,它是数据库非常常用的确保数据操作原子性以及持久性的技术手段。拿Mysql举栗子,Mysql的WAL体现在undo log以及redo log等这些日志文件中,数据库在执行修改操作的时候并不是立刻将数据更新到磁盘上,而是先记录在日志中,主要目的是如果出现异常,可以直接从redo log中进行数据恢复,也就是说让Mysql知道上次意外发生的时候操作到底有没有成功,另外还可以将Mysql的随机写转换为顺序写,提升IO性能。但是AOF却不同,它是在Redis将数据写入内存之后,再将相关的操作命令写入AOF文件中。 那么问题来了,为什么Redis要采取这种独特的数据记录方式,而不是业界常用的WAL的方式呢?其实可以从以下两个层面思考原因。 (1)AOF文件中保存了执行缓存的命令,以便于保证在需要恢复数据的时候可以进行命令重放恢复数据,因此需要保证执行命令的合法性,而通过先缓存数据再进行命令追加日志的方式可以确保追加到AOF文件中的的命令都是合法有效的,redis在恢复数据的时候不需要再去检查命令是否有效,进一步提升内存数据恢复的效率。 (2)另外由于是在修改操作命令之后进行日志记录,日志记录的时候需要进行磁盘IO操作,因此不会阻塞当前的修改命令。 AOF文件内容是什么? 在搞清楚Redis为什么采用AOF文件记录修改命令之后,我们再来看看AOF文件中到底包含了哪些内容。 redis> SET mufeng handsomeOK Redis客户端与服务端之间采用RESP协议进行通信,它是一种应用层协议,对于Redis这种以效率为追求目标的中间件,通信协议必定要简单高效。就上面一条缓存操作命令来说:set mufeng handsome 对应的RESP报文就是*3$3set$6mufeng$8handsome,为了方便查看进行了手动换行。…
2025-05-10 阅读全文 →
FWQ
服务器教程
CentOS6.4 安装Redis 教程详解
CentOS6.4 安装Redis 教程详解 收藏 本篇文章给大家分享《CentOS6.4 安装Redis 教程详解》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 按照下面步骤依次执行 1.检查依赖,安装依赖 [root@ecs-3c46 ~]# whereis gcc gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz [root@ecs-3c46 ~]# whereis tc tc: /sbin/tc /usr/lib64/tc /usr/share/tc /usr/share/man/man8/tc.8.gz…
2025-05-10 阅读全文 →
FWQ
服务器教程
antd为Tree组件标题附加操作按钮功能
antd为Tree组件标题附加操作按钮功能 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《antd为Tree组件标题附加操作按钮功能》,聊聊功能、组件、antdTree、按钮,希望可以帮助到正在努力赚钱的你。 一、前言 使用antd的tree组件实现下面这样的模块树,点击标题请求其下列表的数据,点击标题旁边的操作图标则执行对应的增删改功能: 二、实现方案 1.封装一个设置树标题的方法,通过开关改变state来控制图标按钮是否可见:  处理树数据(name、children) const setTree = (module_data: any) => { return module_data.map((item: any) => { let _json = { ...item }; _json.name =…
2025-05-10 阅读全文 →
FWQ
服务器教程
redis实现共同好友的思路详解
redis实现共同好友的思路详解 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《redis实现共同好友的思路详解》,聊聊redis共同好友,我们一起来看看吧! 背景 ​ 微信朋友圈的点赞、评论,只能看到自己好友的信息。这就涉及到了一个共同好友的概念,通过redis的set集合可以很轻松的实现此功能。 共同好友实现思路 每个人的好友存放在set集合中。key的名字为friend_{userId}。如下图: 用户1的好友为2,3,4 用户2的好友为1,3,4 用户3的好友为1,4,5 交集 用户1和2是好友。他们的共同好友可以通过他们的交集获取。 redis命令示例: 127.0.0.1:6379> sadd friend_1 2 3 4 (integer) 3 127.0.0.1:6379> sadd friend_2 1 4 5…
2025-05-10 阅读全文 →