作者文章

fwq

FWQ
服务器教程
Redis配置详解,让你的Redis更加优秀!
Redis配置详解,让你的Redis更加优秀! 收藏 本篇文章给大家分享《Redis配置详解,让你的Redis更加优秀!》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 Redis是一种快速、开源的非关系型内存数据库,它支持键值存储,提供了丰富的数据结构,如字符串、列表、集合、有序集合和哈希等,被广泛用于缓存、消息队列和会话管理等领域。在本篇文章中,我将为您介绍Redis的安装、配置和启动过程,并深入讲解其中的原理和技术细节。 安装Redis Redis的安装分为以下几个步骤: 1、下载Redis 您可以从Redis的官方网站(https://redis.io/)上下载Redis的最新版本。Redis支持Linux、Windows、MacOS和BSD等多种操作系统,您可以选择适合您操作系统的版本,并下载到本地。 2、解压Redis 在下载完成后,您需要解压Redis的压缩包。将压缩包解压到您想要安装Redis的位置。 3、编译Redis Redis是一款使用ANSI C编写的软件,它使用GNU make构建系统来进行编译。进入解压后的Redis文件夹,并执行以下命令进行编译: make 如果您的操作系统不支持make命令,您可以使用以下命令: make MALLOC=libc Redis的编译过程中需要使用到一些依赖库,如jemalloc、libc、tcl和openssl等。如果您的系统没有安装这些库,您需要先安装它们。 4、安装Redis 编译完成后,执行以下命令进行安装: make install Redis的安装目录默认为/usr/local/bin,您可以通过修改Makefile文件中的PREFIX变量来修改安装目录。 配置Redis Redis的配置文件名为redis.conf,它位于Redis的安装目录下。您可以根据您的需求修改配置文件中的配置项。Redis的配置项非常丰富,以下是一些常见的配置项: 1、绑定IP地址…
2025-05-10 阅读全文 →
FWQ
服务器教程
如何使用Redis实现数据持久化
如何使用Redis实现数据持久化 小伙伴们对数据库编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何使用Redis实现数据持久化》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助! 如何使用Redis实现数据持久化 引言Redis是一种快速、高效的内存数据库,但默认情况下它的数据是存储在内存中的。这就意味着一旦服务器断电或重启,Redis中的数据将会丢失。为了解决这个问题,Redis提供了一些机制来实现数据的持久化。本文将介绍如何使用Redis实现数据的持久化,并给出具体的代码示例。 RDB持久化RDB持久化是Redis默认的一种数据持久化方式。它通过将Redis的数据转储到硬盘上的一个二进制文件(.rdb文件)中来实现数据持久化。可以手动触发保存操作,也可以设置自动触发保存。 以下是手动触发保存的代码示例: SAVE 以下是设置自动触发保存的代码示例: CONFIG SET save "60 1000" 上述代码表示在60秒内,如果有1000个键被修改过,则自动执行SAVE命令。 AOF持久化除了RDB持久化,Redis还提供了AOF(Append-Only File)持久化方式。AOF持久化将每次对Redis服务器进行写操作的命令追加到一个文件的末尾(AOF文件),当Redis重启时,会重新执行AOF文件中的命令来恢复数据。 以下是启用AOF持久化的代码示例: CONFIG SET appendonly yes 混合持久化Redis还支持混合持久化,即同时使用RDB持久化和AOF持久化。这种方式可以充分利用两种持久化方式的优点,同时减少它们的缺点。 以下是启用混合持久化的代码示例: CONFIG SET appendonly yes CONFIG…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis的面试题及答案有哪些
Redis的面试题及答案有哪些 收藏 小伙伴们对数据库编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Redis的面试题及答案有哪些》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助! 说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个节点都有指向前置节点和后置节点的指针,同时表头节点的前置和后置节点都指向NULL。 字典hashtable:用于保存键值对的抽象数据结构。redis使用hash表作为底层实现,每个字典带有两个hash表,供平时使用和rehash时使用,hash表使用链地址法来解决键冲突,被分配到同一个索引位置的多个键值对会形成一个单向链表,在对hash表进行扩容或者缩容的时候,为了服务的可用性,rehash的过程不是一次性完成的,而是渐进式的。 跳跃表skiplist:跳跃表是有序集合的底层实现之一,redis中在实现有序集合键和集群节点的内部结构中都是用到了跳跃表。redis跳跃表由zskiplist和zskiplistNode组成,zskiplist用于保存跳跃表信息(表头、表尾节点、长度等),zskiplistNode用于表示表跳跃节点,每个跳跃表的层高都是1-32的随机数,在同一个跳跃表中,多个节点可以包含相同的分值,但是每个节点的成员对象必须是唯一的,节点按照分值大小排序,如果分值相同,则按照成员对象的大小排序。 整数集合intset:用于保存整数值的集合抽象数据结构,不会出现重复元素,底层实现为数组。 压缩列表ziplist:压缩列表是为节约内存而开发的顺序性数据结构,他可以包含多个节点,每个节点可以保存一个字节数组或者整数值。 基于这些基础的数据结构,redis 封装了自己的对象系统,包含字符串对象string、列表对象list、哈希对象hash、集合对象set、有序集合对象zset,每种对象都用到了至少一种基础的数据结构。 redis 通过encoding属性设置对象的编码形式来提升灵活性和效率,基于不同的场景redis会自动做出优化。不同对象的编码如下: 字符串对象string:int整数、embstr编码的简单动态字符串、raw简单动态字符串 列表对象list:ziplist、linkedlist 哈希对象hash:ziplist、hashtable 集合对象set:intset、hashtable 有序集合对象zset:ziplist、skiplist Redis为什么快呢? redis  的速度非常的快,单机的 redis 就可以支撑每秒10几万的并发,相对于 mysql 来说,性能是 mysql 的几十倍。速度快的原因主要有几点:…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis在爬虫数据处理中的应用实践
Redis在爬虫数据处理中的应用实践 哈喽!今天心血来潮给大家带来了《Redis在爬虫数据处理中的应用实践》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你! Redis在爬虫数据处理中的应用实践 随着互联网的发展,爬虫技术逐渐得到了广泛的应用。但是,在大规模的爬虫任务中,数据的处理和储存是一个巨大的挑战。传统的数据库存储方式难以满足高并发、高可用、高性能等要求。而Redis作为一个高性能、内存型的数据库,被越来越多的爬虫开发者所应用。 本文将介绍Redis在爬虫数据处理中的应用实践,对于爬虫开发者来说,这将是一个非常有价值的参考。 一、Redis的数据结构 Redis支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。这些数据结构的特点是读写速度非常快,可以轻松地实现高效的数据处理。 在爬虫中,我们可以将数据按照类型区分,并存储到不同的Redis数据结构中。例如: 字符串 字符串是Redis最简单的数据结构,可以存储任何类型的数据。在爬虫中,我们可以将一些常用的临时数据(如代理IP、请求头、cookies等)存储到字符串中,并通过键值对的方式进行读写。 哈希表 哈希表是Redis另一个常用的数据结构,它由多个键值对组成。在爬虫中,我们可以将数据按照网站或者关键词分类,使用哈希表存储。例如: hset website1 url1 content1 hset website1 url2 content2 hset website2 url1 content1 hset website2 url2 content2…
2025-05-10 阅读全文 →
FWQ
服务器教程
常见的基于Redis缓存数据问题及解决方案
常见的基于Redis缓存数据问题及解决方案 收藏 小伙伴们对数据库编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《常见的基于Redis缓存数据问题及解决方案》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助! 1.缓存穿透 1.1 问题描述 缓存穿透是在客户端/浏览器端请求一个不存在的key,这个key在redis中不存在,在数据库中也不存在数据源,每次对此key的请求从缓存获取不到,就会请求数据源。 如使用一个不存在的用户id去访问用户信息,redis和数据库中都没有,多次进行请求可能会压垮数据源 1.2 解决方法 一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写入的,缓存不存在,出于容错考虑,查询不到的数据是不会缓存在redis当中,这将导致每次请求不存在的数据都会请求数据库,失去了缓存的意义。 (1)如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟 (2)设置可访问的名单(白名单):使用bitmaps类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问和bitmap里面的id进行比较,如果访问id不在bitmaps里面,进行拦截,不允许访问。 (3)采用布隆过滤器 (4)进行实时的数据监控,发现Redis在命中率急速降低时,排查访问对象和访问数据,设置黑名单。 2.缓存击穿 2.1 问题描述 当用户请求一个存在的key的数据时,此时redis中该key的数据已经过时,此时若有大量并发请求发现缓存过期都会请求数据源加载数据并且缓存到redis当中,这个时候大量的并发可能会把数据库服务压垮。 2.2 解决方法 key可能在某一个时间段被大量的请求,这个key的数据被称为热点数据,这个时候便要考虑“击穿”问题。 (1)预先设置热门数据:在redis高峰访问之前,把一些热门数据提前存入到redis里面,加大这些热门数据key的时长 (2)实时调整:现场监控哪些数据热门,实时调整key的过期时长 (3)使用锁: 就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db。 先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX)去set一个mutex…
2025-05-10 阅读全文 →
FWQ
服务器教程
新浪微博关系服务与Redis的故事
新浪微博关系服务与Redis的故事 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《新浪微博关系服务与Redis的故事》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 新浪微博的工程师们曾经在多个公开场合都讲到过,微博平台当前在使用并维护着可能是世界上***的Redis集群,其中***的一个业务,单个业务使用了超过 10T 的内存,这里说的就是微博关系服务。 风起 2009年微博刚刚上线的时候,微博关系服务使用的是最传统的 Memcache+Mysql 的方案。Mysql 按 uid hash 进行了分库分表,表结构非常简单: 业务方存在两种查询: 查询用户的关注列表:select touid from table where fromuid=?order by addTime desc 查询用户的粉丝列表:select fromuid from table…
2025-05-10 阅读全文 →
FWQ
服务器教程
面试挂了,批量执行Redis命令的方式有哪些,谁能回答?
面试挂了,批量执行Redis命令的方式有哪些,谁能回答? 收藏 大家好,我们又见面了啊~本文《面试挂了,批量执行Redis命令的方式有哪些,谁能回答?》的内容中将会涉及到命令、服务器、Redis等等。如果你正在学习数据库相关知识,欢迎关注我,以后会给大家带来更多数据库相关文章,希望我们能一起进步!下面就开始本文的正式内容~ 1. 引言 1.1 创作初衷 最近参加面试的时候,被问到一个关于Redis的问题: 批量执行Redis命令的方式有哪些? 突然被问到这个问题,我先是有点懵逼。 最容易想到的是Redis的一些批量命令,例如MGET(同时获取多个key的value)、MSET(同时设置多个key-value键值对)。再有其他的,就暂时印象有点模糊,想不起来。 结束之后,总结了才发现,这是纯纯的八股文。如果平时不总结、背诵,突然被问到,很难回答的全面。 1.2 为什么需要批量执行Redis命令 在实际应用中,我们常常需要一次执行多个Redis命令。通过批量执行命令,我们可以实现以下目的: 提高命令执行效率:批量执行可以减少网络延迟,提高Redis服务器的响应速度。 简化客户端逻辑:批量执行可以将多个命令封装成一个操作,简化客户端处理逻辑。 提升事务性能:通过批量执行,可以保证一组命令在同一时间内执行,提高事务的性能。 1.3 批量执行Redis命令的方式 常见的批量执行Redis命令的方式,共有下面四种: Redis基础命令,例如MGET、MSET pipeline(管道)命令 Redis事务 Lua脚本 接下来就详细讲一下这四种批量执行Redis命令方式的具体使用。 2. Redis基础命令…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis快?深入解析Redis内存模型
Redis快?深入解析Redis内存模型 收藏 本篇文章向大家介绍《Redis快?深入解析Redis内存模型》,主要包括内存、Redis、模型,具有一定的参考价值,需要的朋友可以参考一下。 Redis 是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说 Redis 是实现网站高并发不可或缺的一部分。 我们使用 Redis 时,会接触 Redis 的 5 种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是 Redis 相对于 Memcached 等的一大优势。 在了解 Redis 的 5 种对象类型的用法和特点的基础上,进一步了解 Redis 的内存模型,对 Redis 的使用有很大帮助,例如: 估算…
2025-05-10 阅读全文 →
FWQ
服务器教程
一文详解Redis在万亿级日访问量下的中断优化
一文详解Redis在万亿级日访问量下的中断优化 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《一文详解Redis在万亿级日访问量下的中断优化》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 2017 年年初以来,随着 Redis 产品的用户量越来越大、接入服务越来越多,再加上美团点评 Memcache 和 Redis 两套缓存融合…… 这导致 Redis 服务端的总体请求量从年初最开始日访问量百亿次级别上涨到高峰时段的万亿次级别,因此给运维和架构团队都带来了极大的挑战。 原本稳定的环境也因为请求量的上涨带来了很多不稳定的因素,其中一直困扰我们的就是网卡丢包问题。 起初线上存在部分 Redis 节点还在使用千兆网卡的老旧服务器,而缓存服务往往需要承载极高的查询量,并要求毫秒级的响应速度,如此一来千兆网卡很快就出现了瓶颈。 经过整治,我们将千兆网卡服务器替换为了万兆网卡服务器。本以为可以高枕无忧,但是没想到,在业务高峰时段,机器竟然也出现了丢包问题,而此时网卡带宽使用还远远没有达到瓶颈。 定位网络丢包的原因 从异常指标入手 首先,我们在系统监控的 net.if.in.dropped 指标中,看到有大量数据丢包异常,那么第一步就是要了解这个指标代表什么。 这个指标的数据源,是读取 /proc/net/dev 中的数据,监控 Agent…
2025-05-10 阅读全文 →
FWQ
服务器教程
WOT峰会《GoRedis:SSD替代方案》陌陌CTO李志威
WOT峰会《GoRedis:SSD替代方案》陌陌CTO李志威 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《WOT峰会《GoRedis:SSD替代方案》陌陌CTO李志威》,主要介绍了Redis,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
2025-05-10 阅读全文 →