分类归档

服务器教程

服务器知识、操作系统教程、服务器常用软件等

FWQ
服务器教程
浅谈内存耗尽后Redis会发生什么
浅谈内存耗尽后Redis会发生什么 0浏览 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《浅谈内存耗尽后Redis会发生什么》,聊聊Redis内存耗尽,希望可以帮助到正在努力赚钱的你。 内存回收 使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis 中可以通过 4 个独立的命令来给一个键设置过期时间: expire key ttl:将 key 值的过期时间设置为 ttl 秒。 pexpire key ttl:将 key 值的过期时间设置为 ttl 毫秒。 expireat key timestamp:将 key…
2024-12-01 阅读全文 →
FWQ
服务器教程
redis-shake同步redis数据的实现方法
redis-shake同步redis数据的实现方法 0浏览 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《redis-shake同步redis数据的实现方法》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 有了redis shake 之后,同步redis数据库数据变得容易了很多,其实我们可以猜想,它应该利用了解析redis的rdb或aof的文件来达到数据同步的目的,事实上也差不多,有了之前的canal的使用经验,其同步思想也如出一辙; redis shake 简介 git地址: redis-shake是阿里云Redis&MongoDB团队开源的用于redis数据同步的工具 基本功能 redis-shake是我们基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。以下主要介绍同步sync; 恢复restore:将RDB文件恢复到目的redis数据库; 备份dump:将源redis的全量数据通过RDB文件备份起来; 解析decode:对RDB文件进行读取,并以json格式解析存储; 同步sync:支持源redis和目的redis的数据同步,支持全量和增量数据的迁移,支持从云下到阿里云云上的同步,也支持云下到云下不同环境的同步,支持单节点、主从版、集群版之间的互相同步。需要注意的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点; 同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移; 基本原理 edis-shake的基本原理就是模拟一个从节点加入源redis集群,首先进行全量拉取并回放,然后进行增量的拉取(通过psync命令)。如下图所示: 如果源端是集群模式,只需要启动一个redis-shake进行拉取,同时不能开启源端的move slot操作。如果目的端是集群模式,可以写入到一个结点,然后再进行slot的迁移,当然也可以多对多写入; 目前,redis-shake到目的端采用单链路实现,对于正常情况下,这不会成为瓶颈,但对于极端情况,qps比较大的时候,此部分性能可能成为瓶颈,后续我们可能会计划对此进行优化。另外,redis-shake到目的端的数据同步采用异步的方式,读写分离在2个线程操作,降低因为网络时延带来的同步性能下降; 更多内容请参阅官方说明 下面演示下,基于单节点模式下,使用redis shake完成redis两个节点数据库的完整过程;…
2024-12-01 阅读全文 →
FWQ
服务器教程
这40张图绝对吃透Redis数据结构
这40张图绝对吃透Redis数据结构 0浏览 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《这40张图绝对吃透Redis数据结构》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下Redis、数据、结构,希望所有认真读完的童鞋们,都有实质性的提高。   本文转载自微信公众号「小林coding」,作者小林coding。转载本文请联系小林coding公众号。 大家好,我是小林。 前几天发了一篇「为了拿捏 Redis 数据结构,我画了 20  张图」,收获了很多好评,但是当时急于发文,有些地方没有写完,也有些地方写的不是很完善。 然后我最近花了很多时间来完善文章,不仅加入了 Redis 新版本的两个数据结构,也在之前的文章内容加入了很多内容。 这次完整版终于来了,加了亿点点东西! 从之前的 1 万字,变成现在的 2 万字,图更是画到了接近 40 张!不管是内容还是图片,都比
2024-12-01 阅读全文 →
FWQ
服务器教程
详解如何清理Redis内存碎片
详解如何清理Redis内存碎片 0浏览 收藏 大家好,今天本人给大家带来文章《详解如何清理Redis内存碎片》,文中内容主要涉及到redis内存、碎片,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢! 明明做了数据删除,数据量已经不大了,为什么使用 top 命令查看时,还会发现 Redis 占用了很多内存呢?实际上,这是因为,当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。 Redis 释放的内存空间可能并不是连续的,那么,这些不连续的内存空间很有可能处于一种闲置的状态。这就会导致一个问题:虽然有空闲空间,Redis 却无法用来保存数据,不仅会减少 Redis 能够实际保存的数据量,还会降低 Redis 运行机器的成本回报率。 什么是Redis内存碎片? 操作系统的剩余空间总量足够,但申请一块N字节连续地址的空间时,剩余内存空间中没有大小为N字节的连续空间,那么这些剩余内存空间中,小于N字节的连续内存空间就是内存碎片。 Redis内存碎片是如何形成的? 内存碎片形成有内部原因和外部原因: 内部原因:内存分配器的分配策略决定操作系统无法做到“按需分配”。 Redis使用libc、jemalloc、tcmalloc多种内存分配器来分配内存,默认使用jemalloc。 内存分配器是按照固定大小来分配内存空间,不是完全按照应用程序申请的内存大小来分配。 以jemalloc为例,是按照一系列固定的大小划分内存空间,例如8字节、16字节、32字节、…、2KB、4KB等。当程序申请的内存最接近某个固定值时,jemalloc就会给它分配相应大小的空间。 外部原因:键值对大小不一样,并且键值对可以被修改和删除。 Redis申请内存空间分配时,对于大小不一的内存空间需求,内存分配器按照固定大小分配内存空间,分配的内存空间一般都会比申请的内存空间大一些,这会产生一定的内存碎片。 键值对会被修改和删除,会导致空间的扩容和释放。…
2024-12-01 阅读全文 →
FWQ
服务器教程
redis哨兵常用命令和监控示例详解
redis哨兵常用命令和监控示例详解 0浏览 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《redis哨兵常用命令和监控示例详解》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! sentinel monitor advertise 192.168.0.5 28001 2 sentinel set advertise client-reconfig-script /etc/redis/reconfig.sh sentinel flushconfig sentinel启动后需要手动将配置文件对应的调整为sentinel deny-scripts-reconfig no,否则不支持命令行runtime修改client-reconfig-script # SECURITY # # By default SENTINEL SET…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis作为数据处理平台的系统优化与性能调优
Redis作为数据处理平台的系统优化与性能调优 收藏 哈喽!今天心血来潮给大家带来了《Redis作为数据处理平台的系统优化与性能调优》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你! Redis作为一款高性能内存数据库,已经成为了现代应用架构中最为重要的组件之一。Redis在众多应用场景中都具有着极高的价值,比如缓存、消息队列、分布式锁等,但是在实际应用中,很多人经常遇到Redis的性能瓶颈问题。本文旨在探讨如何对Redis进行系统优化和性能调优,从而解决这些常见的问题。 硬件配置 首先,Redis的性能取决于硬件配置。因此,为了达到更好的性能,需要针对自己的业务场景进行合理的硬件配置。 通常来说,Redis的内存大小是业务的瓶颈之一,根据实际需求,选择合适大小的内存才能够更好地支持业务。此外,CPU的性能也是非常重要的因素,而且Redis一般会在单线程中运行,所以单核CPU性能越好,Redis的性能越好。此外,使用SSD作为持久化存储,可以有效提升Redis的数据写入性能。 配置优化 Redis的配置文件(redis.conf)包含了所有Redis节点的参数设置,这些配置参数可以大大影响Redis的性能。对于大多数业务来说,需要重点关注以下几个配置项。 2.1 maxmemory 这个参数指定了Redis内存使用的最大大小,一旦内存达到这个上限,Redis会使用数据淘汰策略删除过期数据。如果maxmemory设置过小,那么将会经常发生内存淘汰,导致Redis性能下降,业务受到损失。如果maxmemory设置太大,可能导致Redis内存占用过大,影响系统稳定性。 在实际使用中,可以通过设置maxmemory的值,使得内存的利用率达到最大化,并且尽可能地避免数据淘汰。 2.2 maxclients 这个参数指定了在Redis数据库上允许的最大客户端连接数。如果maxclients设置太小,可能会导致应用中等待连接的请求比较多,出现连接超时或连接丢失等错误。如果maxclients设置过大,则会对Redis的性能造成一定的影响,建议根据机器的硬件资源和负载情况适当调整。 2.3 set-max-intset-entries 当使用intset表示set类型时,当元素数量超过这个值时,intset会换成hashtable来进行存储,因为hashtable的复杂度是O(1),而intset的复杂度是O(n),所以设置这个值可以控制set类型在内存的大小和查询性能。 2.4 hash-max-ziplist-entries/hask-max-ziplist-value hash-max-ziplist-entries指定了采用ziplist编码类型时,hash类型的键值对的最大数量,hask-max-ziplist-value指定了采用ziplist编码类型时,hash类型的键值对的最大每个值的大小。当hash大小在这个范围内,采用ziplist可以更节省内存,提高读写性能。因此,可以根据实际使用需求来调整这两个参数的大小。 除此之外,Redis还有很多其他的配置参数,根据实际需求进行针对性的设置。 数据架构优化 Redis支持多种数据结构,包括字符串、列表、哈希表、集合、排序集合等,而不同的数据结构在不同的应用场景下需要不同的性能表现。 在实际使用Redis时,应该根据具体的业务需求,选择合适的数据结构,并且在使用时,应该合理组合使用各种数据结构,以达到更高的性能和效率。 另外,在每个数据结构的实现中,Redis都为我们提供了非常优秀的API,比如字符串类型的mget、set、incr、decr、getset等命令,还包括列表类型的lpush、rpush、lpop、rpop等命令,以及哈希表类型的hset、hget、hdel等命令等。使用这些API不但可以极大地减少业务代码的复杂度,还可以高效地操作数据,提高Redis的性能。需要根据实际需求合理选用这些API。 应用程序优化…
2024-12-01 阅读全文 →
FWQ
服务器教程
redis集群搭建_动力节点Java学院整理
redis集群搭建_动力节点Java学院整理 0浏览 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《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配置。…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis与PHP的位图操作:如何精确统计用户行为
Redis与PHP的位图操作:如何精确统计用户行为 收藏 今天golang学习网给大家带来了《Redis与PHP的位图操作:如何精确统计用户行为》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~ Redis与PHP的位图操作:如何精确统计用户行为 一、引言在大数据时代,对用户行为进行精确统计是互联网应用开发中非常重要的一部分。Redis作为一款高性能的键值存储系统,在用户行为统计中扮演了重要的角色。而位图操作是Redis提供的一种高效、灵活的方式,用于准确计算用户行为。 二、Redis位图操作原理Redis的位图操作基于字符串的存储结构,每个字节表示8个位。利用位图操作,我们可以以最小的内存消耗来记录用户的操作行为,如登录、阅读、点赞等。 Redis提供了位图操作的多种命令,其中最常用的是SETBIT、GETBIT和BITCOUNT,用于设置位、获取位和统计位中置为1的个数。 三、使用Redis位图统计用户登录行为下面以用户登录行为为例,演示如何使用Redis位图操作进行精确的统计。 步骤1:创建一个登录行为统计的键值对,例如”login:behavior”。 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $key = 'login:behavior'; 步骤2:根据用户ID和登录日期,设置位图中对应的位为1。 $userId = 12345; $loginDate = '2021-01-01'; $index = strtotime($loginDate)…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis三种特殊数据类型的具体使用
Redis三种特殊数据类型的具体使用 0浏览 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis三种特殊数据类型的具体使用》,介绍一下数据类型、Redis特殊,希望对大家的知识积累有所帮助,助力实战开发! 一、HyperLogLog 基数统计 1.1 什么是基数? 我们直接通过一个例子就可以明白什么是基数统计,比如数据集 {1, 2, 3, 3, 5, 5,}, 那么这个数据集的基数集为 {1,2,3,5}, 基数(不重复元素)为4。也就是说是不重复元素的个数。 1.2 使用基数统计的好处 每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。如果要从内存角度来比较的话Hyperloglog是首选。…
2024-12-01 阅读全文 →
FWQ
服务器教程
浅谈redis缓存在项目中的使用
浅谈redis缓存在项目中的使用 0浏览 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《浅谈redis缓存在项目中的使用》,介绍一下redis缓存,希望对大家的知识积累有所帮助,助力实战开发! 背景 Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。 支持多种类型的数据结构。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence)。 通过 Redis 哨兵(Sentinel)和 Redis 集群(Cluster)的自动分区,提供高可用性(high availability)。 基本数据类型 字符串(strings) 1、string 的过期时间在重新设置值之后会被清除 127.0.0.1:6379>…
2024-12-01 阅读全文 →