作者文章

fwq

FWQ
服务器教程
Redis 异常 read error on connection 的解决方案
Redis 异常 read error on connection 的解决方案 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis 异常 read error on connection 的解决方案》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 一、造成原因与场景 在接口连接 redis 时,使用了 pconnect 进行 redis 长连接,在 Redis->auth() 中抛出异常: PHP Fatal error: Uncaught exception 'RedisException' with message 'read error on connection' 注:由于 php-fpm 对连接的重用性,所以,当存在cgi进程管理器[如php-fpm,spawn-cgi],使用…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis数据持久化方式技术解析
Redis数据持久化方式技术解析 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Redis数据持久化方式技术解析》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下持久化、redis数据,希望所有认真读完的童鞋们,都有实质性的提高。 RDB(Redis DataBases) 1、RDB是什么: 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。 Redis会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件中,持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式是要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。 2、Fork的作用: Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。 3、Rdb保存的是dump.rdb文件。 4、如何触发RDB快照 (1)配置文件中默认的快照配置:冷拷贝后重新使用(可以cp dump.rdb dump_new.rdb)。 (2)命令save或者bgsave:Save,只管保存其他不管,全部阻塞;bgsave,redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间。 (3)执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义。 5、如何恢复: 将备份文件(dump.rdb)移动到redis安装目录并启动服务即可。 6、优势:适合大规模的数据恢复;对数据完整性和一致性要求不高。 7、劣势:在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。 8、如何停止:动态所有停止RDB保存规则的方法:redis-cli config set save “” 总结 1、RDB是一个非常紧凑的文件。…
2025-05-10 阅读全文 →
FWQ
服务器教程
完美解决linux上启动redis后配置文件未生效的问题
完美解决linux上启动redis后配置文件未生效的问题 收藏 本篇文章向大家介绍《完美解决linux上启动redis后配置文件未生效的问题》,主要包括文件、配置、不生效、linuxredis,具有一定的参考价值,需要的朋友可以参考一下。 修改redis.conf后,重启redis,发现修改的配置未生效,原来是需要在启动redis的时候在命令中加上配置文件,命令如下 ./redis-server /usr/local/redis-3.2.8/redis.conf & 仔细阅读配置文件可以开头看到有这样的描述 # Note that in order to read the configuration file, Redis must be # started with the file path as…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis数据库原理深入刨析
Redis数据库原理深入刨析 收藏 一分耕耘,一分收获!既然打开了这篇文章《Redis数据库原理深入刨析》,就坚持看下去吧!文中内容包含Redis数据库等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢! 1.服务器和客户端实现的数据库  Redis服务器在启动时,会根据redis.conf文件的中databases xx这个配置决定创建多少个数据库(默认配置是16),启动后默认使用的0号数据库,当然可以使用select dbnum这个命令来切换。需要注意的是在redis集群模式下,只有0号数据库可以用,是无法切换到其他库的。  Redis服务器会将所有的数据库都保存在服务器状态的redisServer的db数组中,数组的每一项都代表了一个数据库,用redisDb结构来表示,首先看一下redisServer.db的源码: struct redisServer { ... // 代表数据库的数组 redisDb *db; // 这个记录的配置文件中数据库的数量 int dbnum; ... }  我们通过客户端向Redis写入的任何数据都会记录到这个db数组中,根据前面描述,我们知道可以通过select命令切换到另一个目标数据库,但是客户端是怎么记录的它当前操作的哪个数据库呢?我们继续看一下源码: typedef struct client { ...…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis Cluster集群动态扩容的实现
Redis Cluster集群动态扩容的实现 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis Cluster集群动态扩容的实现》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 一、引言 文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境。当然,大家可以使用 Cluster info 命令查看Cluster集群的状态,也可以使用Cluster Nodes 命令来详细了解Cluster集群每个节点的详细信息和关系。我们可以在主节点上增加数据、操作数据,也可以在从节点上读取数据,这些操作当然都没有问题。我们今天这篇文章主要是讲解一下如何在不停掉Cluster集群环境的情况下,动态的往集群环境中增加主、从节点和动态的从集群环境中删除节点。好了,废话不多说,开始我们今天的讲解。在开始之前,先要说明一下,因为redis的动态扩容操作都是通过redis-trib.rb脚本文件来完成的,所以我们先来看看对这个脚本文件的说明,效果如图: [root@linux redis] # ruby redis-trib.rb 二、Cluster集群增加操作
2025-05-10 阅读全文 →
FWQ
服务器教程
redis分布式ID解决方案示例详解
redis分布式ID解决方案示例详解 收藏 小伙伴们对数据库编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《redis分布式ID解决方案示例详解》,就很适合你,本篇文章讲解的知识点主要包括解决方案、redis分布式ID。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助! 常用的分布式ID解决方案 在分布式系统中,生成全局唯一ID是非常重要的,因为在分布式系统中,多个节点同时生成ID可能会导致ID冲突。 下面介绍几种常用的分布式ID解决方案。 UUID UUID(通用唯一标识符)是由128位数字组成的标识符,它可以保证在全球范围内的唯一性,因为其生成算法基于时间戳、节点ID等因素。UUID可以使用Java自带的UUID类来生成,如下所示: javaCopy code import java.util.UUID; public class UuidGenerator { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid.toString()); }…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis处理高并发之布隆过滤器详解
Redis处理高并发之布隆过滤器详解 收藏 本篇文章给大家分享《Redis处理高并发之布隆过滤器详解》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 缓存穿透、击穿、雪崩 首先我们从缓存会出现的几种问题,来进行分析,在高并发的场景下如果出现这种情况,我们应该如何解决。 正常情况下,我们的web应用会先去请求缓存服务,如果缓存命中,那么就去拿缓存里面的数据,返回结果给应用, 缓存穿透 缓存穿透与缓存雪崩和缓存击穿还是不一样的,雪崩和击穿的情况下,数据库的数据都是真正常的,可以去请求数据库获取数据,只是缓存层出现问题,等待缓存恢复了,就会减轻数据库的压力。 而缓存透不一样的就是,缓存和数据库都没有要请求的数据,大量的请求来了,数据库的压力很大。 出现情况 数据库数据被大量清除,导致访问不到 黑客恶意攻击 常见的解决方案 redis缓存空值,请求不到的时候返回给应用空值。 使用布隆过滤器,把数据库的一部分数据hash到布隆过滤器里,在请求数据库之前先去布隆过滤器里筛选到一部分请求,判断数据是否存在,避免直接去访问数据库。 缓存击穿 出现情况 大量热点数据库过期,导致无法从缓存获取到数据,大量请求数据库也无法返回书就 解决方案 加锁,保证同一时间内,只允许有一个线程去更新缓存,等锁释放后在重新去请求缓存。 热点数据不去设置过期时间,如果要设置过期时间,在过期的时候通知后台去更新缓存的过期时间。 缓存雪崩 大量缓存在同一时间失效,导致大量请求进入数据库 redis故障宕机,导致缓存不能使用。 解决方案 同上加锁 给缓存的过期时间加入随机数,保证缓存不会在同一时间同时失效。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis凭啥可以这么快
Redis凭啥可以这么快 收藏 本篇文章给大家分享《Redis凭啥可以这么快》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 在日常开发中,为了保证数据的一致性,我们一般都选择关系型数据库来存储数据,如 MySQL,Oracle 等,因为关系型数据库有着事务的特性。然而在并发量比较大的业务场景,关系型数据库却又往往会成为系统瓶颈,无法完全满足我们的需求,所以就需要使用到缓存,而非关系型数据库,即 NoSQL 数据库往往又会成为最佳选择。 NoSQL 数据库最常见的解释是 non-relational,也有人解释为 Not Only SQL。非关系型数据库不保证事务,也就是不具备事务 ACID 特性,这也是非关系型数据库和关系型数据库最大的区别,而我们即将介绍的 Redis 就属于 NoSQL 数据库的一种。 什么是 Redis Redis 全称是:REmote DIctionary Service,即远程字典服务。Redis 是一个开源的(遵守…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis集合类型使用说明
Redis集合类型使用说明 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Redis集合类型使用说明》,聊聊Redis、元素、集合,我们一起来看看吧!   今天我们了解一下Redis中的集合类型,也就是set集合。在Redis中set也是可以保存多个字符串的。那么set集合和list链表到底有什么不同呢?下面我们重点介绍一下它们之间的不同。 set中的元素是不可以重复的,而list是可以保存重复元素的。 set中的元素是无序的,而list中的元素是有序的。 set中的元素不能通过索引下标获取元素,而list中的元素则可以通过索引下标获取元素。 除此之外set还支持更高级的功能,例如多个set取交集、并集、差集、等等。 下面我们介绍一下set中的相关命令。 命令 一、集合内操作 1.添加元素 sadd key member [member ...]  sadd命令也是有返回值的,它的返回值就是当前执行sadd命令成功添加元素的个数,因为set中不能保存重复元素,所以在执行: sadd setkey c d  命令时,返回的是1,而不是2。因为元素c,已经成功保存到set中,不在继续保存了,只能将d保存到set中。 2.删除元素 srem key member [member ...]    srem命令和sadd命令一样也是有返回值的,返回值就是当前删除元素的个数。 3.计算元素个数 scard key  scard命令的时间复杂度为O(1),scard命令不会遍历set中的所有元素,而是直接使用Redis中的内部变量。 4.判读元素是否在集合中 sismember key member  sismember命令也有返回值,如果返回值为1则表示当前元素在当前set中,如果返回0则表示当前元素不在set中。 5.随机从set中返回指定个数元素…
2025-05-10 阅读全文 →
FWQ
服务器教程
使用Python和Redis构建在线问卷调查:如何实现数据收集与分析
使用Python和Redis构建在线问卷调查:如何实现数据收集与分析 各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《使用Python和Redis构建在线问卷调查:如何实现数据收集与分析》,很明显是关于数据库的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享! 使用Python和Redis构建在线问卷调查:如何实现数据收集与分析 引言:随着互联网的普及和发展,在线问卷调查成为了收集数据和获取用户反馈的重要方式之一。本文将介绍如何使用Python和Redis搭建一个简单而强大的在线问卷调查系统,并通过代码示例演示如何实现数据收集与分析。 一、什么是Redis?Redis是一个开源的内存数据存储系统,常用于缓存、消息队列和数据库中间件。它支持多种数据结构,如字符串、列表、哈希表等,同时提供了丰富的命令和功能,使其成为了构建快速、稳定的应用程序的理想选择。 二、如何使用Python和Redis构建在线问卷调查系统的基本框架? 准备工作:首先,我们需要安装Redis和Python的Redis库,可以通过以下命令进行安装: pip install redis 创建问卷调查系统的数据库: import redis # 连接Redis数据库 r = redis.Redis(host='localhost', port=6379, db=0) # 创建一个问题和选项的字典(模拟数据库中的数据) question1 = { 'id': 1, 'question':…
2025-05-10 阅读全文 →