Redis核心技术
文章平均质量分 85
Redis核心技术介绍文章
冲上云霄的Jayden
这个作者很懒,什么都没留下…
展开
-
Redis核心技术目录
高性能1.线程模型I/O复用2.数据结构2.1内存数据结构2.2数据索引3.数据持久化3.1AOF(日志)3.2RDB快照4.网络模型epoll网络框架高可靠1.哨兵机制2.主从复制高拓展1.数据分片2.负载均衡技术细节1.内存分配 glibc的malloc: glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。 glibc主要的功能实现包括:string(字符串处理),sign原创 2021-12-14 00:20:33 · 555 阅读 · 0 评论 -
Redis-cli 结合awk 批量处理 redis key
使用awk指令批量处理文本生成redis 指令,使用redis-cli 批量执行redis指令。原创 2024-08-06 20:30:18 · 1122 阅读 · 0 评论 -
Redis核心技术-性能-实战(查找bigKey、hotkey)
bigkeys 是以 scan 延迟计算的方式扫描所有 key,因此执行过程中不会阻塞 redis,但实例存在大量的 keys 时,命令执行的时间会很长,这种情况建议在 slave 上扫描。–bigkeys 是 redis 自带的命令,对整个 Key 进行扫描,统计 string,list,set,zset,hash 这几个常见数据类型中每种类型里的最大的 key。等问题,这个时候就需要排查 Redis 的大key去优化业务了,下面提供一些排查方案总结。多大的 key 算大呢?如何查询key大小?原创 2023-02-04 20:57:39 · 2627 阅读 · 0 评论 -
Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)
Redis在3.0版本前只支持单实例模式,虽然Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版。各大企业等不急了,在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各自的Redis集群方案。这些方案的核心思想是把数据分片(sharding)存储在多个Redis实例中,每一片就是一个Redis实例。包括:客户端分片、代理分片、Redis Cluster。原创 2023-02-04 15:17:42 · 1549 阅读 · 1 评论 -
Redis核心技术-高频问题-缓存雪崩、击穿、穿透
Redis缓存带来很大的遍历,但是使用不当也会带来额外的问题,例如缓存雪崩、缓存击穿、缓存穿透、缓存数据一致性等问题。缓存雪崩 什么是缓存雪崩? 缓存雪崩是指大量的应用请求没有命中Redis 缓存,应用将大量请求发送到数据库层,导致数据库层的压力激增。 缓存雪崩形成原因? 1.缓存中大量数据同时过期,导致大量请求无法得到处理。 解决方法:如果有大量数据同时过期,那么在设置过期时间时,过期时间增加随机数(例如1-5分钟)。 2.数据没有预热到缓存(例如整点开始的秒杀活动、爆款商品原创 2022-01-08 20:36:05 · 599 阅读 · 0 评论 -
Redis核心技术-高频问题-过期/删除Key
Redis三种清除过期key策略 被动删除、主动删除、Redis已用内存超过maxmemory限定时,触发主动清理策略。被动删除 当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key1、被动删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会对其他的expire key上浪费无谓的CPU时间。2、但是被动删除策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空原创 2022-01-06 22:54:03 · 861 阅读 · 0 评论 -
Redis核心技术-高频问题-缓存淘汰策略
内存不是无限大的,有用完的时候,当内存满时,边触发Redis淘汰策略。淘汰策略分类 淘汰策略总共8种。不进行数据淘汰的策略 noeviction,默认使用的配置。 noeviction策略是缓存被写满了,再有写请求来时,Redis 不再提供服务,而是直接返回错误。设置了过期时间的数据中进行淘汰 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)。 volatile-ttl: 根据过期时间的原创 2022-01-06 22:30:31 · 895 阅读 · 0 评论 -
Redis核心技术-性能-内存碎片如何形成以及处理办法
内存碎片是如何形成的? 内存碎片的形成有内因和外因两个层面的原因。1.内因是操作系统的内存分配机制;2.外因是Redis 的负载特征。内因:内存分配器的分配策略 内存分配器一般是按固定大小来分配内存,而不是完全按照应用程序申请的内存空间大小给程序分配。 Redis 可以使用 libc、jemalloc、tcmalloc 多种内存分配器来分配内存,默认使用 jemalloc。 jemalloc 的分配策略之一,是按照一系列固定的大小划分内存空间,例如 8 字节、16 字节、32 字节、4原创 2022-01-05 21:52:35 · 1126 阅读 · 0 评论 -
Redis核心技术-性能-Redis响应慢检查点
获取 Redis 实例在当前环境下的基线性能。 所谓的基线性能呢,也就是一个系统在低压力、无干扰下的基本性能,这个性能只由当前的软硬件配置决定。 从 2.8.7 版本开始,redis-cli 命令提供了–intrinsic-latency 选项,可以用来监测和统计测试期间内的最大延迟,这个延迟可以作为 Redis 的基线性能。其中,测试时长可以用–intrinsic-latency 选项的参数来指定。$ ./redis-cli --intrinsic-latency 120Max laten.原创 2022-01-05 20:54:37 · 540 阅读 · 0 评论 -
Redis核心技术-异步机制
Redis单线程处理网络IO、key-value操作、加载RDB文件等,但是部分操作会导致Redis主线程阻塞。那么都有哪些阻塞主线程的操作,以及哪些操作可以异步处理呢?Redis实例交互式操作client和Redis的操作 client和Redis的操作包含:网络 IO,键值对增删改查操作,清空数据库操作。 另外,bgsave、bgrewriter等操作时主线程fork子进程处理,如果Redis实例不是大内存(32G以上)Redis主线程阻塞时间较短。网络 IO Redis采用多路复原创 2022-01-03 21:22:07 · 2716 阅读 · 0 评论 -
Redis核心技术-数据结构4-GEO
前言 业务场景中经常有用到地理位置的业务,例如:打车、附近商家、附近停车位等。 此类业务称为LBS(Location-Based Service)基于位置信息服务。 业务常见问题是:1.如何存储经纬度信息?2.如何根据匹配指定范围内经纬度信息?经纬度 经纬度是经度与纬度的合称组成一个坐标系统,称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。 经度范围是[-180,180],纬度范围是[-90,90]。GEO Redi原创 2022-01-03 15:39:58 · 409 阅读 · 0 评论 -
Redis核心技术-数据结构3-String、Redis Object
/ 对象的类型,REDIS_STRING,REDIS_LIST,REDIS_HASH,// 未使用的两个位// 编码的方式,Redis 为了节省空间,提供多种方式来保存一个数据// 例如:int编码、embstr编码、raw编码// 当内存紧张,淘汰数据的时候用到// 引用计数// 数据指针void *ptr;} robj;RedisObject 的内部组成包括了 type,、encoding,、lru 和 refcount 4 个元数据,以及 1 个*ptr指针。lru。原创 2022-01-02 22:55:53 · 383 阅读 · 0 评论 -
Redis核心技术-高可靠-集群(cluster)
前言 Redis Cluster 保证CAP中的可用性和一致性。哈希槽 Redis Cluster 不使用一致性散列,而是一种不同形式的分片,其中每个key在概念上都是我们所谓的散列槽的一部分。 Redis 集群中有 16384 个哈希槽(2的14次方),要计算key的哈希槽是多少,我们只需计算CRC16(key) % 16384。 比如有3个Redis节点,哈希槽如何划分呢?节点 1 包含从 0 到 5500 的哈希槽。节点 2 包含从 5501 到 11000 的哈希槽。节点原创 2022-01-02 15:13:52 · 727 阅读 · 0 评论 -
Redis核心技术-高可靠-哨兵机制详解(监控、选Master、通知)
前言 主从复制为了解决主库读压力(包括QPS、网络流量等),如果master宕机了,slave还可以提供读操作,写操作则不行。 如何保证master宕机后,Redis可以继续提供服务呢? 当然是Redis的哨兵机制。哨兵机制 哨兵其实是Redis运行在特殊模式下的进程(主从库都存在)。哨兵负责监控、选master、通知。如何判断master已宕机?master宕机后,如何产生新的master新master和slave如何建立联系哨兵模式配置...原创 2021-12-26 22:22:08 · 812 阅读 · 0 评论 -
Redis核心技术-高可靠-主从复制
前言 Redis的高可靠性主要体现在数据尽量少丢失、服务尽量少中断。 数据尽量少丢失:服务发生故障宕机后,存储在Redis中的数据尽可能的少丢失或者不丢失。Redis通过AOF、RDB持久化保证。 服务尽量少中断:服务发生故障宕机后,Redis可以快速恢复提供服务。Redis通过主从复制冗余数据保证。Redis主从模式 主从模式采用读写分离方式,主库负责写、更新、删除操作,执行完后同步到从库,主从库都可以负责读取操作。主从复制的配置主从复制的过程如何保证主从数据一致性...原创 2021-12-24 22:59:25 · 324 阅读 · 0 评论 -
Redis核心技术-持久化-RDB生成&恢复
RDB(Redis Database) 内存快照,就是指内存中的数据在某一个时刻的状态记录。 和 AOF 相比,RDB 记录的是某一时刻的数据,并不是操作,所以,在做数据恢复时,我们可以直接把 RDB 文件读入内存,很快地完成恢复。 但内存快照也并不是最优选项如何生成快照save命令save时在主线程中执行,会导致阻塞;bgsave命令bgsave时创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。主线程的确没有阻塞,可以原创 2021-12-22 23:06:26 · 1437 阅读 · 0 评论 -
Redis核心技术-持久化-AOF
前言 Redis基于内存存储数据,服务器宕机了数据就会丢失,为了解决这个问题,Redis把内存数据持久化保存下来。持久化的方式分为AOF、RDB。AOF aof的全称是append of file,采用追加文件的方式进行持久化,其原理也很简单就是当客户端发送命令给Redis Server主进程后,Redis中会启动一个aof进程将这些命令逐条写入到aof文件中。 AOF 文件是以追加的方式,逐一记录接收到的写命令的。当一个键值对被多条写命令反复修改时,AOF 文件会记录相应的多条命令。 R原创 2021-12-19 22:23:58 · 872 阅读 · 0 评论 -
Redis核心技术-线程模型
我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。 但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。为什么使用单线程? 多线程并发开销大,访问共享资源时,要确保资源的正确性,需要额外的机制保证正确性,额外的操作增加了系统开销。多线程为什么快呢?1.Redis基于内存存储和操作数据;原创 2021-12-19 00:13:05 · 1035 阅读 · 0 评论 -
Redis核心技术-数据结构2-数据(String、Hash、List、Set、Sorted Set、bitmaps、hyperLogLogs)类型
Redis支持数据类型 Redis数据结构众多,如何指定key对应那种数据类型呢? 使用 type 命令:> set str-key strvalOK> type str-keystring字符串(strings) Redis字符串能包含任意类型的数据。 一个字符串类型的值最多能存储512M字节的内容。散列(hashes) Hashes,由field和关联的value组成的map。field和value都是字符串列表(lists) lists基于Linke原创 2021-12-14 00:13:52 · 325 阅读 · 0 评论 -
Redis核心技术-数据结构1-底层(动态字符串、双向链表、压缩列表、跳表)结构
我们平常所熟悉的String、List、Set、Sorted Set、Hash等只是Redis键值对中值的数据类型,也就是数据的保存类型,而他们底层的实现是如何的呢?6种底层数据结构原创 2021-12-13 01:43:45 · 960 阅读 · 0 评论